From c54b834d630247806ddfd2c717dd1d12f8a81c2d Mon Sep 17 00:00:00 2001 From: Ivan Yarcev Date: Thu, 7 Mar 2024 10:33:16 +0600 Subject: [PATCH 01/31] Updating for new libraries version --- source/ubl-settings-services.c | 30 ++++++++++++++++++++++-------- source/ubl-settings-services.h | 14 ++++++++++++++ ubl-settings-services.desktop | 2 +- 3 files changed, 37 insertions(+), 9 deletions(-) diff --git a/source/ubl-settings-services.c b/source/ubl-settings-services.c index 9e072ef..1cc2867 100644 --- a/source/ubl-settings-services.c +++ b/source/ubl-settings-services.c @@ -5,8 +5,14 @@ config main_config; //functions void yon_load_proceed(YON_CONFIG_TYPE type){ - if (yon_config_load_register(type,"system","SERVICES_ENABLE SERVICES_DISABLE SERVICES_MASK",NULL)){ - + yon_config_clean(); + if (!yon_char_is_empty(config_get_default_command)) + yon_config_load_config(YON_CONFIG_DEFAULT,config_get_default_command,NULL); + if (type==YON_CONFIG_GLOBAL){ + yon_config_load_config(type,config_get_global_command,NULL); + } + if (type==YON_CONFIG_LOCAL){ + yon_config_load_config(type,config_get_local_command,NULL); } } @@ -34,17 +40,21 @@ void on_config_global_load(GtkWidget *self,main_window *widgets){ } +void on_service_constant_update(){ + +} + void on_config_global_local_save(){ - yon_save_proceed(NULL,YON_CONFIG_BOTH,"system","SERVICES_ENABLE SERVICES_DISABLE SERVICES_MASK",NULL); + yon_save_proceed(NULL,YON_CONFIG_BOTH,config_get_global_command,NULL); } void on_config_local_save(){ - yon_save_proceed("system",YON_CONFIG_LOCAL,"system","SERVICES_ENABLE SERVICES_DISABLE SERVICES_MASK",NULL); + yon_save_proceed("system",YON_CONFIG_LOCAL,config_get_local_command,NULL); } void on_config_global_save(){ - yon_save_proceed("global",YON_CONFIG_GLOBAL,"system","SERVICES_ENABLE SERVICES_DISABLE SERVICES_MASK",NULL); + yon_save_proceed("global",YON_CONFIG_GLOBAL,config_get_global_command,NULL); } @@ -121,7 +131,7 @@ void on_config_autostart_clicked(GtkWidget *self, main_window *widgets){ if (status==0){ if (place ==-1){ if (!yon_config_append("SERVICES_ENABLE",name,",")){ - yon_config_register("SERVICES_ENABLE","[system]",name); + yon_config_register("SERVICES_ENABLE",SERVICES_ENABLE_get_command,name); } } } else { @@ -155,7 +165,7 @@ void on_config_autostop_clicked(GtkWidget *self, main_window *widgets){ if (status==0){ if (place ==-1){ if (!yon_config_append("SERVICES_DISABLE",name,",")){ - yon_config_register("SERVICES_DISABLE","[system]",name); + yon_config_register("SERVICES_DISABLE",SERVICES_DISABLE_get_command,name); } } } else { @@ -190,7 +200,7 @@ void on_config_block_clicked(GtkWidget *self, main_window *widgets){ if (status==0){ if (place ==-1){ if (!yon_config_append("SERVICES_MASK",name,",")){ - yon_config_register("SERVICES_MASK","[system]",name); + yon_config_register("SERVICES_MASK",SERVICES_MASK_get_command,name); } } } else { @@ -734,9 +744,11 @@ void on_tree_selection_changed(GtkWidget *self, main_window *widgets){ if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->MainTree)),&model,&iter)){ switch_status=1; } + if (getuid()==0){ gtk_widget_set_sensitive(widgets->ConfigAutostartButton,switch_status); gtk_widget_set_sensitive(widgets->ConfigAutostopButton,switch_status); gtk_widget_set_sensitive(widgets->ConfigBlockButton,switch_status); + } gtk_widget_set_sensitive(widgets->SystemAutostartButton,switch_status); gtk_widget_set_sensitive(widgets->SystemLaunchButton,switch_status); gtk_widget_set_sensitive(widgets->InfoButton,switch_status); @@ -833,6 +845,8 @@ int main(int argc, char *argv[]){ gtk_init(&argc,&argv); template_main_window *widgets = yon_ubl_window_setup(); yon_main_window_complete((main_window*)widgets); + if (getuid()!=0) + yon_ubl_status_box_render(ROOT_WARNING_LABEL,BACKGROUND_IMAGE_FAIL_TYPE); gtk_main(); return 0; } \ No newline at end of file diff --git a/source/ubl-settings-services.h b/source/ubl-settings-services.h index a98cd69..f453bde 100644 --- a/source/ubl-settings-services.h +++ b/source/ubl-settings-services.h @@ -48,6 +48,18 @@ #define start_log_command(target) yon_char_append("journalctl --all --no-pager --unit ",target) +#define config_get_local_command "ubconfig --source system get system SERVICES_ENABLE SERVICES_DISABLE SERVICES_MASK" +#define config_get_global_command "ubconfig --source global get system SERVICES_ENABLE SERVICES_DISABLE SERVICES_MASK" +#define config_get_default_command "" + +#define config_get_global_only_parameters "" +#define config_get_local_only_parameters "" + +#define SERVICES_ENABLE_get_command "ubconfig --source global get [system] SERVICES_ENABLE" +#define SERVICES_DISABLE_get_command "ubconfig --source global get [system] SERVICES_DISABLE" +#define SERVICES_MASK_get_command "ubconfig --source global get [system] SERVICES_MASK" +#define CONSOLE_FONT_get_command "ubconfig --source global get [locale] CONSOLE_FONT" + typedef char* string; string version_application; @@ -200,6 +212,8 @@ void on_config_local_save(); void on_config_global_save(); +void on_service_constant_update(); + log_window *yon_log_window_new(); gboolean yon_interface_update(main_window *widgets); diff --git a/ubl-settings-services.desktop b/ubl-settings-services.desktop index 3df33d6..494dca1 100644 --- a/ubl-settings-services.desktop +++ b/ubl-settings-services.desktop @@ -7,7 +7,7 @@ GenericName[ru]=Службы и процесссы systemd Comment=System cervices and processes configuration Comment[ru]=Настройка работы служб и процессов системы Type=Application -Exec=pkexec ubl-settings-services +Exec=ubl-settings-services Icon=com.ublinux.ubl-settings-services Terminal=false X-XfcePluggable=true From 4eca521d7d8bfbb109ea6f017ac2971576ed48b0 Mon Sep 17 00:00:00 2001 From: Ivan Yarcev Date: Thu, 21 Mar 2024 09:54:05 +0600 Subject: [PATCH 02/31] Application rework 1st stage --- Makefile | 2 + ...ux.ubl-settings-services.edit-symbolic.svg | 4 + ...ux.ubl-settings-services.lock-symbolic.svg | 1 + source/ubl-settings-services.c | 1098 +++++------ source/ubl-settings-services.h | 228 ++- source/ubl-strings.h | 7 + ubl-settings-services-log.glade | 102 +- ubl-settings-services-terminal.glade | 23 + ubl-settings-services.css | 4 +- ubl-settings-services.glade | 1687 ++++++++++++++--- 10 files changed, 2132 insertions(+), 1024 deletions(-) create mode 100644 icons/com.ublinux.ubl-settings-services.edit-symbolic.svg create mode 100644 icons/com.ublinux.ubl-settings-services.lock-symbolic.svg diff --git a/Makefile b/Makefile index 5e79ef1..4856d78 100644 --- a/Makefile +++ b/Makefile @@ -135,6 +135,8 @@ install: check uninstall @install -Dm644 -t "${DESTDIR}/usr/share/icons/hicolor/scalable/actions/" "icons/com.ublinux.${PKGNAME}.launch-symbolic.svg" @install -Dm644 -t "${DESTDIR}/usr/share/icons/hicolor/scalable/actions/" "icons/com.ublinux.${PKGNAME}.important-symbolic.svg" @install -Dm644 -t "${DESTDIR}/usr/share/icons/hicolor/scalable/actions/" "icons/com.ublinux.${PKGNAME}.lookup-symbolic.svg" + @install -Dm644 -t "${DESTDIR}/usr/share/icons/hicolor/scalable/actions/" "icons/com.ublinux.${PKGNAME}.edit-symbolic.svg" + @install -Dm644 -t "${DESTDIR}/usr/share/icons/hicolor/scalable/actions/" "icons/com.ublinux.${PKGNAME}.lock-symbolic.svg" @install -Dm644 -t "${DESTDIR}/usr/share/polkit-1/actions/" "${CMAKE_BUILD_DIR}/com.ublinux.${PKGNAME}${PKGIDENT}.policy" @if [ -z ${DESTDIR} ]; then \ [ -d "${DESTDIR}/usr/share/icons/hicolor/" ] && gtk-update-icon-cache -fiq "${DESTDIR}/usr/share/icons/hicolor/" &>/dev/null || true; \ diff --git a/icons/com.ublinux.ubl-settings-services.edit-symbolic.svg b/icons/com.ublinux.ubl-settings-services.edit-symbolic.svg new file mode 100644 index 0000000..baba3f9 --- /dev/null +++ b/icons/com.ublinux.ubl-settings-services.edit-symbolic.svg @@ -0,0 +1,4 @@ + + + + diff --git a/icons/com.ublinux.ubl-settings-services.lock-symbolic.svg b/icons/com.ublinux.ubl-settings-services.lock-symbolic.svg new file mode 100644 index 0000000..132b656 --- /dev/null +++ b/icons/com.ublinux.ubl-settings-services.lock-symbolic.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/source/ubl-settings-services.c b/source/ubl-settings-services.c index 1cc2867..437cd70 100644 --- a/source/ubl-settings-services.c +++ b/source/ubl-settings-services.c @@ -2,7 +2,7 @@ config main_config; -//functions +//saving & loading void yon_load_proceed(YON_CONFIG_TYPE type){ yon_config_clean(); @@ -40,6 +40,8 @@ void on_config_global_load(GtkWidget *self,main_window *widgets){ } +// functions + void on_service_constant_update(){ } @@ -58,644 +60,365 @@ void on_config_global_save(){ } +void on_config_autostart_clicked(){ -static void child_ready(VteTerminal *terminal, GPid pid, GError *error, gpointer user_data) -{ - if (error){}; - if (!terminal) return; - if (pid == -1) printf("Error\n\n\n"); - else vte_terminal_feed_child(VTE_TERMINAL(terminal),(char*)user_data,strlen((char*)user_data)); -} - -void yon_terminal_integrated_start(GtkWidget *terminal, char* command, void *endwork_function, void* endwork_function_argument){ - char **commands=new_arr(char*,2); - gchar **envp = g_get_environ(); - commands[0]=(gchar *)g_strdup(g_environ_getenv(envp, "SHELL")); - commands[1]=NULL; - char **env=new_arr(char*,2); - env[0]=""; - env[1]=NULL; - vte_terminal_set_size(VTE_TERMINAL(terminal),10,15); - VtePty *pty = vte_pty_new_sync(VTE_PTY_DEFAULT,NULL,NULL); - vte_terminal_set_pty(VTE_TERMINAL(terminal),pty); - char *install_command=yon_char_unite("clear;tput cup 0 0 && tput ed; ",command," ; sleep 5; stty -echo; unset PS1","\n",NULL); - if(endwork_function) - g_signal_connect(G_OBJECT(terminal), "child-exited", G_CALLBACK(endwork_function), endwork_function_argument); - vte_terminal_spawn_async(VTE_TERMINAL(terminal), - VTE_PTY_DEFAULT, - NULL, - commands, - NULL, - 0, - NULL, NULL, - NULL, - -1, - NULL, - child_ready, - install_command); - vte_pty_spawn_async(pty, - NULL, - commands, - NULL, - 0, - NULL, NULL, - NULL, - -1, - NULL, - NULL, - NULL); - vte_terminal_set_scrollback_lines(VTE_TERMINAL(terminal), -1); - vte_terminal_set_scroll_on_output(VTE_TERMINAL(terminal), TRUE); - vte_terminal_set_scroll_on_keystroke(VTE_TERMINAL(terminal), TRUE); - gtk_widget_show_all(terminal); - } +} + +void on_activate(GtkTreeView *self, main_window *widgets){ + if (self&&widgets){}; +} + +void on_config_autostop_clicked(){ + +} + +void on_config_block_clicked(){ + +} + +void on_system_autostart_clicked(){ + +} + +void on_system_kill_confirmed(GtkWidget *self,char *service_name){ + if (self&&service_name){}; + +} + +void on_system_launch_clicked(){ + +} + +void on_system_restart_clicked(){ + +} + +void on_source_show(){ + +} -// standard functions +void on_properties_show(){ -void on_config_autostart_clicked(GtkWidget *self, main_window *widgets){ +} + +void on_session_activate(){ + +} + +void on_session_end(){ + +} + +void on_session_block(){ + +} + +void on_status_show(){ + +} + +void on_log_show(){ + +} + +log_window *yon_log_window_new(){ + log_window *window = malloc(sizeof(log_window)); + GtkBuilder *builder = gtk_builder_new_from_resource(glade_path_log); + window->Window = yon_gtk_builder_get_widget(builder,"MonitorWindow"); + window->SystemTerminal = yon_gtk_builder_get_widget(builder,"SystemTerminal"); + window->TextEditor = yon_gtk_builder_get_widget(builder,"TextEditor"); + window->webHeaderNameLabel = yon_gtk_builder_get_widget(builder,"webHeaderNameLabel"); + window->UpdateButton = yon_gtk_builder_get_widget(builder,"UpdateButton"); + window->SaveButton = yon_gtk_builder_get_widget(builder,"SaveButton"); + window->target=NULL; + GdkRGBA rgba; + vte_terminal_get_color_background_for_draw(VTE_TERMINAL(window->SystemTerminal),&rgba); + vte_terminal_set_color_cursor(VTE_TERMINAL(window->SystemTerminal),&rgba); + yon_window_config_custom_window_setup(GTK_WINDOW(window->Window),"terminal_window"); + return window; +} + +void yon_system_systemd_restart(GtkWidget *self, main_window *widgets){ if (self){}; - GtkTreeIter iter; - GtkTreeModel *model = GTK_TREE_MODEL(widgets->liststore2); - if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->MainTree)),&model,&iter)){ - gboolean status = 0; - char *name; - gtk_tree_model_get(model,&iter,0,&status,5,&name,-1); - char *parsed_name = yon_char_divide(name, yon_char_find_last(name,'.')); - free(name); - name=parsed_name; - gtk_list_store_set(GTK_LIST_STORE(widgets->liststore2),&iter,0,!status,-1); - char *config_sting = yon_config_get_by_key("SERVICES_ENABLE"); - int size; - config_str parsed = yon_char_parse(config_sting,&size,","); - int place = yon_char_parsed_check_exist(parsed,size,name); - if (status==0){ - if (place ==-1){ - if (!yon_config_append("SERVICES_ENABLE",name,",")){ - yon_config_register("SERVICES_ENABLE",SERVICES_ENABLE_get_command,name); - } + if (widgets){ + if (getuid()!=0&>k_notebook_get_current_page(GTK_NOTEBOOK(widgets->MainNotebook))==0){ + if (system(reload_systemd_root_command)){ + yon_ubl_status_box_render("TEXT_ERROR",BACKGROUND_IMAGE_FAIL_TYPE); } } else { - if (place !=-1){ - parsed = yon_char_parsed_rip(parsed,&size,place); - if (parsed) - yon_config_set("SERVICES_ENABLE",yon_char_parsed_to_string(parsed,size,",")); - else yon_config_remove_by_key("SERVICES_ENABLE"); + if (system(reload_systemd_user_command)){ + yon_ubl_status_box_render("TEXT_ERROR",BACKGROUND_IMAGE_FAIL_TYPE); } } - yon_char_parsed_free(parsed,size); } } -void on_config_autostop_clicked(GtkWidget *self, main_window *widgets){ - if (self){}; - GtkTreeIter iter; - GtkTreeModel *model = GTK_TREE_MODEL(widgets->liststore2); - if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->MainTree)),&model,&iter)){ - gboolean status = 0; - char *name; - gtk_tree_model_get(model,&iter,1,&status,5,&name,-1); - char *parsed_name = yon_char_divide(name, yon_char_find_last(name,'.')); - free(name); - name=parsed_name; - gtk_list_store_set(GTK_LIST_STORE(widgets->liststore2),&iter,1,!status,-1); - char *config_sting = yon_config_get_by_key("SERVICES_DISABLE"); - int size; - config_str parsed = yon_char_parse(config_sting,&size,","); - int place = yon_char_parsed_check_exist(parsed,size,name); - if (status==0){ - if (place ==-1){ - if (!yon_config_append("SERVICES_DISABLE",name,",")){ - yon_config_register("SERVICES_DISABLE",SERVICES_DISABLE_get_command,name); - } - } - } else { - if (place !=-1){ - parsed = yon_char_parsed_rip(parsed,&size,place); - if (parsed) - yon_config_set("SERVICES_DISABLE",yon_char_parsed_to_string(parsed,size,",")); - else yon_config_remove_by_key("SERVICES_DISABLE"); - } - } - yon_char_parsed_free(parsed,size); +typedef void (*data_function)(void*,void*); + +void on_system_update_hz_clicked(GtkWidget *self, main_window *widgets){ + if (self){} + if (widgets){ + dialog_confirmation_data *data = malloc(sizeof(dialog_confirmation_data)); + data->action_text = "Are you sure?"; + data->data = widgets; + data->function = (data_function)yon_system_systemd_restart; + yon_confirmation_dialog_call(self,data); } +} + +void on_system_update_clicked(GtkWidget *self, main_window *widgets){ + if (self){} + if (widgets){ + // log_window *window = yon_log_window_new(); + + // gtk_widget_show(window->Window); + } } -void on_config_block_clicked(GtkWidget *self, main_window *widgets){ - if (self){}; - GtkTreeIter iter; - GtkTreeModel *model = GTK_TREE_MODEL(widgets->liststore2); - if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->MainTree)),&model,&iter)){ - gboolean status = 0; - char *name; - gtk_tree_model_get(model,&iter,2,&status,5,&name,-1); - char *parsed_name = yon_char_divide(name, yon_char_find_last(name,'.')); - free(name); - name=parsed_name; - gtk_list_store_set(GTK_LIST_STORE(widgets->liststore2),&iter,2,!status,-1); - char *config_sting = yon_config_get_by_key("SERVICES_MASK"); - int size; - config_str parsed = yon_char_parse(config_sting,&size,","); - int place = yon_char_parsed_check_exist(parsed,size,name); - if (status==0){ - if (place ==-1){ - if (!yon_config_append("SERVICES_MASK",name,",")){ - yon_config_register("SERVICES_MASK",SERVICES_MASK_get_command,name); - } - } - } else { - if (place !=-1){ - parsed = yon_char_parsed_rip(parsed,&size,place); - if (parsed) - yon_config_set("SERVICES_MASK",yon_char_parsed_to_string(parsed,size,",")); - else yon_config_remove_by_key("SERVICES_MASK"); - } - } - yon_char_parsed_free(parsed,size); - } +void on_system_info_clicked(GtkWidget *self, main_window *widgets){ + if (self){} + if (widgets){ + log_window *window = yon_log_window_new(); + + gtk_widget_show(window->Window); + } } -void on_system_autostart_clicked(GtkWidget *self, main_window *widgets){ - if (self){}; - GtkTreeIter iter; - GtkTreeModel *model = GTK_TREE_MODEL(widgets->liststore2); - if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->MainTree)),&model,&iter)){ - gboolean status = 0; - char *service_name; - gtk_tree_model_get(model,&iter,3,&status,5,&service_name,-1); - gtk_list_store_set(GTK_LIST_STORE(widgets->liststore2),&iter,3,!status,-1); - yon_launch((!status)==1 ? service_enable_command(service_name) : \ - service_disable_command(service_name)); - } +void on_system_log_clicked(GtkWidget *self, main_window *widgets){ + if (self){} + if (widgets){ + log_window *window = yon_log_window_new(); + + gtk_widget_show(window->Window); + } } -void on_system_kill_confirmed(GtkWidget *self,char *service_name){ - if (self){}; - char *command = service_kill_command(service_name); - yon_launch(command); +void on_system_edit_clicked(GtkWidget *self, main_window *widgets){ + if (self){} + if (widgets){ + log_window *window = yon_log_window_new(); + + gtk_widget_show(window->Window); + } + } -void on_system_launch_clicked(GtkWidget *self, main_window *widgets){ - if (self){}; - GtkTreeIter iter; - GtkTreeModel *model = GTK_TREE_MODEL(widgets->liststore2); - if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->MainTree)),&model,&iter)){ - gboolean status = 0; - char *service_name; - gtk_tree_model_get(model,&iter,4,&status,5,&service_name,-1); - yon_launch((!status)==1 ? service_start_command(service_name) : \ - service_stop_command(service_name)); - int size; - config_str result = yon_config_load(service_check_active_command(service_name),&size); - yon_char_remove_last_symbol(result[0],'\n'); - if (size>0){ - if (!strcmp(result[0],"active")){ - if (status){ - dialog_confirmation_data data; - data.action_text=STOP_SERVICE_WARMING_LABEL(service_name); - data.function=(void*)(void*)on_system_kill_confirmed; - data.data=service_name; - int answer = yon_confirmation_dialog_call(self,&data); - if (answer) - gtk_list_store_set(GTK_LIST_STORE(widgets->liststore2),&iter,4,0,-1); - } else { - gtk_list_store_set(GTK_LIST_STORE(widgets->liststore2),&iter,4,1,-1); - } - } else { - gtk_list_store_set(GTK_LIST_STORE(widgets->liststore2),&iter,4,0,-1); - } - } - yon_char_parsed_free(result,size); - } +void on_system_status_clicked(GtkWidget *self, main_window *widgets){ + if (self){} + if (widgets){ + log_window *window = yon_log_window_new(); + + gtk_widget_show(window->Window); + } } -gboolean yon_service_source_check(GtkTreeModel *model, GtkTreeIter *iter,void *data){ - if (data){}; - int type; - gtk_tree_model_get(model,iter,8,&type,-1); - return 1; +void on_system_filter_changed(GtkWidget *self, main_window *widgets){ + if (self){} + if (widgets){ + log_window *window = yon_log_window_new(); + + gtk_widget_show(window->Window); + } + } +void on_system_search(GtkWidget *self, main_window *widgets){ + if (self){} + if (widgets){ + log_window *window = yon_log_window_new(); + + gtk_widget_show(window->Window); + } -gboolean on_service_filter(GtkTreeModel *model, GtkTreeIter *iter,void *data){ - if (data){}; - int type; - gtk_tree_model_get(model,iter,7,&type,-1); - if (type==1) - return 1; - return 0; } -gboolean on_socket_filter(GtkTreeModel *model, GtkTreeIter *iter,void *data){ - if (data){}; - int type; - gtk_tree_model_get(model,iter,7,&type,-1); - if (type==2) - return 1; - return 0; +void on_system_inactive_toggled(GtkWidget *self, main_window *widgets){ + if (self){} + if (widgets){ + log_window *window = yon_log_window_new(); + + gtk_widget_show(window->Window); + } + } -gboolean on_autostart_filter(GtkTreeModel *model, GtkTreeIter *iter,void *data){ - if (data){}; - gboolean type; - gtk_tree_model_get(model,iter,0,&type,-1); - if (type) - return 1; - return 0; +void on_system_unloaded_toggled(GtkWidget *self, main_window *widgets){ + if (self){} + if (widgets){ + log_window *window = yon_log_window_new(); + + gtk_widget_show(window->Window); + } + } -gboolean on_stopped_filter(GtkTreeModel *model, GtkTreeIter *iter,void *data){ - if (data){}; - gboolean type; - gtk_tree_model_get(model,iter,1,&type,-1); - if (type) - return 1; - return 0; +void on_user_update_hz_clicked(GtkWidget *self, main_window *widgets){ + if (self){} + if (widgets){ + // log_window *window = yon_log_window_new(); + + // gtk_widget_show(window->Window); + } + } -gboolean on_blocked_filter(GtkTreeModel *model, GtkTreeIter *iter,void *data){ - if (data){}; - gboolean type; - gtk_tree_model_get(model,iter,2,&type,-1); - if (type) - return 1; - return 0; +void on_user_update_clicked(GtkWidget *self, main_window *widgets){ + if (self){} + if (widgets){ + log_window *window = yon_log_window_new(); + + gtk_widget_show(window->Window); + } + } -gboolean on_source_user_filter(GtkTreeModel *model, GtkTreeIter *iter,void *data){ - if (data){}; - gboolean type; - gtk_tree_model_get(model,iter,8,&type,-1); - if (type) - return 1; - return 0; +void on_user_info_clicked(GtkWidget *self, main_window *widgets){ + if (self){} + if (widgets){ + log_window *window = yon_log_window_new(); + gtk_widget_show(window->Window); + } + } -gboolean on_source_system_filter(GtkTreeModel *model, GtkTreeIter *iter,void *data){ - if (data){}; - gboolean type; - gtk_tree_model_get(model,iter,8,&type,-1); - if (!type) - return 1; - return 0; +void on_user_log_clicked(GtkWidget *self, main_window *widgets){ + if (self){} + if (widgets){ + log_window *window = yon_log_window_new(); + gtk_widget_show(window->Window); + } + } -void on_type_changed(GtkWidget *self, main_window *widgets){ - if (self){}; - switch (gtk_combo_box_get_active(GTK_COMBO_BOX(widgets->ServiceTypeCombo))){ - case 0: - gtk_tree_view_set_model(GTK_TREE_VIEW(widgets->MainTree),GTK_TREE_MODEL(widgets->liststore2)); - break; - case 1: - gtk_tree_view_set_model(GTK_TREE_VIEW(widgets->MainTree),GTK_TREE_MODEL(main_config.ServiceFilter)); - gtk_tree_model_filter_refilter(GTK_TREE_MODEL_FILTER(main_config.ServiceFilter)); - break; - case 2: - gtk_tree_view_set_model(GTK_TREE_VIEW(widgets->MainTree),GTK_TREE_MODEL(main_config.SocketFilter)); - gtk_tree_model_filter_refilter(GTK_TREE_MODEL_FILTER(main_config.SocketFilter)); - break; - case 3: - gtk_tree_view_set_model(GTK_TREE_VIEW(widgets->MainTree),GTK_TREE_MODEL(main_config.AutolaunchFilter)); - gtk_tree_model_filter_refilter(GTK_TREE_MODEL_FILTER(main_config.AutolaunchFilter)); - break; - case 4: - gtk_tree_view_set_model(GTK_TREE_VIEW(widgets->MainTree),GTK_TREE_MODEL(main_config.StoppedFilter)); - gtk_tree_model_filter_refilter(GTK_TREE_MODEL_FILTER(main_config.StoppedFilter)); - break; - case 5: - gtk_tree_view_set_model(GTK_TREE_VIEW(widgets->MainTree),GTK_TREE_MODEL(main_config.BlockedFilter)); - gtk_tree_model_filter_refilter(GTK_TREE_MODEL_FILTER(main_config.BlockedFilter)); - break; - } - if (main_config.SourceFilter){ - g_object_unref(main_config.SourceFilter); - main_config.SourceFilter=NULL; - } - main_config.SourceFilter = gtk_tree_model_filter_new(gtk_tree_view_get_model(GTK_TREE_VIEW(widgets->MainTree)),NULL); - int active = gtk_combo_box_get_active(GTK_COMBO_BOX(widgets->ServiceSourceCombo)); - if (active==1){ - gtk_tree_model_filter_set_visible_func(GTK_TREE_MODEL_FILTER(main_config.SourceFilter),(GtkTreeModelFilterVisibleFunc)on_source_system_filter,NULL,NULL); - - gtk_tree_view_set_model(GTK_TREE_VIEW(widgets->MainTree),main_config.SourceFilter); - } else if (active==2){ - gtk_tree_model_filter_set_visible_func(GTK_TREE_MODEL_FILTER(main_config.SourceFilter),(GtkTreeModelFilterVisibleFunc)on_source_user_filter,NULL,NULL); - gtk_tree_view_set_model(GTK_TREE_VIEW(widgets->MainTree),main_config.SourceFilter); - } - gtk_tree_model_filter_refilter(GTK_TREE_MODEL_FILTER(main_config.SourceFilter)); - gtk_tree_view_set_search_column(GTK_TREE_VIEW(widgets->MainTree),5); +void on_user_edit_clicked(GtkWidget *self, main_window *widgets){ + if (self){} + if (widgets){ + log_window *window = yon_log_window_new(); + + gtk_widget_show(window->Window); + } + } -void on_service_update(GtkWidget *self, terminal_window* window){ - if (self){}; - yon_terminal_integrated_start(window->SystemTerminal,service_info_command(window->target),NULL,NULL); - GdkRGBA rgba; - vte_terminal_get_color_background_for_draw(VTE_TERMINAL(window->SystemTerminal),&rgba); - vte_terminal_set_color_cursor(VTE_TERMINAL(window->SystemTerminal),&rgba); +void on_user_status_clicked(GtkWidget *self, main_window *widgets){ + if (self){} + if (widgets){ + log_window *window = yon_log_window_new(); + + gtk_widget_show(window->Window); + } + } -terminal_window *yon_terminal_window_new(){ - terminal_window *window = malloc(sizeof(terminal_window)); - GtkBuilder *builder = gtk_builder_new_from_resource(glade_path_terminal); - window->Window = yon_gtk_builder_get_widget(builder,"MonitorWindow"); - window->SystemTerminal = yon_gtk_builder_get_widget(builder,"SystemTerminal"); - window->UpdateButton = yon_gtk_builder_get_widget(builder,"UpdateButton"); - window->webHeaderNameLabel = yon_gtk_builder_get_widget(builder,"webHeaderNameLabel"); - window->target=NULL; - yon_window_config_custom_window_setup(GTK_WINDOW(window->Window),"terminal_window"); +void on_user_filter_changed(GtkWidget *self, main_window *widgets){ + if (self){} + if (widgets){ + log_window *window = yon_log_window_new(); + + gtk_widget_show(window->Window); + } + +} - g_signal_connect(G_OBJECT(window->UpdateButton),"clicked",G_CALLBACK(on_service_update),window); +void on_user_search(GtkWidget *self, main_window *widgets){ + if (self){} + if (widgets){ + log_window *window = yon_log_window_new(); + gtk_widget_show(window->Window); - return window; + } } -void on_info_clicked(GtkWidget *self, main_window *widgets){ - if (self){} - GtkTreeModel *model = GTK_TREE_MODEL(widgets->liststore2); - GtkTreeIter iter; - if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->MainTree)),&model,&iter)){ - char *service_name; - gtk_tree_model_get(model,&iter,5,&service_name,-1); - if (!yon_char_is_empty(service_name)){ - terminal_window *window = yon_terminal_window_new(); - window->target=service_name; - char *header = yon_char_unite(STATUS_LABEL," ",service_name,NULL); - gtk_label_set_text(GTK_LABEL(window->webHeaderNameLabel),header); - gtk_window_set_title(GTK_WINDOW(window->Window),header); - free(header); - on_service_update(NULL,window); - } - } +void on_user_inactive_toggled(GtkWidget *self, main_window *widgets){ + if (self){} + if (widgets){ + log_window *window = yon_log_window_new(); + + gtk_widget_show(window->Window); + } + } -log_window *yon_log_window_new(){ - log_window *window = malloc(sizeof(log_window)); - GtkBuilder *builder = gtk_builder_new_from_resource(glade_path_log); - window->Window = yon_gtk_builder_get_widget(builder,"MonitorWindow"); - window->SystemTerminal = yon_gtk_builder_get_widget(builder,"SystemTerminal"); - window->webHeaderNameLabel = yon_gtk_builder_get_widget(builder,"webHeaderNameLabel"); - window->target=NULL; - yon_window_config_custom_window_setup(GTK_WINDOW(window->Window),"terminal_window"); - return window; +void on_user_unloaded_toggled(GtkWidget *self, main_window *widgets){ + if (self){} + if (widgets){ + log_window *window = yon_log_window_new(); + + gtk_widget_show(window->Window); + } + } -void on_log_show(GtkWidget *self, main_window *widgets){ - if (self){}; - GtkTreeModel *model = GTK_TREE_MODEL(widgets->liststore2); - GtkTreeIter iter; - if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->MainTree)),&model,&iter)){ - log_window *window = yon_log_window_new(); - char *name; - gtk_tree_model_get(model,&iter,5,&name,-1); - yon_terminal_integrated_start(window->SystemTerminal,start_log_command(name),NULL,NULL); - GdkRGBA rgba; - rgba.alpha=1; - rgba.red=0.95; - rgba.green=0.95; - rgba.blue=0.95; - vte_terminal_set_color_cursor(VTE_TERMINAL(window->SystemTerminal),&rgba); - vte_terminal_set_color_background(VTE_TERMINAL(window->SystemTerminal),&rgba); - rgba.red=0; - rgba.green=0; - rgba.blue=0; - vte_terminal_set_color_foreground(VTE_TERMINAL(window->SystemTerminal),&rgba); - gtk_widget_show(window->Window); - } +void on_config_edit_clicked(GtkWidget *self, main_window *widgets){ + if (self){} + if (widgets){ + log_window *window = yon_log_window_new(); + gtk_widget_show(window->Window); + } + } -void *yon_unthreaded_config_load(void *widgets){ - if (main_config.load_mode==1){ - on_config_local_load(NULL,(main_window*)widgets); - } else if (main_config.load_mode==0){ - on_config_global_load(NULL,(main_window*)widgets); - } - return NULL; +void on_session_start_clicked(GtkWidget *self, main_window *widgets){ + if (self){} + if (widgets){ + log_window *window = yon_log_window_new(); + + gtk_widget_show(window->Window); + } + } -void on_update(GtkWidget *self,main_window *widgets){ - if (!main_config.update_thread_active){ - if (self){} - yon_ubl_status_box_render(LIST_LOAD_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE); - if (yon_unthreaded_config_load(widgets)){}; - } +void on_session_stop_clicked(GtkWidget *self, main_window *widgets){ + if (self){} + if (widgets){ + log_window *window = yon_log_window_new(); + + gtk_widget_show(window->Window); + } + } -void *update_delay(main_window *widgets){ - on_type_changed(NULL,widgets); - main_config.update_thread_active=0; - textdomain(template_ui_LocaleName); - if (main_config.load_mode){ - yon_ubl_status_box_render(LOCAL_LOAD_SUCCESS_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE); - } else { - yon_ubl_status_box_render(GLOBAL_LOAD_SUCCESS_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE); - } - textdomain(LocaleName); - return NULL; +void on_session_lock_clicked(GtkWidget *self, main_window *widgets){ + if (self){} + if (widgets){ + log_window *window = yon_log_window_new(); + + gtk_widget_show(window->Window); + + } + } gboolean yon_interface_update(main_window *widgets){ - gtk_widget_set_sensitive(widgets->UpdateButton,0); - int size; - int size_users; - GtkTreeIter iter; - gtk_list_store_clear(widgets->liststore2); - gtk_tree_view_set_model(GTK_TREE_VIEW(widgets->MainTree),NULL); - config_str services = yon_config_load(load_services_command,&size); - char *command = load_user_services_command; - config_str users_services = yon_config_load(command,&size_users); - for (int i=0;iliststore2,&iter); - int type; - char *description = parsed[parsed_size-1]; - if (strstr(parsed[0],".socket")) - type = 2; - else type = 1; - int user_service=0; - gtk_list_store_set(widgets->liststore2,&iter,5,parsed[0],6,description,7,type,8,user_service,-1); - } - for (int i=0;iliststore2,&iter); - int type; - char *description = parsed[parsed_size-1]; - if (strstr(parsed[0],".socket")) - type = 2; - else type = 1; - int user_service=1; - gtk_list_store_set(widgets->liststore2,&iter,5,parsed[0],6,description,7,type,8,user_service,-1); - } + if (widgets){ - int launched_size; - config_str launched_parsed = yon_config_load(load_launched_command,&launched_size); - int enabled_size; - config_str enabled_parsed = yon_config_load(load_enabled_command,&enabled_size); - yon_char_parsed_divide_search_full(launched_parsed,launched_size,"\n",-1); - yon_char_parsed_divide_search_full(enabled_parsed,enabled_size,"\n",-1); - char *launched = yon_char_parsed_to_string(launched_parsed,launched_size,","); - char *enabled = yon_char_parsed_to_string(enabled_parsed,enabled_size,","); - char *start = yon_config_get_by_key("SERVICES_ENABLE"); - char *stop = yon_config_get_by_key("SERVICES_DISABLE"); - char *block = yon_config_get_by_key("SERVICES_MASK"); - if (!yon_char_is_empty(launched)&&launched[strlen(launched)-1]=='\n') launched[strlen(launched)-1]='\0'; - if (!yon_char_is_empty(enabled)&&enabled[strlen(enabled)-1]=='\n') enabled[strlen(enabled)-1]='\0'; - if (!yon_char_is_empty(start)&&start[strlen(start)-1]=='\n') start[strlen(start)-1]='\0'; - if (!yon_char_is_empty(stop)&&stop[strlen(stop)-1]=='\n') stop[strlen(stop)-1]='\0'; - if (!yon_char_is_empty(block)&&block[strlen(block)-1]=='\n') block[strlen(block)-1]='\0'; - int valid = gtk_tree_model_get_iter_first(GTK_TREE_MODEL(widgets->liststore2),&iter); - for (;valid;valid = gtk_tree_model_iter_next(GTK_TREE_MODEL(widgets->liststore2),&iter)){ - char *name; - gtk_tree_model_get(GTK_TREE_MODEL(widgets->liststore2),&iter,5,&name,-1); - char *name_copy = yon_char_new(name); - char *name_parsed = yon_char_divide(name_copy,yon_char_find_last(name_copy,'.')); - if (!yon_char_is_empty(start)){ - if (!strcmp(start,name)) - gtk_list_store_set(widgets->liststore2,&iter,0,1,-1); - else if (strstr(start,name_parsed)&&strcmp(name_copy,"socket")) - gtk_list_store_set(widgets->liststore2,&iter,0,1,-1); - else - gtk_list_store_set(widgets->liststore2,&iter,0,0,-1); - } - if (!yon_char_is_empty(stop)){ - if (strstr(stop,name)) - gtk_list_store_set(widgets->liststore2,&iter,1,1,-1); - else if (strstr(stop,name_parsed)&&strcmp(name_copy,"socket")) - gtk_list_store_set(widgets->liststore2,&iter,1,1,-1); - else - gtk_list_store_set(widgets->liststore2,&iter,1,0,-1); - } - if (!yon_char_is_empty(block)){ - if (strstr(block,name)) - gtk_list_store_set(widgets->liststore2,&iter,2,1,-1); - else if (strstr(block,name_parsed)&&strcmp(name_copy,"socket")) - gtk_list_store_set(widgets->liststore2,&iter,2,1,-1); - else - gtk_list_store_set(widgets->liststore2,&iter,2,0,-1); - } - if (!yon_char_is_empty(launched)){ - if (strstr(launched,name)) - gtk_list_store_set(widgets->liststore2,&iter,4,1,-1); - else if (strstr(launched,name_parsed)&&strcmp(name_copy,"socket")) - gtk_list_store_set(widgets->liststore2,&iter,4,1,-1); - else - gtk_list_store_set(widgets->liststore2,&iter,4,0,-1); - } - if (!yon_char_is_empty(enabled)){ - if (strstr(enabled,name)) - gtk_list_store_set(widgets->liststore2,&iter,3,1,-1); - else if (strstr(enabled,name_parsed)&&strcmp(name_copy,"socket")) - gtk_list_store_set(widgets->liststore2,&iter,3,1,-1); - else - gtk_list_store_set(widgets->liststore2,&iter,3,0,-1); - } - free(name); - free(name_parsed); - while(gtk_events_pending()) gtk_main_iteration(); } - update_delay(widgets); - gtk_widget_set_sensitive(widgets->UpdateButton,1); return 0; } void on_column_resize(GtkTreeViewColumn *self,GParamSpec *pspec,main_window *widgets){ if (self||pspec){} - GList *list = gtk_tree_view_get_columns(GTK_TREE_VIEW(widgets->MainTree)); + GList *list = gtk_tree_view_get_columns(GTK_TREE_VIEW(widgets->SystemUnitsTree)); int width_configuration = gtk_tree_view_column_get_width(g_list_nth_data(list,0))+gtk_tree_view_column_get_width(g_list_nth_data(list,1))+gtk_tree_view_column_get_width(g_list_nth_data(list,2)); - int width_system = gtk_tree_view_column_get_width(g_list_nth_data(list,3))+gtk_tree_view_column_get_width(g_list_nth_data(list,4)); + int width_system = gtk_tree_view_column_get_width(g_list_nth_data(list,3))+gtk_tree_view_column_get_width(g_list_nth_data(list,4))+gtk_tree_view_column_get_width(g_list_nth_data(list,5)); g_list_free(list); - gtk_tree_view_column_set_fixed_width(gtk_tree_view_get_column(GTK_TREE_VIEW(widgets->MainUpperTree),0),width_configuration); - gtk_tree_view_column_set_fixed_width(gtk_tree_view_get_column(GTK_TREE_VIEW(widgets->MainUpperTree),1),width_system); -} - -GtkWidget *yon_menu_separator_create() { - GtkWidget *menu_item = gtk_separator_menu_item_new(); - - gtk_style_context_add_class(gtk_widget_get_style_context(menu_item),"sepat"); - gtk_widget_show(menu_item); - gtk_widget_set_sensitive(menu_item,0); - return menu_item; -} - -GtkWidget *yon_menu_button_create(char *icon_name, char *text) { - GtkWidget *menu_item = gtk_menu_item_new(); - GtkWidget *box = gtk_box_new(GTK_ORIENTATION_HORIZONTAL,0); - GtkWidget *icon; - if(icon_name){ - icon = gtk_image_new_from_icon_name(icon_name,GTK_ICON_SIZE_BUTTON); - gtk_box_pack_start(GTK_BOX(box),icon,0,0,5); - } - GtkWidget *label = gtk_label_new(text); - gtk_box_pack_start(GTK_BOX(box),label,0,0,5); - gtk_container_add(GTK_CONTAINER(menu_item),box); - gtk_widget_show_all(menu_item); - return menu_item; -} + gtk_tree_view_column_set_fixed_width(gtk_tree_view_get_column(GTK_TREE_VIEW(widgets->SystemUpperTree),0),width_configuration); + gtk_tree_view_column_set_fixed_width(gtk_tree_view_get_column(GTK_TREE_VIEW(widgets->SystemUpperTree),1),width_system); -gboolean on_context_menu_open(GtkWidget *self,GdkEventButton *event, main_window *widgets){ - if (self){}; - if (event->button==3){ - main_config.rmb_clicked=1; - menu_obj *menu_object = g_malloc0(sizeof(menu_obj)); - GtkWidget *menu = gtk_menu_new(); - gtk_menu_set_reserve_toggle_size(GTK_MENU(menu),0); - GtkWidget *menu_item_configuration_in_config = yon_menu_button_create(NULL,CONFIG_CONFIGURATION_LABEL); - gtk_widget_set_sensitive(menu_item_configuration_in_config,0); - GtkWidget *menu_item_autostart_config = yon_menu_button_create("media-playback-start-symbolic",AUTOSTART_LABEL); - GtkWidget *menu_item_autostop = yon_menu_button_create("media-playback-stop-symbolic",AUTOSTOP_LABEL); - GtkWidget *menu_item_block = yon_menu_button_create("process-stop-symbolic",BLOCK_LABEL); - GtkWidget *menu_item_separator1 = yon_menu_separator_create(); - GtkWidget *menu_item_configuration_in_system = yon_menu_button_create(NULL,SYSTEM_CONFIGURATION_LABEL); - gtk_widget_set_sensitive(menu_item_configuration_in_system,0); - GtkWidget *menu_item_autostart_system = yon_menu_button_create("media-playback-start-symbolic",AUTOSTART_LABEL); - GtkWidget *menu_item_launched = yon_menu_button_create("emoji-flags-symbolic",SYSTEM_LAUNCH_TOGGLE_LABEL); - GtkWidget *menu_item_separator2 = yon_menu_separator_create(); - GtkWidget *menu_item_reload = yon_menu_button_create("emblem-synchronizing-symbolic",SERVICE_RELOAD_LABEL); - GtkWidget *menu_item_status = yon_menu_button_create("dialog-information-symbolic",STATUS_LABEL); - menu_object->Menu = menu; - menu_object->MenuConfigAutostart = menu_item_autostart_config; - menu_object->MenuConfigAutostop = menu_item_autostop; - menu_object->MenuConfigBlock = menu_item_block; - menu_object->MenuSystemAutostart = menu_item_autostart_system; - menu_object->MenuSystemLaunched = menu_item_launched; - menu_object->MenuReloadConfig = menu_item_reload; - menu_object->MenuStatus = menu_item_status; - g_signal_connect(G_OBJECT(menu_item_autostart_config),"activate",G_CALLBACK(on_config_autostart_clicked),widgets); - g_signal_connect(G_OBJECT(menu_item_autostop),"activate",G_CALLBACK(on_config_autostop_clicked),widgets); - g_signal_connect(G_OBJECT(menu_item_block),"activate",G_CALLBACK(on_config_block_clicked),widgets); - g_signal_connect(G_OBJECT(menu_item_autostart_system),"activate",G_CALLBACK(on_system_autostart_clicked),widgets); - g_signal_connect(G_OBJECT(menu_item_launched),"activate",G_CALLBACK(on_system_launch_clicked),widgets); - g_signal_connect(G_OBJECT(menu_item_reload),"activate",G_CALLBACK(on_update),widgets); - g_signal_connect(G_OBJECT(menu_item_status),"activate",G_CALLBACK(on_info_clicked),widgets); - gtk_menu_shell_append(GTK_MENU_SHELL(menu),menu_item_configuration_in_config); - gtk_menu_shell_append(GTK_MENU_SHELL(menu),menu_item_autostart_config); - gtk_menu_shell_append(GTK_MENU_SHELL(menu),menu_item_autostop); - gtk_menu_shell_append(GTK_MENU_SHELL(menu),menu_item_block); - gtk_menu_shell_append(GTK_MENU_SHELL(menu),menu_item_separator1); - gtk_menu_shell_append(GTK_MENU_SHELL(menu),menu_item_configuration_in_system); - gtk_menu_shell_append(GTK_MENU_SHELL(menu),menu_item_autostart_system); - gtk_menu_shell_append(GTK_MENU_SHELL(menu),menu_item_launched); - gtk_menu_shell_append(GTK_MENU_SHELL(menu),menu_item_separator2); - gtk_menu_shell_append(GTK_MENU_SHELL(menu),menu_item_reload); - gtk_menu_shell_append(GTK_MENU_SHELL(menu),menu_item_status); - widgets->RMBMenu=menu; - widgets->menu=menu_object; - gtk_widget_show_all(widgets->RMBMenu); - gtk_menu_popup_at_pointer(GTK_MENU(menu),NULL); - return 0; - } - return 0; + list = gtk_tree_view_get_columns(GTK_TREE_VIEW(widgets->UserUnitsTree)); + width_configuration = gtk_tree_view_column_get_width(g_list_nth_data(list,0))+gtk_tree_view_column_get_width(g_list_nth_data(list,1))+gtk_tree_view_column_get_width(g_list_nth_data(list,2)); + width_system = gtk_tree_view_column_get_width(g_list_nth_data(list,3))+gtk_tree_view_column_get_width(g_list_nth_data(list,4))+gtk_tree_view_column_get_width(g_list_nth_data(list,5)); + g_list_free(list); + gtk_tree_view_column_set_fixed_width(gtk_tree_view_get_column(GTK_TREE_VIEW(widgets->UsersUpperTree),0),width_configuration); + gtk_tree_view_column_set_fixed_width(gtk_tree_view_get_column(GTK_TREE_VIEW(widgets->UsersUpperTree),1),width_system); } /**config_init() @@ -716,43 +439,18 @@ void config_init(){ main_config.lock_save_local=0; main_config.load_mode=1; main_config.update_thread_active=0; -} - -void on_activate(GtkTreeView *self, main_window *widgets){ - if (self){}; - GtkTreeIter iter; - GtkTreeModel *model = gtk_tree_view_get_model(GTK_TREE_VIEW(widgets->MainTree)); - char *name=NULL; - char *description=NULL; - if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->MainTree)),&model,&iter)){ - gtk_tree_model_get(model,&iter,5,&name,6,&description,-1); - gtk_label_set_text(GTK_LABEL(widgets->ServiceLabel),name); - gtk_label_set_text(GTK_LABEL(widgets->DescriptionLabel),description); - menu_obj *menu=widgets->menu; - if (main_config.rmb_clicked){ - gtk_menu_popup_at_pointer(GTK_MENU(menu->Menu),NULL); - } - } - main_config.rmb_clicked=0; } void on_tree_selection_changed(GtkWidget *self, main_window *widgets){ if (self){}; - GtkTreeModel *model = GTK_TREE_MODEL(widgets->liststore2); + GtkTreeModel *model = GTK_TREE_MODEL(widgets->SystemList); GtkTreeIter iter; - int switch_status=0; - if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->MainTree)),&model,&iter)){ - switch_status=1; + // int switch_status=0; + if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->SystemUnitsTree)),&model,&iter)){ + // switch_status=1; } if (getuid()==0){ - gtk_widget_set_sensitive(widgets->ConfigAutostartButton,switch_status); - gtk_widget_set_sensitive(widgets->ConfigAutostopButton,switch_status); - gtk_widget_set_sensitive(widgets->ConfigBlockButton,switch_status); } - gtk_widget_set_sensitive(widgets->SystemAutostartButton,switch_status); - gtk_widget_set_sensitive(widgets->SystemLaunchButton,switch_status); - gtk_widget_set_sensitive(widgets->InfoButton,switch_status); - gtk_widget_set_sensitive(widgets->LogButton,switch_status); } /**yon_main_window_complete(main_window *widgets) @@ -766,44 +464,180 @@ void yon_main_window_complete(main_window *widgets){ GtkBuilder *builder = gtk_builder_new_from_resource(glade_path); gtk_box_pack_start(GTK_BOX(widgets->InterfaceBox),yon_gtk_builder_get_widget(builder,"BoxMain"),1,1,0); // Custom widgets configuration - - widgets->liststore1=GTK_LIST_STORE(gtk_builder_get_object(builder,"liststore1")); - widgets->liststore2=GTK_LIST_STORE(gtk_builder_get_object(builder,"liststore2")); + { + widgets->UserList=GTK_LIST_STORE(gtk_builder_get_object(builder,"UserList")); + widgets->TimersList =GTK_LIST_STORE(gtk_builder_get_object(builder,"TimersList")); + widgets->SessionsList=GTK_LIST_STORE(gtk_builder_get_object(builder,"SessionsList")); + widgets->ConfigList=GTK_LIST_STORE(gtk_builder_get_object(builder,"ConfigList")); + widgets->SystemList=GTK_LIST_STORE(gtk_builder_get_object(builder,"SystemList")); widgets->BoxMain=yon_gtk_builder_get_widget(builder,"BoxMain"); - widgets->ServiceSourceCombo=yon_gtk_builder_get_widget(builder,"ServiceSourceCombo"); - widgets->ServiceTypeCombo=yon_gtk_builder_get_widget(builder,"ServiceTypeCombo"); - widgets->SearchEntry=yon_gtk_builder_get_widget(builder,"SearchEntry"); - widgets->UpdateButton=yon_gtk_builder_get_widget(builder,"UpdateButton"); - widgets->ConfigAutostartButton=yon_gtk_builder_get_widget(builder,"ConfigAutostartButton"); - widgets->ConfigAutostopButton=yon_gtk_builder_get_widget(builder,"ConfigAutostopButton"); - widgets->ConfigBlockButton=yon_gtk_builder_get_widget(builder,"ConfigBlockButton"); - widgets->SystemAutostartButton=yon_gtk_builder_get_widget(builder,"SystemAutostartButton"); - widgets->SystemLaunchButton=yon_gtk_builder_get_widget(builder,"SystemLaunchButton"); - widgets->InfoButton=yon_gtk_builder_get_widget(builder,"InfoButton"); - widgets->LogButton=yon_gtk_builder_get_widget(builder,"LogButton"); - widgets->MainUpperTree=yon_gtk_builder_get_widget(builder,"MainUpperTree"); - widgets->MainTree=yon_gtk_builder_get_widget(builder,"MainTree"); - widgets->DescriptionLabel=yon_gtk_builder_get_widget(builder,"DescriptionLabel"); - widgets->ServiceLabel=yon_gtk_builder_get_widget(builder,"ServiceLabel"); - GList *list = gtk_tree_view_get_columns(GTK_TREE_VIEW(widgets->MainTree)); - yon_gtk_tree_view_minimal_fixed_size_set_full(GTK_TREE_VIEW(widgets->MainTree)); - g_signal_connect(G_OBJECT(widgets->MainTree),"button-press-event",G_CALLBACK(on_context_menu_open),widgets); - g_signal_connect(G_OBJECT(widgets->ConfigAutostartButton),"clicked",G_CALLBACK(on_config_autostart_clicked),widgets); - g_signal_connect(G_OBJECT(widgets->ConfigAutostopButton),"clicked",G_CALLBACK(on_config_autostop_clicked),widgets); - g_signal_connect(G_OBJECT(widgets->ConfigBlockButton),"clicked",G_CALLBACK(on_config_block_clicked),widgets); - g_signal_connect(G_OBJECT(widgets->SystemAutostartButton),"clicked",G_CALLBACK(on_system_autostart_clicked),widgets); - g_signal_connect(G_OBJECT(widgets->SystemLaunchButton),"clicked",G_CALLBACK(on_system_launch_clicked),widgets); - g_signal_connect(G_OBJECT(widgets->UpdateButton),"clicked",G_CALLBACK(on_update),widgets); - g_signal_connect(G_OBJECT(widgets->InfoButton),"clicked",G_CALLBACK(on_info_clicked),widgets); - g_signal_connect(G_OBJECT(widgets->LogButton),"clicked",G_CALLBACK(on_log_show),widgets); + widgets->SystemSearchEntry=yon_gtk_builder_get_widget(builder,"SystemSearchEntry"); + widgets->SystemUpperTree=yon_gtk_builder_get_widget(builder,"SystemUpperTree"); + widgets->SystemUnitsTree=yon_gtk_builder_get_widget(builder,"SystemUnitsTree"); + widgets->MainNotebook=yon_gtk_builder_get_widget(builder,"MainNotebook"); + + widgets->SystemSearchEntry=yon_gtk_builder_get_widget(builder,"SystemSearchEntry"); + widgets->SystemFiltersCombo=yon_gtk_builder_get_widget(builder,"SystemFiltersCombo"); + widgets->SystemInactiveShowCheck=yon_gtk_builder_get_widget(builder,"SystemInactiveShowCheck"); + widgets->SystemUnloadedShowCheck=yon_gtk_builder_get_widget(builder,"SystemUnloadedShowCheck"); + widgets->SystemUpperTree=yon_gtk_builder_get_widget(builder,"SystemUpperTree"); + widgets->SystemUnitsTree=yon_gtk_builder_get_widget(builder,"SystemUnitsTree"); + widgets->SystemPrevButton=yon_gtk_builder_get_widget(builder,"SystemPrevButton"); + widgets->SystemUpdateButton=yon_gtk_builder_get_widget(builder,"SystemUpdateButton"); + widgets->SystemInfoButton=yon_gtk_builder_get_widget(builder,"SystemInfoButton"); + widgets->SystemLogButton=yon_gtk_builder_get_widget(builder,"SystemLogButton"); + widgets->SystemEditButton=yon_gtk_builder_get_widget(builder,"SystemEditButton"); + widgets->SystemPropertiesButton=yon_gtk_builder_get_widget(builder,"SystemPropertiesButton"); + widgets->SystemStatusButton=yon_gtk_builder_get_widget(builder,"SystemStatusButton"); + widgets->SystemMenu = yon_rmb_menu_setup(widgets->SystemUnitsTree,NULL,NULL, + CONFIGURE_CONFIGURATION_LABEL,NULL,NULL,NULL, + AUTOSTART_LABEL,play_icon_path,on_config_autostart_clicked,widgets, + AUTOSTOP_LABEL,stop_icon_path,on_config_autostop_clicked,widgets, + BLOCK_LABEL,block_icon_path,on_config_block_clicked,widgets, + SYSTEM_CONFIGURATION_LABEL,NULL,NULL,NULL, + AUTOSTART_LABEL,start_icon_path,on_system_autostart_clicked,widgets, + LAUNCHED_LABEL,launch_icon_path,on_system_launch_clicked,widgets, + RESTART_LABEL,update_icon_path,on_system_restart_clicked,widgets, + STATUS_LABEL,status_icon_path,on_status_show,widgets, + SHOW_LOG_LABEL,log_icon_path,on_log_show,widgets, + SHOW_SOURCE_LABEL,source_icon_path,on_source_show,widgets, + PROPERTIES_LABEL,properties_icon_path,on_properties_show,widgets, + NULL); + + widgets->UserSearchEntry=yon_gtk_builder_get_widget(builder,"UserSearchEntry"); + widgets->UserFiltersCombo=yon_gtk_builder_get_widget(builder,"UserFiltersCombo"); + widgets->UserInactiveShowCheck=yon_gtk_builder_get_widget(builder,"UserInactiveShowCheck"); + widgets->UserUnloadedShowCheck=yon_gtk_builder_get_widget(builder,"UserUnloadedShowCheck"); + widgets->UsersUpperTree=yon_gtk_builder_get_widget(builder,"UsersUpperTree"); + widgets->UserUnitsTree=yon_gtk_builder_get_widget(builder,"UserUnitsTree"); + widgets->UserPrevButton=yon_gtk_builder_get_widget(builder,"UserPrevButton"); + widgets->UserUpdateButton=yon_gtk_builder_get_widget(builder,"UserUpdateButton"); + widgets->UserInfoButton=yon_gtk_builder_get_widget(builder,"UserInfoButton"); + widgets->UserLogButton=yon_gtk_builder_get_widget(builder,"UserLogButton"); + widgets->UserEditButton=yon_gtk_builder_get_widget(builder,"UserEditButton"); + widgets->UserStatusButton=yon_gtk_builder_get_widget(builder,"UserStatusButton"); + widgets->UserServiceLabel=yon_gtk_builder_get_widget(builder,"UserServiceLabel"); + widgets->UserDescriptionLabel=yon_gtk_builder_get_widget(builder,"UserDescriptionLabel"); + widgets->UserMenu = yon_rmb_menu_setup(widgets->UserUnitsTree,NULL,NULL, + CONFIGURE_CONFIGURATION_LABEL,NULL,NULL,NULL, + AUTOSTART_LABEL,play_icon_path,on_config_autostart_clicked,widgets, + AUTOSTOP_LABEL,stop_icon_path,on_config_autostop_clicked,widgets, + BLOCK_LABEL,block_icon_path,on_config_block_clicked,widgets, + SYSTEM_CONFIGURATION_LABEL,NULL,NULL,NULL, + AUTOSTART_LABEL,start_icon_path,on_system_autostart_clicked,widgets, + LAUNCHED_LABEL,launch_icon_path,on_system_launch_clicked,widgets, + RESTART_LABEL,update_icon_path,on_system_restart_clicked,widgets, + STATUS_LABEL,status_icon_path,on_status_show,widgets, + SHOW_LOG_LABEL,log_icon_path,on_log_show,widgets, + SHOW_SOURCE_LABEL,source_icon_path,on_source_show,widgets, + PROPERTIES_LABEL,properties_icon_path,on_properties_show,widgets, + NULL); + + widgets->ConfigEditButton=yon_gtk_builder_get_widget(builder,"ConfigEditButton"); + widgets->ConfigMainTree=yon_gtk_builder_get_widget(builder,"ConfigMainTree"); + + widgets->SessionMainTree=yon_gtk_builder_get_widget(builder,"SessionMainTree"); + widgets->SessionStartButton=yon_gtk_builder_get_widget(builder,"SessionStartButton"); + widgets->SessionStopButton=yon_gtk_builder_get_widget(builder,"SessionStopButton"); + widgets->SessionBlockButton=yon_gtk_builder_get_widget(builder,"SessionBlockButton"); + widgets->SessionMenu = yon_rmb_menu_setup(widgets->SessionMainTree,NULL,NULL, + ACTIVATE_SESSION_LABEL,play_icon_path,on_session_activate,NULL, + END_SESSION_LABEL,stop_icon_path,on_session_end,NULL, + BLOCK_SESSION_LABEL,block_icon_path,on_session_block,NULL, + NULL); + + widgets->SystemServiceLabel=yon_gtk_builder_get_widget(builder,"SystemServiceLabel"); + widgets->SystemDescriptionLabel=yon_gtk_builder_get_widget(builder,"SystemDescriptionLabel"); + } + widgets->TimersMainTree=yon_gtk_builder_get_widget(builder,"TimersMainTree"); + GList *list = gtk_tree_view_get_columns(GTK_TREE_VIEW(widgets->SystemUnitsTree)); + yon_gtk_tree_view_minimal_fixed_size_set_full(GTK_TREE_VIEW(widgets->SystemUnitsTree)); + + g_signal_connect(G_OBJECT(widgets->SystemPrevButton),"clicked",G_CALLBACK(on_system_update_hz_clicked),widgets); + g_signal_connect(G_OBJECT(widgets->SystemUpdateButton),"clicked",G_CALLBACK(on_system_update_clicked),widgets); + g_signal_connect(G_OBJECT(widgets->SystemInfoButton),"clicked",G_CALLBACK(on_system_info_clicked),widgets); + g_signal_connect(G_OBJECT(widgets->SystemLogButton),"clicked",G_CALLBACK(on_system_log_clicked),widgets); + g_signal_connect(G_OBJECT(widgets->SystemEditButton),"clicked",G_CALLBACK(on_system_edit_clicked),widgets); + g_signal_connect(G_OBJECT(widgets->SystemStatusButton),"clicked",G_CALLBACK(on_system_status_clicked),widgets); + g_signal_connect(G_OBJECT(widgets->SystemFiltersCombo),"changed",G_CALLBACK(on_system_filter_changed),widgets); + g_signal_connect(G_OBJECT(widgets->SystemSearchEntry),"changed",G_CALLBACK(on_system_search),widgets); + g_signal_connect(G_OBJECT(widgets->SystemInactiveShowCheck),"toggled",G_CALLBACK(on_system_inactive_toggled),widgets); + g_signal_connect(G_OBJECT(widgets->SystemUnloadedShowCheck),"toggled",G_CALLBACK(on_system_unloaded_toggled),widgets); + + g_signal_connect(G_OBJECT(widgets->UserPrevButton),"clicked",G_CALLBACK(on_user_update_hz_clicked),widgets); + g_signal_connect(G_OBJECT(widgets->UserUpdateButton),"clicked",G_CALLBACK(on_user_update_clicked),widgets); + g_signal_connect(G_OBJECT(widgets->UserInfoButton),"clicked",G_CALLBACK(on_user_info_clicked),widgets); + g_signal_connect(G_OBJECT(widgets->UserLogButton),"clicked",G_CALLBACK(on_user_log_clicked),widgets); + g_signal_connect(G_OBJECT(widgets->UserEditButton),"clicked",G_CALLBACK(on_user_edit_clicked),widgets); + g_signal_connect(G_OBJECT(widgets->UserStatusButton),"clicked",G_CALLBACK(on_user_status_clicked),widgets); + g_signal_connect(G_OBJECT(widgets->UserFiltersCombo),"changed",G_CALLBACK(on_user_filter_changed),widgets); + g_signal_connect(G_OBJECT(widgets->UserSearchEntry),"changed",G_CALLBACK(on_user_search),widgets); + g_signal_connect(G_OBJECT(widgets->UserInactiveShowCheck),"toggled",G_CALLBACK(on_user_inactive_toggled),widgets); + g_signal_connect(G_OBJECT(widgets->UserUnloadedShowCheck),"toggled",G_CALLBACK(on_user_unloaded_toggled),widgets); + + g_signal_connect(G_OBJECT(widgets->ConfigEditButton),"clicked",G_CALLBACK(on_config_edit_clicked),widgets); + + g_signal_connect(G_OBJECT(widgets->SessionStartButton),"clicked",G_CALLBACK(on_session_start_clicked),widgets); + g_signal_connect(G_OBJECT(widgets->SessionStopButton),"clicked",G_CALLBACK(on_session_stop_clicked),widgets); + g_signal_connect(G_OBJECT(widgets->SessionBlockButton),"clicked",G_CALLBACK(on_session_lock_clicked),widgets); + + + // g_signal_connect(G_OBJECT(widgets->SystemUnitsTree),"button-press-event",G_CALLBACK(on_context_menu_open),widgets); g_signal_connect(G_OBJECT(g_list_nth_data(list,0)),"notify::width",G_CALLBACK(on_column_resize),widgets); g_signal_connect(G_OBJECT(g_list_nth_data(list,1)),"notify::width",G_CALLBACK(on_column_resize),widgets); g_signal_connect(G_OBJECT(g_list_nth_data(list,2)),"notify::width",G_CALLBACK(on_column_resize),widgets); g_signal_connect(G_OBJECT(g_list_nth_data(list,3)),"notify::width",G_CALLBACK(on_column_resize),widgets); g_signal_connect(G_OBJECT(g_list_nth_data(list,4)),"notify::width",G_CALLBACK(on_column_resize),widgets); - g_signal_connect(G_OBJECT(widgets->MainTree),"cursor-changed",G_CALLBACK(on_activate),widgets); - g_signal_connect(G_OBJECT(widgets->ServiceTypeCombo),"changed",G_CALLBACK(on_type_changed),widgets); - g_signal_connect(G_OBJECT(widgets->ServiceSourceCombo),"changed",G_CALLBACK(on_type_changed),widgets); + g_signal_connect(G_OBJECT(g_list_nth_data(list,5)),"notify::width",G_CALLBACK(on_column_resize),widgets); + for (unsigned int i=0;iUserUnitsTree)); + g_signal_connect(G_OBJECT(g_list_nth_data(list,0)),"notify::width",G_CALLBACK(on_column_resize),widgets); + g_signal_connect(G_OBJECT(g_list_nth_data(list,1)),"notify::width",G_CALLBACK(on_column_resize),widgets); + g_signal_connect(G_OBJECT(g_list_nth_data(list,2)),"notify::width",G_CALLBACK(on_column_resize),widgets); + g_signal_connect(G_OBJECT(g_list_nth_data(list,3)),"notify::width",G_CALLBACK(on_column_resize),widgets); + g_signal_connect(G_OBJECT(g_list_nth_data(list,4)),"notify::width",G_CALLBACK(on_column_resize),widgets); + g_signal_connect(G_OBJECT(g_list_nth_data(list,5)),"notify::width",G_CALLBACK(on_column_resize),widgets); + for (unsigned int i=0;iConfigMainTree)); + g_signal_connect(G_OBJECT(g_list_nth_data(list,0)),"notify::width",G_CALLBACK(on_column_resize),widgets); + g_signal_connect(G_OBJECT(g_list_nth_data(list,1)),"notify::width",G_CALLBACK(on_column_resize),widgets); + g_signal_connect(G_OBJECT(g_list_nth_data(list,2)),"notify::width",G_CALLBACK(on_column_resize),widgets); + for (unsigned int i=0;iSessionMainTree)); + g_signal_connect(G_OBJECT(g_list_nth_data(list,0)),"notify::width",G_CALLBACK(on_column_resize),widgets); + g_signal_connect(G_OBJECT(g_list_nth_data(list,1)),"notify::width",G_CALLBACK(on_column_resize),widgets); + g_signal_connect(G_OBJECT(g_list_nth_data(list,2)),"notify::width",G_CALLBACK(on_column_resize),widgets); + g_signal_connect(G_OBJECT(g_list_nth_data(list,3)),"notify::width",G_CALLBACK(on_column_resize),widgets); + g_signal_connect(G_OBJECT(g_list_nth_data(list,4)),"notify::width",G_CALLBACK(on_column_resize),widgets); + for (unsigned int i=0;iTimersMainTree)); + g_signal_connect(G_OBJECT(g_list_nth_data(list,0)),"notify::width",G_CALLBACK(on_column_resize),widgets); + g_signal_connect(G_OBJECT(g_list_nth_data(list,1)),"notify::width",G_CALLBACK(on_column_resize),widgets); + g_signal_connect(G_OBJECT(g_list_nth_data(list,2)),"notify::width",G_CALLBACK(on_column_resize),widgets); + g_signal_connect(G_OBJECT(g_list_nth_data(list,3)),"notify::width",G_CALLBACK(on_column_resize),widgets); + g_signal_connect(G_OBJECT(g_list_nth_data(list,4)),"notify::width",G_CALLBACK(on_column_resize),widgets); + g_signal_connect(G_OBJECT(g_list_nth_data(list,5)),"notify::width",G_CALLBACK(on_column_resize),widgets); + for (unsigned int i=0;iSystemUnitsTree),"cursor-changed",G_CALLBACK(on_activate),widgets); g_signal_connect(G_OBJECT(widgets->LoadLocalMenuItem),"activate",G_CALLBACK(on_config_local_load),widgets); g_signal_connect(G_OBJECT(widgets->LoadGlobalMenuItem),"activate",G_CALLBACK(on_config_global_load),widgets); @@ -811,24 +645,14 @@ void yon_main_window_complete(main_window *widgets){ g_signal_connect(G_OBJECT(widgets->SaveMenuItem),"activate",G_CALLBACK(on_config_global_local_save),NULL); g_signal_connect(G_OBJECT(widgets->SaveLocalMenuItem),"activate",G_CALLBACK(on_config_local_save),NULL); g_signal_connect(G_OBJECT(widgets->SaveGlobalMenuItem),"activate",G_CALLBACK(on_config_global_save),NULL); - g_signal_connect(G_OBJECT(widgets->MainTree),"cursor-changed",G_CALLBACK(on_tree_selection_changed),widgets); - g_list_free(list); - main_config.ServiceFilter = gtk_tree_model_filter_new(GTK_TREE_MODEL(widgets->liststore2),NULL); - gtk_tree_model_filter_set_visible_func(GTK_TREE_MODEL_FILTER(main_config.ServiceFilter),(GtkTreeModelFilterVisibleFunc)on_service_filter,NULL,NULL); - main_config.SocketFilter = gtk_tree_model_filter_new(GTK_TREE_MODEL(widgets->liststore2),NULL); - gtk_tree_model_filter_set_visible_func(GTK_TREE_MODEL_FILTER(main_config.SocketFilter),(GtkTreeModelFilterVisibleFunc)on_socket_filter,NULL,NULL); - main_config.AutolaunchFilter = gtk_tree_model_filter_new(GTK_TREE_MODEL(widgets->liststore2),NULL); - gtk_tree_model_filter_set_visible_func(GTK_TREE_MODEL_FILTER(main_config.AutolaunchFilter),(GtkTreeModelFilterVisibleFunc)on_autostart_filter,NULL,NULL); - main_config.StoppedFilter = gtk_tree_model_filter_new(GTK_TREE_MODEL(widgets->liststore2),NULL); - gtk_tree_model_filter_set_visible_func(GTK_TREE_MODEL_FILTER(main_config.StoppedFilter),(GtkTreeModelFilterVisibleFunc)on_stopped_filter,NULL,NULL); - main_config.BlockedFilter = gtk_tree_model_filter_new(GTK_TREE_MODEL(widgets->liststore2),NULL); - gtk_tree_model_filter_set_visible_func(GTK_TREE_MODEL_FILTER(main_config.BlockedFilter),(GtkTreeModelFilterVisibleFunc)on_blocked_filter,NULL,NULL); - gtk_tree_view_set_search_entry(GTK_TREE_VIEW(widgets->MainTree),GTK_ENTRY(widgets->SearchEntry)); + g_signal_connect(G_OBJECT(widgets->SystemUnitsTree),"cursor-changed",G_CALLBACK(on_tree_selection_changed),widgets); + gtk_tree_view_set_search_entry(GTK_TREE_VIEW(widgets->SystemUnitsTree),GTK_ENTRY(widgets->SystemSearchEntry)); yon_load_proceed(YON_CONFIG_LOCAL); yon_ubl_status_box_render(LIST_LOAD_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE); if (!main_config.update_thread_active){ main_config.update_thread_active=1; - gdk_threads_add_idle((GSourceFunc)((gboolean*)(void*)yon_interface_update),widgets); + pthread_t tid; + pthread_create(&tid,NULL,(void*)(void*)((yon_interface_update)),widgets); } } @@ -845,6 +669,8 @@ int main(int argc, char *argv[]){ gtk_init(&argc,&argv); template_main_window *widgets = yon_ubl_window_setup(); yon_main_window_complete((main_window*)widgets); + char *path = yon_char_unite(yon_ubl_user_get_home_directory(),"/.config/",LocaleName,"/",LocaleName,".conf",NULL); + yon_window_config_load(path); if (getuid()!=0) yon_ubl_status_box_render(ROOT_WARNING_LABEL,BACKGROUND_IMAGE_FAIL_TYPE); gtk_main(); diff --git a/source/ubl-settings-services.h b/source/ubl-settings-services.h index f453bde..e18506a 100644 --- a/source/ubl-settings-services.h +++ b/source/ubl-settings-services.h @@ -48,6 +48,8 @@ #define start_log_command(target) yon_char_append("journalctl --all --no-pager --unit ",target) +#define get_config_files_command "find /etc/systemd -iname *.conf -exec du -sh --time {} \\;" + #define config_get_local_command "ubconfig --source system get system SERVICES_ENABLE SERVICES_DISABLE SERVICES_MASK" #define config_get_global_command "ubconfig --source global get system SERVICES_ENABLE SERVICES_DISABLE SERVICES_MASK" #define config_get_default_command "" @@ -60,28 +62,30 @@ #define SERVICES_MASK_get_command "ubconfig --source global get [system] SERVICES_MASK" #define CONSOLE_FONT_get_command "ubconfig --source global get [locale] CONSOLE_FONT" +#define play_icon_path "com.ublinux.ubl-settings-services.play-symbolic" +#define stop_icon_path "com.ublinux.ubl-settings-services.stop-symbolic" +#define block_icon_path "com.ublinux.ubl-settings-services.cancel-symbolic" +#define start_icon_path "com.ublinux.ubl-settings-services.launch-symbolic" +#define update_icon_path "com.ublinux.ubl-settings-services.sync-symbolic" +#define launch_icon_path "com.ublinux.ubl-settings-services.check-symbolic" +#define log_icon_path "com.ublinux.ubl-settings-services.lookup-symbolic" +#define source_icon_path "com.ublinux.ubl-settings-services.play-symbolic" +#define properties_icon_path "com.ublinux.ubl-settings-services.play-symbolic" +#define status_icon_path "com.ublinux.ubl-settings-services.play-symbolic" + +#define reload_systemd_root_command "systemctl daemon-reload" +#define reexec_systemd_root_command "systemctl daemon-reexec" + +#define reload_systemd_user_command "systemctl --user daemon-reload" +#define reexec_systemd_user_command "systemctl --user daemon-reexec" + typedef char* string; string version_application; char *local; typedef struct { -// Standard config. DO NOT EDIT - MUST BE SAME AS ublsettings-ui's template_config STRUCT { - int socket_id; - int load_socket_id; - int save_socket_id; - - int lock_help; - int lock_save_local; - int lock_save_global; - int lock_load_global; - int lock_load_system; - - int load_mode; - - int always_open_documentation; -// } Standard config. DO NOT EDIT - MUST BE SAME AS ublsettings-ui's template_config STRUCT -// Type custom parameters below: + template_config_fields int rmb_clicked; GtkTreeModel *ServiceFilter; GtkTreeModel *SocketFilter; @@ -93,69 +97,61 @@ typedef struct { int update_thread_active; } config; - -typedef struct { - GtkWidget *Menu; - GtkWidget *MenuConfigAutostart; - GtkWidget *MenuConfigAutostop; - GtkWidget *MenuConfigBlock; - GtkWidget *MenuSystemAutostart; - GtkWidget *MenuSystemLaunched; - GtkWidget *MenuReloadConfig; - GtkWidget *MenuStatus; -} menu_obj; typedef struct { -// Standard widgets. DO NOT EDIT - MUST BE SAME AS ublsettings-ui's template_main_window STRUCT { - GtkWidget *Window; - GtkWidget *HeadLabel; - GtkWidget *PlugBox; - - GtkWidget *HeadOverlay; - GtkWidget *HeadImage; - GtkWidget *HeadBox; - GtkWidget *HeadTitleLabel; - GtkWidget *HeadInfoLabel; - - GtkWidget *StatusBox; - GtkWidget *StatusIcon; - GtkWidget *StatusLabel; - - GtkWidget *SaveMenuItem; - GtkWidget *SaveGlobalMenuItem; - GtkWidget *SaveLocalMenuItem; - GtkWidget *RightBox; - - GtkWidget *LoadGlobalMenuItem; - GtkWidget *LoadLocalMenuItem; - GtkWidget *LeftBox; - - GtkWidget *DocumentationMenuItem; - GtkWidget *AboutMenuItem; - - GtkWidget *InterfaceBox; -// } Standard widgets. DO NOT EDIT - MUST BE SAME AS ublsettings-ui's template_main_window STRUCT -// Type custom parameters below: - GtkListStore *liststore1; - GtkListStore *liststore2; + template_window_fields + GtkListStore *UserList; + GtkListStore *TimersList; + GtkListStore *SessionsList; + GtkListStore *ConfigList; + GtkListStore *SystemList; GtkWidget *BoxMain; - GtkWidget *ServiceSourceCombo; - GtkWidget *ServiceTypeCombo; - GtkWidget *SearchEntry; - GtkWidget *UpdateButton; - GtkWidget *ConfigAutostartButton; - GtkWidget *ConfigAutostopButton; - GtkWidget *ConfigBlockButton; - GtkWidget *SystemAutostartButton; - GtkWidget *SystemLaunchButton; - GtkWidget *InfoButton; - GtkWidget *LogButton; - GtkWidget *MainUpperTree; - GtkWidget *MainTree; - GtkWidget *RMBMenu; - menu_obj *menu; - GtkWidget *ServiceLabel; - GtkWidget *DescriptionLabel; + + GtkWidget *SystemSearchEntry; + GtkWidget *SystemFiltersCombo; + GtkWidget *SystemInactiveShowCheck; + GtkWidget *SystemUnloadedShowCheck; + GtkWidget *SystemUpperTree; + GtkWidget *SystemUnitsTree; + GtkWidget *SystemPrevButton; + GtkWidget *SystemUpdateButton; + GtkWidget *SystemInfoButton; + GtkWidget *SystemLogButton; + GtkWidget *SystemEditButton; + GtkWidget *SystemPropertiesButton; + GtkWidget *SystemStatusButton; + rmb_menu_window *SystemMenu; + GtkWidget *SystemServiceLabel; + GtkWidget *SystemDescriptionLabel; + + GtkWidget *UserSearchEntry; + GtkWidget *UserFiltersCombo; + GtkWidget *UserInactiveShowCheck; + GtkWidget *UserUnloadedShowCheck; + GtkWidget *UsersUpperTree; + GtkWidget *UserUnitsTree; + GtkWidget *UserPrevButton; + GtkWidget *UserUpdateButton; + GtkWidget *UserInfoButton; + GtkWidget *UserLogButton; + GtkWidget *UserEditButton; + GtkWidget *UserStatusButton; + rmb_menu_window *UserMenu; + GtkWidget *UserServiceLabel; + GtkWidget *UserDescriptionLabel; + + GtkWidget *ConfigEditButton; + GtkWidget *ConfigMainTree; + + GtkWidget *SessionMainTree; + GtkWidget *SessionStartButton; + GtkWidget *SessionStopButton; + GtkWidget *SessionBlockButton; + rmb_menu_window *SessionMenu; + + GtkWidget *TimersMainTree; + GtkWidget *MainNotebook; + } main_window; @@ -187,18 +183,13 @@ typedef struct{ GtkWidget *MainTree; } bl_settings_services_window; -typedef struct { - GtkWidget *Window; - GtkWidget *UpdateButton; - GtkWidget *SystemTerminal; - GtkWidget *webHeaderNameLabel; - char *target; -} terminal_window; - typedef struct { GtkWidget *Window; GtkWidget *SystemTerminal; + GtkWidget *TextEditor; GtkWidget *webHeaderNameLabel; + GtkWidget *UpdateButton; + GtkWidget *SaveButton; char *target; } log_window; @@ -240,6 +231,69 @@ void on_system_kill_confirmed(GtkWidget *self,char *service_name); void on_system_launch_clicked(); +void on_system_restart_clicked(); + +void on_source_show(); + +void on_properties_show(); + +void on_session_activate(); + +void on_session_end(); + +void on_session_block(); + +void yon_system_systemd_restart(GtkWidget *self, main_window *widgets); +void yon_user_systemd_restart(GtkWidget *self, main_window *widgets); + +void on_system_update_hz_clicked(GtkWidget *self, main_window *widgets); + +void on_system_update_clicked(GtkWidget *self, main_window *widgets); + +void on_system_info_clicked(GtkWidget *self, main_window *widgets); + +void on_system_log_clicked(GtkWidget *self, main_window *widgets); + +void on_system_edit_clicked(GtkWidget *self, main_window *widgets); + +void on_system_status_clicked(GtkWidget *self, main_window *widgets); + +void on_system_filter_changed(GtkWidget *self, main_window *widgets); + +void on_system_search(GtkWidget *self, main_window *widgets); + +void on_system_inactive_toggled(GtkWidget *self, main_window *widgets); + +void on_system_unloaded_toggled(GtkWidget *self, main_window *widgets); + +void on_user_update_hz_clicked(GtkWidget *self, main_window *widgets); + +void on_user_update_clicked(GtkWidget *self, main_window *widgets); + +void on_user_info_clicked(GtkWidget *self, main_window *widgets); + +void on_user_log_clicked(GtkWidget *self, main_window *widgets); + +void on_user_edit_clicked(GtkWidget *self, main_window *widgets); + +void on_user_status_clicked(GtkWidget *self, main_window *widgets); + +void on_user_filter_changed(GtkWidget *self, main_window *widgets); + +void on_user_search(GtkWidget *self, main_window *widgets); + +void on_user_inactive_toggled(GtkWidget *self, main_window *widgets); + +void on_user_unloaded_toggled(GtkWidget *self, main_window *widgets); + +void on_config_edit_clicked(GtkWidget *self, main_window *widgets); + +void on_session_start_clicked(GtkWidget *self, main_window *widgets); + +void on_session_stop_clicked(GtkWidget *self, main_window *widgets); + +void on_session_lock_clicked(GtkWidget *self, main_window *widgets); + gboolean yon_service_source_check(GtkTreeModel *model, GtkTreeIter *iter, void *data); gboolean yon_service_type_check(GtkTreeModel *model, GtkTreeIter *iter,void *data); @@ -280,8 +334,4 @@ gboolean on_blocked_filter(GtkTreeModel *model, GtkTreeIter *iter,void *data); gboolean on_source_user_filter(GtkTreeModel *model, GtkTreeIter *iter,void *data); -gboolean on_source_system_filter(GtkTreeModel *model, GtkTreeIter *iter,void *data); - -terminal_window *yon_terminal_window_new(); - -void on_service_update(GtkWidget *self, terminal_window* window); \ No newline at end of file +gboolean on_source_system_filter(GtkTreeModel *model, GtkTreeIter *iter,void *data); \ No newline at end of file diff --git a/source/ubl-strings.h b/source/ubl-strings.h index ecc6005..44ff2ce 100644 --- a/source/ubl-strings.h +++ b/source/ubl-strings.h @@ -44,6 +44,13 @@ #define LAUNCHED_LABEL _("Launched") #define LIST_LOAD_LABEL _("Service list is loading") #define STATUS_LABEL _("Status") +#define RESTART_LABEL _("Restart with new configuration") +#define SHOW_LOG_LABEL _("Show log") +#define SHOW_SOURCE_LABEL _("Show source") +#define PROPERTIES_LABEL _("Properties") +#define ACTIVATE_SESSION_LABEL _("Activate session") +#define END_SESSION_LABEL _("End session") +#define BLOCK_SESSION_LABEL _("Block session") #define SWITCH_OFF_ERROR_LABEL _("Service were not stopped") #define STOP_SERVICE_WARMING_LABEL(target) yon_char_unite(_("Are you sure want to stop "),target,"?\n",_("The stop will be forced.\nThe system may become unstable."),NULL) \ No newline at end of file diff --git a/ubl-settings-services-log.glade b/ubl-settings-services-log.glade index 9b05667..0715261 100644 --- a/ubl-settings-services-log.glade +++ b/ubl-settings-services-log.glade @@ -23,6 +23,53 @@ 5 5 5 + + + True + False + vertical + 5 + + + True + True + True + Update + image1 + + + + False + True + 0 + + + + + True + True + True + Update + image2 + + + + False + True + 1 + + + + + False + True + 0 + + True @@ -39,18 +86,40 @@ True False - + True - False - True - natural - adjustment1 - natural - UTF-8 - True - 0 - True - False + False + vertical + + + True + + + False + True + 0 + + + + + True + False + True + natural + adjustment1 + natural + UTF-8 + True + 0 + True + False + + + True + True + 1 + + @@ -89,4 +158,15 @@ + + True + False + com.ublinux.ubl-settings-services.sync-symbolic + + + True + False + document-save-symbolic + + diff --git a/ubl-settings-services-terminal.glade b/ubl-settings-services-terminal.glade index ba2cd2f..a8ab008 100644 --- a/ubl-settings-services-terminal.glade +++ b/ubl-settings-services-terminal.glade @@ -33,6 +33,7 @@ True False vertical + 5 True @@ -50,6 +51,23 @@ 0 + + + True + True + True + Update + image2 + + + + False + True + 1 + + False @@ -121,4 +139,9 @@ + + True + False + document-save-symbolic + diff --git a/ubl-settings-services.css b/ubl-settings-services.css index fee529c..9a6c1f7 100644 --- a/ubl-settings-services.css +++ b/ubl-settings-services.css @@ -118,10 +118,12 @@ background:transparent; border-style:solid; } -.sepat{ +.separator_menu_item{ border-color: darker (@theme_bg_color); border-top-width:1px; border-style:solid; + margin:0px; + padding:0px; } .marginright image{ diff --git a/ubl-settings-services.glade b/ubl-settings-services.glade index ce0ef08..445165c 100644 --- a/ubl-settings-services.glade +++ b/ubl-settings-services.glade @@ -3,155 +3,381 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + True False - com.ublinux.ubl-settings-services.play-symbolic - + True False com.ublinux.ubl-settings-services.stop-symbolic - + True False - com.ublinux.ubl-settings-services.cancel-uncolored-symbolic + com.ublinux.ubl-settings-services.play-symbolic - + True False - com.ublinux.ubl-settings-services.launch-symbolic + com.ublinux.ubl-settings-services.edit-symbolic - + + True + False + + True False - com.ublinux.ubl-settings-services.check-symbolic + com.ublinux.ubl-settings-services.sync-symbolic - + True False com.ublinux.ubl-settings-services.important-symbolic - + + True + False + com.ublinux.ubl-settings-services.lookup-symbolic + + + True + False + + + True + False + + + True + False + com.ublinux.ubl-settings-services.important-symbolic + + True False com.ublinux.ubl-settings-services.lookup-symbolic + + True + False + + + True + False + True False com.ublinux.ubl-settings-services.sync-symbolic + + True + False + com.ublinux.ubl-settings-services.lock-symbolic + - - - - - - - - - - - - - - - - - - - - - + + + True + False + + + True + False + System services status + True + + + + + True + False + User services status + True + + + + + True + False + Installed unit files + True + + + + + True + False + Units and status list + True + + + + + True + False + Sockets and status list + True + + + + + True + False + Timers and status list + True + + True False vertical - + True - False - 0.019999999552965164 - in + True - + True False - 5 - 5 - 5 + 5 + 5 + 5 + 5 + vertical + 5 + + + True + False + 5 + + + True + False + 0 + + All + Autolaunch in configuration + Stopped in configuration + Blocked in configuration + service + swap + socket + target + device + automount + timer + slice + path + scope + + + + False + True + 0 + + + + + Show inactive + True + True + False + True + + + False + True + 1 + + + + + Show unloaded + True + True + False + True + + + False + True + 2 + + + + + True + True + edit-find-symbolic + False + False + + + True + True + 3 + + + + + False + True + 0 + + True False - vertical 5 True False + vertical 5 - + True - False - 0 - - All services - System services only - User services only - + True + True + Toggle autostart at configuration + image1 + - True + False True 0 - + True - False - 0 - - All - Services - Sockets - Autolaunch in configuration - Stopped in configuration - Blocked in configuration - + True + True + Update + image8 + - True + False True 1 - + True - True - edit-find-symbolic - False - False + False - True + False True 2 - + True True True - Update - image8 + Toggle service blocking at configuration + image3 @@ -162,179 +388,104 @@ 3 - - - False - True - 0 - - - - - True - False - 5 - + True - False - vertical - 5 - - - True - False - True - True - Toggle autostart at configuration - image1 - - - - False - True - 0 - - - - - True - False - True - True - Toggle autostop at configuration - image2 - - - - False - True - 1 - - - - - True - False - True - True - Toggle service blocking at configuration - image3 - - - - False - True - 2 - - - - - True - False - - - False - True - 3 - - - - - True - False - True - True - Toggle autostart at system - image4 - - - - False - True - 4 - - - - - True - False - True - True - Launch/Stop service - image5 - - - - False - True - 5 - - + True + True + Toggle autostart at system + image4 + + + + False + True + 4 + + + + + True + True + True + Launch/Stop service + image5 + + + + False + True + 5 + + + + + True + True + True + Check service log + image7 + + + + False + True + 6 + + + + + True + False + + + False + True + 7 + + + + + True + True + False + True + menu1 - + True False - - False - True - 6 - - - - - True - False - True - True - Check service status - image6 - - - - False - True - 7 - - - - - True - False - True - True - Check service log - image7 - - - - False - True - 8 - + False True - 0 + 8 + + + False + True + 0 + + + + + True + False + vertical + 5 True @@ -347,7 +498,7 @@ False vertical - + True True liststore1 @@ -385,10 +536,10 @@ True True - + True True - liststore2 + SystemList 5 horizontal @@ -459,10 +610,25 @@ + + + True + 10 + 10 + Unit + + + + 5 + + + + autosize + True @@ -489,54 +655,6 @@ True True - 1 - - - - - True - True - 1 - - - - - True - False - vertical - 5 - - - True - False - 5 - - - True - False - Service: - - - False - True - 0 - - - - - True - False - - - False - True - 1 - - - - - False - True 0 @@ -544,12 +662,36 @@ True False + vertical 5 - + True False - Description: + 5 + + + True + False + Service: + + + False + True + 0 + + + + + True + False + + + False + True + 1 + + False @@ -558,10 +700,34 @@ - + True False - True + 5 + + + True + False + Description: + + + False + True + 0 + + + + + True + False + True + + + False + True + 1 + + False @@ -577,22 +743,969 @@ + + True + True + 1 + + + + + True + True + 1 + + + + + + + True + False + System units + + + False + + + + + True + False + 5 + 5 + 5 + 5 + vertical + 5 + + + True + False + 5 + + + True + False + 0 + + All + Autolaunch in configuration + Stopped in configuration + Blocked in configuration + service + swap + socket + target + device + automount + timer + path + slice + scope + + + + False + True + 0 + + + + + Show inactive + True + True + False + True + + + False + True + 1 + + + + + Show unloaded + True + True + False + True + False True 2 + + + True + True + edit-find-symbolic + False + False + + + True + True + 3 + + + + + False + True + 0 + + + + + True + False + 5 + + + True + False + vertical + 5 + + + True + True + True + image13 + + + + False + True + 0 + + + + + True + True + True + image14 + + + + False + True + 1 + + + + + True + False + + + False + True + 2 + + + + + True + True + True + image15 + + + + False + True + 3 + + + + + True + True + True + image16 + + + + False + True + 4 + + + + + True + True + True + image17 + + + + False + True + 5 + + + + + True + True + True + image18 + + + + False + True + 7 + + + + + False + True + 0 + + + + + True + False + vertical + 5 + + + True + False + 0.019999999552965164 + in + + + True + False + vertical + + + True + True + liststore1 + + + + + + Configure in configuration + + + + + Configure in system + + + + + Service + + + + + False + True + 0 + + + + + True + True + + + True + True + UserList + 5 + horizontal + + + + + + True + fixed + Autostart + + + + 0 + + + + + + + True + fixed + Autostop + + + + 1 + + + + + + + True + fixed + Block + + + + 2 + + + + + + + True + fixed + Autostart + + + + 3 + + + + + + + True + fixed + Launched + + + + 4 + + + + + + + True + 10 + 10 + Unit + + + + 5 + + + + + + + autosize + + True + + + + 5 + + + + + + + + + True + True + 1 + + + + + + + + + + True + True + 0 + + + + + True + False + vertical + 5 + + + True + False + 5 + + + True + False + Service: + + + False + True + 0 + + + + + True + False + + + False + True + 1 + + + + + False + True + 0 + + + + + True + False + 5 + + + True + False + Description: + + + False + True + 0 + + + + + True + False + + + False + True + 1 + + + + + False + True + 1 + + + + + False + True + 2 + + + + + True + True + 1 + + + + + True + True + 1 + + + + + 1 + + + + + True + False + User units + + + 1 + False + + + + + True + False + 5 + 5 + 5 + 5 + 5 + + + True + False + vertical + + + True + True + True + image12 + + + + False + True + 0 + + + + + False + True + 0 + + + + + True + False + 0 + in + + + True + True + ConfigList + + + + + + True + fixed + 10 + File + + + + 0 + + + + + + + True + fixed + 10 + Change date + + + + 1 + + + + + + + 10 + Description + True + + + + 2 + + + + + + + + + + + + True + True + 1 + + + + + 2 + + + + + True + False + Config files + + + 2 + False + + + + + True + False + 5 + 5 + 5 + 5 + 5 + + + True + False + vertical + 5 + + + True + True + True + image11 + + + + False + True + 0 + + + + + True + True + True + image10 + + + + False + True + 1 + + + + + True + True + True + image9 + + + + False + True + 2 + + + + + False + True + 0 + + + + + True + False + 0 + in + + + True + True + SessionsList + + + + + + True + fixed + 10 + Session ID + + + + 0 + + + + + + + True + fixed + 10 + Status + + + + 1 + + + + + + + True + fixed + 10 + User ID + + + + 2 + + + + + + + True + fixed + 10 + User name + + + + 3 + + + + + + + 10 + Seat ID + True + + + + 4 + + + + + + + + + + + + True + True + 1 + + + + + 3 + + + + + True + False + Sessions + + + 3 + False + + + + + True + False + 5 + 5 + 5 + 5 + vertical + + + True + False + 0.019999999552965164 + in + + + True + True + TimersList + + + + + + True + fixed + 10 + Timer + + + + 0 + + + + + + + True + fixed + 10 + Next + + + + 1 + + + + + + + True + fixed + 10 + Previous + + + + 2 + + + + + + + True + fixed + 10 + Last + + + + 3 + + + + + + + True + fixed + 10 + Passed + + + + 4 + + + + + + + 10 + Activates + True + + + + 5 + + + + + + + + + + + True + True + 0 + + + 4 + - + True False - Services + Timers + + 4 + False + From 9b39b7d0e7d6766597256b2a68852e7724515de2 Mon Sep 17 00:00:00 2001 From: Ivan Yarcev Date: Tue, 26 Mar 2024 12:07:46 +0600 Subject: [PATCH 03/31] Updated --- gresource.xml | 1 - source/CMakeLists.txt | 1 - source/ubl-settings-services.c | 260 ++++++++++++++++++- source/ubl-settings-services.h | 57 +++- source/ubl-strings.h | 4 + ubl-settings-services-log.glade | 172 ------------- ubl-settings-services-terminal.glade | 174 ++++++++----- ubl-settings-services.glade | 372 ++++++++++++++------------- 8 files changed, 610 insertions(+), 431 deletions(-) delete mode 100644 ubl-settings-services-log.glade diff --git a/gresource.xml b/gresource.xml index b6f2a4b..835a942 100644 --- a/gresource.xml +++ b/gresource.xml @@ -3,7 +3,6 @@ ubl-settings-services.glade ubl-settings-services-terminal.glade - ubl-settings-services-log.glade ubl-settings-services.css diff --git a/source/CMakeLists.txt b/source/CMakeLists.txt index dde613a..6469d42 100644 --- a/source/CMakeLists.txt +++ b/source/CMakeLists.txt @@ -32,7 +32,6 @@ add_custom_target(GLADE ubl-settings-services.glade) set(DEPENDFILES ../ubl-settings-services.glade ../ubl-settings-services-terminal.glade - ../ubl-settings-services-log.glade ../gresource.xml ../ubl-settings-services-banner.png ../ubl-settings-services.css diff --git a/source/ubl-settings-services.c b/source/ubl-settings-services.c index 437cd70..8b464be 100644 --- a/source/ubl-settings-services.c +++ b/source/ubl-settings-services.c @@ -126,15 +126,20 @@ log_window *yon_log_window_new(){ GtkBuilder *builder = gtk_builder_new_from_resource(glade_path_log); window->Window = yon_gtk_builder_get_widget(builder,"MonitorWindow"); window->SystemTerminal = yon_gtk_builder_get_widget(builder,"SystemTerminal"); + window->TerminalScroll = yon_gtk_builder_get_widget(builder,"TerminalScroll"); window->TextEditor = yon_gtk_builder_get_widget(builder,"TextEditor"); window->webHeaderNameLabel = yon_gtk_builder_get_widget(builder,"webHeaderNameLabel"); window->UpdateButton = yon_gtk_builder_get_widget(builder,"UpdateButton"); window->SaveButton = yon_gtk_builder_get_widget(builder,"SaveButton"); + window->StatusBox = yon_gtk_builder_get_widget(builder,"StatusBox"); window->target=NULL; + window->adjustment = GTK_ADJUSTMENT(gtk_builder_get_object(builder,"adjustment1")); + yon_gtk_widget_set_scroll_window_for_scroll(window->Window,GTK_SCROLLBAR(window->TerminalScroll)); GdkRGBA rgba; vte_terminal_get_color_background_for_draw(VTE_TERMINAL(window->SystemTerminal),&rgba); vte_terminal_set_color_cursor(VTE_TERMINAL(window->SystemTerminal),&rgba); yon_window_config_custom_window_setup(GTK_WINDOW(window->Window),"terminal_window"); + g_signal_connect(G_OBJECT(window->UpdateButton),"clicked",G_CALLBACK(on_update_clicked),window); return window; } @@ -153,6 +158,21 @@ void yon_system_systemd_restart(GtkWidget *self, main_window *widgets){ } } +void yon_system_systemd_reexec(GtkWidget *self, main_window *widgets){ + if (self){}; + if (widgets){ + if (getuid()!=0&>k_notebook_get_current_page(GTK_NOTEBOOK(widgets->MainNotebook))==0){ + if (system(reexec_systemd_root_command)){ + yon_ubl_status_box_render("TEXT_ERROR",BACKGROUND_IMAGE_FAIL_TYPE); + } + } else { + if (system(reexec_systemd_user_command)){ + yon_ubl_status_box_render("TEXT_ERROR",BACKGROUND_IMAGE_FAIL_TYPE); + } + } + } +} + typedef void (*data_function)(void*,void*); void on_system_update_hz_clicked(GtkWidget *self, main_window *widgets){ @@ -163,15 +183,18 @@ void on_system_update_hz_clicked(GtkWidget *self, main_window *widgets){ data->data = widgets; data->function = (data_function)yon_system_systemd_restart; yon_confirmation_dialog_call(self,data); + } } void on_system_update_clicked(GtkWidget *self, main_window *widgets){ if (self){} if (widgets){ - // log_window *window = yon_log_window_new(); - - // gtk_widget_show(window->Window); + dialog_confirmation_data *data = malloc(sizeof(dialog_confirmation_data)); + data->action_text = "Are you sure?"; + data->data = widgets; + data->function = (data_function)yon_system_systemd_reexec; + yon_confirmation_dialog_call(self,data); } } @@ -179,9 +202,16 @@ void on_system_update_clicked(GtkWidget *self, main_window *widgets){ void on_system_info_clicked(GtkWidget *self, main_window *widgets){ if (self){} if (widgets){ - log_window *window = yon_log_window_new(); - - gtk_widget_show(window->Window); + GtkTreeIter iter; + GtkTreeModel *model = GTK_TREE_MODEL(widgets->SystemList); + if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->SystemUnitsTree)),&model,&iter)){ + char *name; + gtk_tree_model_get(model,&iter,5,&name,-1); + log_window *window = yon_log_window_new(); + window->target = service_info_command(name); + yon_terminal_integrated_start(window->SystemTerminal,window->target,NULL,NULL); + gtk_widget_show(window->Window); + } } } @@ -189,19 +219,63 @@ void on_system_info_clicked(GtkWidget *self, main_window *widgets){ void on_system_log_clicked(GtkWidget *self, main_window *widgets){ if (self){} if (widgets){ - log_window *window = yon_log_window_new(); - - gtk_widget_show(window->Window); + GtkTreeIter iter; + GtkTreeModel *model = GTK_TREE_MODEL(widgets->SystemList); + if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->SystemUnitsTree)),&model,&iter)){ + char *name; + gtk_tree_model_get(model,&iter,5,&name,-1); + log_window *window = yon_log_window_new(); + window->target = get_log_command(name); + yon_terminal_integrated_start(window->SystemTerminal,window->target,NULL,NULL); + gtk_widget_show(window->Window); + } } } +void *on_terminal_relaunch(log_window *window){ + gtk_widget_set_sensitive(window->SystemTerminal,0); + sleep(1); + gtk_widget_set_sensitive(window->SystemTerminal,1); + yon_terminal_integrated_start(window->SystemTerminal,window->target,NULL,NULL); + return NULL; +} + +void on_save_clicked(GtkWidget *self, log_window *window){ + if (self){}; + vte_terminal_feed_child(VTE_TERMINAL(window->SystemTerminal),"\30",-1); + vte_terminal_feed_child(VTE_TERMINAL(window->SystemTerminal),"Y\r",-1); + gtk_widget_grab_focus(window->SystemTerminal); + // yon_ubl_status_box_spawn(GTK_CONTAINER(window->StatusBox),SAVING_LABEL,1,BACKGROUND_IMAGE_SUCCESS_TYPE); + g_thread_new(NULL,(GThreadFunc)on_terminal_relaunch,window); +} + +void on_update_clicked(GtkWidget *self, log_window *window){ + if (self){}; + yon_terminal_integrated_start(window->SystemTerminal,window->target,NULL,NULL); +} + void on_system_edit_clicked(GtkWidget *self, main_window *widgets){ if (self){} if (widgets){ - log_window *window = yon_log_window_new(); - - gtk_widget_show(window->Window); + GtkTreeIter iter; + GtkTreeModel *model = GTK_TREE_MODEL(widgets->SystemList); + if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->SystemUnitsTree)),&model,&iter)){ + char *name; + gtk_tree_model_get(model,&iter,5,&name,-1); + log_window *window = yon_log_window_new(); + gtk_widget_show(window->SaveButton); + window->target=show_source_command(name); + yon_terminal_integrated_start(window->SystemTerminal,window->target,NULL,NULL); + GdkRGBA rgba; + rgba.blue=1; + rgba.green=1; + rgba.red=1; + vte_terminal_set_color_cursor(VTE_TERMINAL(window->SystemTerminal),&rgba); + gtk_widget_set_sensitive(window->SystemTerminal,1); + g_signal_connect(G_OBJECT(window->SaveButton),"clicked",G_CALLBACK(on_save_clicked),window); + gtk_widget_show(window->Window); + } } } @@ -209,9 +283,17 @@ void on_system_edit_clicked(GtkWidget *self, main_window *widgets){ void on_system_status_clicked(GtkWidget *self, main_window *widgets){ if (self){} if (widgets){ - log_window *window = yon_log_window_new(); + GtkTreeIter iter; + GtkTreeModel *model = GTK_TREE_MODEL(widgets->SystemList); + if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->SystemUnitsTree)),&model,&iter)){ + char *name; + gtk_tree_model_get(model,&iter,5,&name,-1); + log_window *window = yon_log_window_new(); + window->target = properties_command(name); + yon_terminal_integrated_start(window->SystemTerminal,window->target,NULL,NULL); + gtk_widget_show(window->Window); + } - gtk_widget_show(window->Window); } } @@ -360,6 +442,18 @@ void on_config_edit_clicked(GtkWidget *self, main_window *widgets){ if (self){} if (widgets){ log_window *window = yon_log_window_new(); + gtk_widget_hide(gtk_widget_get_parent(window->SystemTerminal)); + gtk_widget_show(gtk_widget_get_parent(window->TextEditor)); + GtkTreeIter iter; + GtkTreeModel *model = GTK_TREE_MODEL(widgets->ConfigList); + if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->ConfigMainTree)),&model,&iter)){ + char *name; + gtk_tree_model_get(model,&iter,0,&name,-1); + int size; + config_str parsed = yon_config_load(config_get_command(name),&size); + char *text = yon_char_parsed_to_string(parsed,size,""); + gtk_text_buffer_set_text(gtk_text_view_get_buffer(GTK_TEXT_VIEW(window->TextEditor)),text,-1); + } gtk_widget_show(window->Window); } @@ -397,9 +491,134 @@ void on_session_lock_clicked(GtkWidget *self, main_window *widgets){ } +void on_system_services_status(GtkWidget *self, main_window *widgets){ + if (self){} + if (widgets){ + log_window *window = yon_log_window_new(); + window->target = system_services_status_command; + yon_terminal_integrated_start(window->SystemTerminal,window->target,NULL,NULL); + gtk_widget_show(window->Window); + + } + +} + +void on_user_services_status(GtkWidget *self, main_window *widgets){ + if (self){} + if (widgets){ + log_window *window = yon_log_window_new(); + window->target = user_services_status_command; + yon_terminal_integrated_start(window->SystemTerminal,window->target,NULL,NULL); + gtk_widget_show(window->Window); + + } + +} + +void on_units_status(GtkWidget *self, main_window *widgets){ + if (self){} + if (widgets){ + log_window *window = yon_log_window_new(); + window->target = installed_units_states_command; + yon_terminal_integrated_start(window->SystemTerminal,window->target,NULL,NULL); + gtk_widget_show(window->Window); + + } + +} + +void on_units_list_status(GtkWidget *self, main_window *widgets){ + if (self){} + if (widgets){ + log_window *window = yon_log_window_new(); + window->target = list_of_units_states_command; + yon_terminal_integrated_start(window->SystemTerminal,window->target,NULL,NULL); + gtk_widget_show(window->Window); + + } + +} + +void on_sockets_list_status(GtkWidget *self, main_window *widgets){ + if (self){} + if (widgets){ + log_window *window = yon_log_window_new(); + window->target = list_of_sockets_states_command; + yon_terminal_integrated_start(window->SystemTerminal,window->target,NULL,NULL); + gtk_widget_show(window->Window); + + } + +} + +void on_timers_list_status(GtkWidget *self, main_window *widgets){ + if (self){} + if (widgets){ + log_window *window = yon_log_window_new(); + window->target = list_of_timers_states_command; + yon_terminal_integrated_start(window->SystemTerminal,window->target,NULL,NULL); + gtk_widget_show(window->Window); + + } + +} + gboolean yon_interface_update(main_window *widgets){ if (widgets){ + int system_size; + config_str system_services = yon_config_load(load_services_command,&system_size); + int user_size; + config_str user_services = yon_config_load(load_user_services_command,&user_size); + int config_size; + config_str config_files = yon_config_load(get_config_files_command,&config_size); + int sessions_size; + config_str sessions = yon_config_load(list_of_session_command,&sessions_size); + // int timers_size; + // config_str timers = yon_config_load(list_of_timers_command,&timers_size); + + for (int i=0; iSystemList,&iter); + gtk_list_store_set(widgets->SystemList,&iter,4,strcmp(parsed[2],"active")?0:1,5,parsed[0],6,parsed[4],-1); + } + + } + for (int i=0; iUserList,&iter); + gtk_list_store_set(widgets->UserList,&iter,4,strcmp(parsed[2],"active")?0:1,5,parsed[0],6,parsed[4],-1); + } + } + for (int i=0; i2){ + GtkTreeIter iter; + char *description = ""; + gtk_list_store_append(widgets->ConfigList,&iter); + gtk_list_store_set(widgets->ConfigList,&iter,0,parsed[2],1,parsed[1],2,description,-1); + } + } + for (int i=0;i4){ + gtk_list_store_append(widgets->SessionsList,&iter); + gtk_list_store_set(widgets->SessionsList,&iter,0,atoi(parsed[0]),1,atoi(parsed[1]),2,parsed[2],3,parsed[3],4,parsed[4],-1); + } + } } return 0; } @@ -476,6 +695,13 @@ void yon_main_window_complete(main_window *widgets){ widgets->SystemUnitsTree=yon_gtk_builder_get_widget(builder,"SystemUnitsTree"); widgets->MainNotebook=yon_gtk_builder_get_widget(builder,"MainNotebook"); + widgets->SystemServicesStatusMenuItem=yon_gtk_builder_get_widget(builder,"SystemServicesStatusMenuItem"); + widgets->UserServicesStatusMenuItem=yon_gtk_builder_get_widget(builder,"UserServicesStatusMenuItem"); + widgets->InstalledUnitsStatusMenuItem=yon_gtk_builder_get_widget(builder,"InstalledUnitsStatusMenuItem"); + widgets->UnitsStatusListMenuItem=yon_gtk_builder_get_widget(builder,"UnitsStatusListMenuItem"); + widgets->SocketsStatusListMenuItem=yon_gtk_builder_get_widget(builder,"SocketsStatusListMenuItem"); + widgets->TimersStatusListMenuItem=yon_gtk_builder_get_widget(builder,"TimersStatusListMenuItem"); + widgets->SystemSearchEntry=yon_gtk_builder_get_widget(builder,"SystemSearchEntry"); widgets->SystemFiltersCombo=yon_gtk_builder_get_widget(builder,"SystemFiltersCombo"); widgets->SystemInactiveShowCheck=yon_gtk_builder_get_widget(builder,"SystemInactiveShowCheck"); @@ -581,6 +807,12 @@ void yon_main_window_complete(main_window *widgets){ g_signal_connect(G_OBJECT(widgets->SessionStopButton),"clicked",G_CALLBACK(on_session_stop_clicked),widgets); g_signal_connect(G_OBJECT(widgets->SessionBlockButton),"clicked",G_CALLBACK(on_session_lock_clicked),widgets); + g_signal_connect(G_OBJECT(widgets->SystemServicesStatusMenuItem),"activate",G_CALLBACK(on_system_services_status),widgets); + g_signal_connect(G_OBJECT(widgets->UserServicesStatusMenuItem),"activate",G_CALLBACK(on_user_services_status),widgets); + g_signal_connect(G_OBJECT(widgets->InstalledUnitsStatusMenuItem),"activate",G_CALLBACK(on_units_status),widgets); + g_signal_connect(G_OBJECT(widgets->UnitsStatusListMenuItem),"activate",G_CALLBACK(on_units_list_status),widgets); + g_signal_connect(G_OBJECT(widgets->SocketsStatusListMenuItem),"activate",G_CALLBACK(on_sockets_list_status),widgets); + g_signal_connect(G_OBJECT(widgets->TimersStatusListMenuItem),"activate",G_CALLBACK(on_timers_list_status),widgets); // g_signal_connect(G_OBJECT(widgets->SystemUnitsTree),"button-press-event",G_CALLBACK(on_context_menu_open),widgets); g_signal_connect(G_OBJECT(g_list_nth_data(list,0)),"notify::width",G_CALLBACK(on_column_resize),widgets); diff --git a/source/ubl-settings-services.h b/source/ubl-settings-services.h index e18506a..a5677c3 100644 --- a/source/ubl-settings-services.h +++ b/source/ubl-settings-services.h @@ -23,8 +23,7 @@ #define _(String) gettext(String) #define glade_path "/com/ublinux/ui/ubl-settings-services.glade" -#define glade_path_terminal "/com/ublinux/ui/ubl-settings-services-terminal.glade" -#define glade_path_log "/com/ublinux/ui/ubl-settings-services-log.glade" +#define glade_path_log "/com/ublinux/ui/ubl-settings-services-terminal.glade" #define banner_path "/com/ublinux/images/ubl-settings-services-banner.png" #define CssPath "/com/ublinux/css/ubl-settings-services.css" @@ -33,8 +32,8 @@ #define LocalePath "/usr/share/locale" #define LocaleName "ubl-settings-services" -#define load_services_command "systemctl list-units --type=service --type=socket --no-pager --all |grep -E \"^ \" |grep -v \"UNIT\" |sed -e 's/ */;/g' -e 's/^;//g' -e 's/running /running;/g' -e 's/inactive /inactive;/g'" -#define load_user_services_command yon_char_unite("systemctl --user --machine=",yon_ubl_root_user_get(),"@ list-units --type=service --type=socket --no-pager --all |grep -E \"^ \" |grep -v \"UNIT\" |sed -e 's/ */;/g' -e 's/^;//g'",NULL) +#define load_services_command "systemctl list-units --type=service --type=socket --no-pager --all --plain --no-legend |sed -E 's/(\\S+)\\s+(\\S+)\\s+(\\S+)\\s+(\\S+)\\s+(.*)/\\1;\\2;\\3;\\4;\\5/'" +#define load_user_services_command yon_char_unite("systemctl --user --machine=",yon_ubl_root_user_get(),"@ list-units --type=service --type=socket --no-pager --all --plain --no-legend |sed -E 's/(\\S+)\\s+(\\S+)\\s+(\\S+)\\s+(\\S+)\\s+(.*)/\\1;\\2;\\3;\\4;\\5/'",NULL) #define load_system_services_command "systemctl --system list-units --type=service --type=socket --no-pager --all |grep -E \"^ \" |grep -v \"UNIT\" |sed -e 's/ */;/g' -e 's/^;//g' |cut -f1 -d';'" #define load_enabled_command "systemctl list-unit-files --type=service --type=socket --no-pager --state=enabled --all |sed -e 's/ */:/g' -e 's/ *: */:/g'|cut -f1 -d:" #define load_launched_command "systemctl list-units --type=service --type=socket --no-pager --state=active --all --no-legend|sed -e 's/^ //g' -e 's/ */:/g' |cut -f1 -d:" @@ -42,13 +41,30 @@ #define service_stop_command(target) yon_char_append("systemctl stop --no-pager ",target) #define service_enable_command(target) yon_char_append("systemctl enable --no-pager ",target) #define service_disable_command(target) yon_char_append("systemctl disable --no-pager ",target) -#define service_info_command(target) yon_char_append("systemctl status -l --no-pager ",target) #define service_kill_command(target) yon_char_append("systemctl kill ",target) #define service_check_active_command(target) yon_char_append("systemctl is-active ",target) -#define start_log_command(target) yon_char_append("journalctl --all --no-pager --unit ",target) +#define service_info_command(target) yon_char_append("systemctl status -l --no-pager ",target) +#define get_log_command(target) yon_char_append("journalctl --all --no-pager --unit ",target) +#define show_source_command(target) yon_char_append("systemctl edit --full ",target) +#define properties_command(target) yon_char_append("systemctl show --no-pager ",target) + +#define get_config_files_command "find /etc/systemd -iname *.conf -exec du -sh --time {} \\;|sed -e 's/\t/;/g'" + +#define system_services_status_command "systemctl status --no-pager" +#define user_services_status_command yon_char_unite("systemctl --user --machine=",yon_ubl_root_user_get()," status --no-pager",NULL) +#define installed_units_states_command "systemctl list-unit-files --no-pager" +#define list_of_units_states_command "systemctl list-units --all --no-pager" +#define list_of_sockets_states_command "systemctl list-sockets --all --no-pager" +#define list_of_timers_states_command "systemctl list-timers --all --no-pager" -#define get_config_files_command "find /etc/systemd -iname *.conf -exec du -sh --time {} \\;" +#define installed_units_command "systemctl list-unit-files --no-pager| sed -e 's/ */;/g'" +#define list_of_units_command "systemctl list-units --all --no-pager| sed -e 's/ */;/g'" +#define list_of_sockets_command "systemctl list-sockets --all --no-pager| sed -e 's/ */;/g'" +#define list_of_timers_command "systemctl list-timers --all --no-pager| sed -e 's/ */;/g'" +#define list_of_session_command "while IFS=\" \" read -r GET_SESSION GET_UID GET_USER GET_SEAT GET_TTY; do echo -e \"${GET_SESSION} $(loginctl session-status ${GET_SESSION} --no-page | sed -Enr \"s/^\\s*State: (.*)$/\1/p\") ${GET_UID} ${GET_USER} ${GET_SEAT} ${GET_TTY}\"; done < <(loginctl list-sessions --no-legend)" + +#define config_get_command(target) yon_char_append("cat ",target) #define config_get_local_command "ubconfig --source system get system SERVICES_ENABLE SERVICES_DISABLE SERVICES_MASK" #define config_get_global_command "ubconfig --source global get system SERVICES_ENABLE SERVICES_DISABLE SERVICES_MASK" @@ -152,6 +168,13 @@ typedef struct { GtkWidget *TimersMainTree; GtkWidget *MainNotebook; + GtkWidget *SystemServicesStatusMenuItem; + GtkWidget *UserServicesStatusMenuItem; + GtkWidget *InstalledUnitsStatusMenuItem; + GtkWidget *UnitsStatusListMenuItem; + GtkWidget *SocketsStatusListMenuItem; + GtkWidget *TimersStatusListMenuItem; + } main_window; @@ -186,10 +209,13 @@ typedef struct{ typedef struct { GtkWidget *Window; GtkWidget *SystemTerminal; + GtkWidget *TerminalScroll; GtkWidget *TextEditor; GtkWidget *webHeaderNameLabel; GtkWidget *UpdateButton; GtkWidget *SaveButton; + GtkWidget *StatusBox; + GtkAdjustment *adjustment; char *target; } log_window; @@ -207,6 +233,18 @@ void on_service_constant_update(); log_window *yon_log_window_new(); +void on_system_services_status(GtkWidget *self, main_window *widgets); + +void on_user_services_status(GtkWidget *self, main_window *widgets); + +void on_units_status(GtkWidget *self, main_window *widgets); + +void on_units_list_status(GtkWidget *self, main_window *widgets); + +void on_sockets_list_status(GtkWidget *self, main_window *widgets); + +void on_timers_list_status(GtkWidget *self, main_window *widgets); + gboolean yon_interface_update(main_window *widgets); GtkWidget *yon_menu_button_create(char *icon_name, char *text); @@ -248,12 +286,17 @@ void yon_user_systemd_restart(GtkWidget *self, main_window *widgets); void on_system_update_hz_clicked(GtkWidget *self, main_window *widgets); +void yon_system_systemd_reexec(GtkWidget *self, main_window *widgets); + void on_system_update_clicked(GtkWidget *self, main_window *widgets); void on_system_info_clicked(GtkWidget *self, main_window *widgets); void on_system_log_clicked(GtkWidget *self, main_window *widgets); +void *on_terminal_relaunch(log_window *window); +void on_save_clicked(GtkWidget *self, log_window *window); +void on_update_clicked(GtkWidget *self, log_window *window); void on_system_edit_clicked(GtkWidget *self, main_window *widgets); void on_system_status_clicked(GtkWidget *self, main_window *widgets); diff --git a/source/ubl-strings.h b/source/ubl-strings.h index 44ff2ce..551fe33 100644 --- a/source/ubl-strings.h +++ b/source/ubl-strings.h @@ -52,5 +52,9 @@ #define END_SESSION_LABEL _("End session") #define BLOCK_SESSION_LABEL _("Block session") +#define SOURCE_UNFOUND_LABEL _("Service source were not loaded") + +#define SAVING_LABEL _("Saving...") + #define SWITCH_OFF_ERROR_LABEL _("Service were not stopped") #define STOP_SERVICE_WARMING_LABEL(target) yon_char_unite(_("Are you sure want to stop "),target,"?\n",_("The stop will be forced.\nThe system may become unstable."),NULL) \ No newline at end of file diff --git a/ubl-settings-services-log.glade b/ubl-settings-services-log.glade deleted file mode 100644 index 0715261..0000000 --- a/ubl-settings-services-log.glade +++ /dev/null @@ -1,172 +0,0 @@ - - - - - - - - 100 - 1 - 10 - - - 800 - 600 - False - com.ublinux.ubl-settings-usergroups - - - True - False - 5 - 5 - 5 - 5 - 5 - - - True - False - vertical - 5 - - - True - True - True - Update - image1 - - - - False - True - 0 - - - - - True - True - True - Update - image2 - - - - False - True - 1 - - - - - False - True - 0 - - - - - True - False - - - True - True - always - always - in - - - True - False - - - True - False - vertical - - - True - - - False - True - 0 - - - - - True - False - True - natural - adjustment1 - natural - UTF-8 - True - 0 - True - False - - - True - True - 1 - - - - - - - - - True - True - 0 - - - - - True - True - 1 - - - - - - - True - False - True - - - True - False - Services and processes - service information - - - - - - - - - - True - False - com.ublinux.ubl-settings-services.sync-symbolic - - - True - False - document-save-symbolic - - - diff --git a/ubl-settings-services-terminal.glade b/ubl-settings-services-terminal.glade index a8ab008..44063f1 100644 --- a/ubl-settings-services-terminal.glade +++ b/ubl-settings-services-terminal.glade @@ -14,6 +14,12 @@ False com.ublinux.ubl-settings-services.sync-symbolic + + True + False + document-save-symbolic + + 800 600 @@ -23,50 +29,14 @@ True False - 5 - 5 - 5 - 5 - 5 + vertical - + True False vertical - 5 - - True - True - True - Update - image1 - - - - False - True - 0 - - - - - True - True - True - Update - image2 - - - - False - True - 1 - + @@ -79,35 +49,126 @@ True False + 5 + 5 + 5 + 5 5 - + True - False - True - natural - adjustment1 - natural - UTF-8 - 0 - True - False + False + vertical + 5 + + + True + True + True + Update + image1 + + + + False + True + 0 + + + + + True + True + Update + image2 + + + + False + True + 1 + + - True + False True 0 - + True False - vertical - adjustment1 + 5 + + + True + False + + + True + False + True + natural + adjustment1 + natural + UTF-8 + 0 + True + False + + + True + True + 0 + + + + + True + False + vertical + adjustment1 + + + False + True + 1 + + + + + True + True + 0 + + + + + True + in + + + True + True + textbuffer1 + + + + + True + True + 2 + + - False + True True 1 @@ -139,9 +200,4 @@ - - True - False - document-save-symbolic - diff --git a/ubl-settings-services.glade b/ubl-settings-services.glade index 445165c..508fb87 100644 --- a/ubl-settings-services.glade +++ b/ubl-settings-services.glade @@ -167,7 +167,7 @@ True False - + True False System services status @@ -175,7 +175,7 @@ - + True False User services status @@ -183,7 +183,7 @@ - + True False Installed unit files @@ -191,7 +191,7 @@ - + True False Units and status list @@ -199,7 +199,7 @@ - + True False Sockets and status list @@ -207,7 +207,7 @@ - + True False Timers and status list @@ -1316,51 +1316,57 @@ 0 in - + True True - ConfigList - - - - - True - fixed - 10 - File + + True + True + ConfigList + + + - - - 0 - + + True + fixed + 10 + File + + + + 0 + + + - - - - - True - fixed - 10 - Change date - - - 1 - + + True + fixed + 10 + Change date + + + + 1 + + + - - - - - 10 - Description - True - - - 2 - + + 10 + Description + True + + + + 2 + + + @@ -1469,79 +1475,85 @@ 0 in - + True True - SessionsList - - - - - True - fixed - 10 - Session ID + + True + True + SessionsList + + + - - - 0 - + + True + fixed + 10 + Session ID + + + + 0 + + + - - - - - True - fixed - 10 - Status - - - 1 - + + True + fixed + 10 + Status + + + + 1 + + + - - - - - True - fixed - 10 - User ID - - - 2 - + + True + fixed + 10 + User ID + + + + 2 + + + - - - - - True - fixed - 10 - User name - - - 3 - + + True + fixed + 10 + User name + + + + 3 + + + - - - - - 10 - Seat ID - True - - - 4 - + + 10 + Seat ID + True + + + + 4 + + + @@ -1589,93 +1601,99 @@ 0.019999999552965164 in - + True True - TimersList - - - - - True - fixed - 10 - Timer + + True + True + TimersList + + + - - - 0 - + + True + fixed + 10 + Timer + + + + 0 + + + - - - - - True - fixed - 10 - Next - - - 1 - + + True + fixed + 10 + Next + + + + 1 + + + - - - - - True - fixed - 10 - Previous - - - 2 - + + True + fixed + 10 + Previous + + + + 2 + + + - - - - - True - fixed - 10 - Last - - - 3 - + + True + fixed + 10 + Last + + + + 3 + + + - - - - - True - fixed - 10 - Passed - - - 4 - + + True + fixed + 10 + Passed + + + + 4 + + + - - - - - 10 - Activates - True - - - 5 - + + 10 + Activates + True + + + + 5 + + + From 87282e7e0d5c3587647699160a8bebd9824f5d16 Mon Sep 17 00:00:00 2001 From: Ivan Yarcev Date: Tue, 26 Mar 2024 18:26:44 +0600 Subject: [PATCH 04/31] timers loading test --- source/CMakeLists.txt | 8 +- source/ubl-settings-services.c | 161 +++++++++++++++++++++++++++------ source/ubl-settings-services.h | 8 ++ source/ubl-strings.h | 2 + 4 files changed, 151 insertions(+), 28 deletions(-) diff --git a/source/CMakeLists.txt b/source/CMakeLists.txt index 6469d42..b4d98a2 100644 --- a/source/CMakeLists.txt +++ b/source/CMakeLists.txt @@ -13,6 +13,11 @@ include_directories(${VTE291_INCLUDE_DIRS}) link_directories(${VTE291_LIBRARY_DIRS}) add_definitions(${VTE291_CFLAGS_OTHER}) +pkg_check_modules(JSON REQUIRED json-c) +include_directories(${JSON_INCLUDE_DIRS}) +link_directories(${JSON_LIBRARY_DIRS}) +add_definitions(${JSON_CFLAGS_OTHER}) + find_library(WEBKIT_LIBRARIES_FOUND webkit2gtk-4.0 webkit2gtk-web-extension-4.0) if(WEBKIT_LIBRARIES_FOUND) @@ -75,7 +80,8 @@ set(LIBRARIES ${GTK_LIBRARIES} ${WEBKIT_LIBRARIES} ${UTILS_LIBRARIES} - ${VTE291_LIBRARIES} + ${VTE291_LIBRARIES} + ${JSON_LIBRARIES} pthread ublsettings ublsettings-gtk3 diff --git a/source/ubl-settings-services.c b/source/ubl-settings-services.c index 8b464be..c7db282 100644 --- a/source/ubl-settings-services.c +++ b/source/ubl-settings-services.c @@ -339,21 +339,26 @@ void on_system_unloaded_toggled(GtkWidget *self, main_window *widgets){ } void on_user_update_hz_clicked(GtkWidget *self, main_window *widgets){ - if (self){} - if (widgets){ - // log_window *window = yon_log_window_new(); - - // gtk_widget_show(window->Window); - } + if (self){} + if (widgets){ + dialog_confirmation_data *data = malloc(sizeof(dialog_confirmation_data)); + data->action_text = "Are you sure?"; + data->data = widgets; + data->function = (data_function)yon_system_systemd_restart; + yon_confirmation_dialog_call(self,data); + + } } void on_user_update_clicked(GtkWidget *self, main_window *widgets){ if (self){} if (widgets){ - log_window *window = yon_log_window_new(); - - gtk_widget_show(window->Window); + dialog_confirmation_data *data = malloc(sizeof(dialog_confirmation_data)); + data->action_text = "Are you sure?"; + data->data = widgets; + data->function = (data_function)yon_system_systemd_reexec; + yon_confirmation_dialog_call(self,data); } } @@ -361,9 +366,16 @@ void on_user_update_clicked(GtkWidget *self, main_window *widgets){ void on_user_info_clicked(GtkWidget *self, main_window *widgets){ if (self){} if (widgets){ - log_window *window = yon_log_window_new(); - - gtk_widget_show(window->Window); + GtkTreeIter iter; + GtkTreeModel *model = GTK_TREE_MODEL(widgets->UserList); + if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->UserUnitsTree)),&model,&iter)){ + char *name; + gtk_tree_model_get(model,&iter,5,&name,-1); + log_window *window = yon_log_window_new(); + window->target = user_service_info_command(name); + yon_terminal_integrated_start(window->SystemTerminal,window->target,NULL,NULL); + gtk_widget_show(window->Window); + } } } @@ -371,9 +383,16 @@ void on_user_info_clicked(GtkWidget *self, main_window *widgets){ void on_user_log_clicked(GtkWidget *self, main_window *widgets){ if (self){} if (widgets){ - log_window *window = yon_log_window_new(); - - gtk_widget_show(window->Window); + GtkTreeIter iter; + GtkTreeModel *model = GTK_TREE_MODEL(widgets->UserList); + if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->UserUnitsTree)),&model,&iter)){ + char *name; + gtk_tree_model_get(model,&iter,5,&name,-1); + log_window *window = yon_log_window_new(); + window->target = user_get_log_command(name); + yon_terminal_integrated_start(window->SystemTerminal,window->target,NULL,NULL); + gtk_widget_show(window->Window); + } } } @@ -381,9 +400,24 @@ void on_user_log_clicked(GtkWidget *self, main_window *widgets){ void on_user_edit_clicked(GtkWidget *self, main_window *widgets){ if (self){} if (widgets){ - log_window *window = yon_log_window_new(); - - gtk_widget_show(window->Window); + GtkTreeIter iter; + GtkTreeModel *model = GTK_TREE_MODEL(widgets->UserList); + if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->UserUnitsTree)),&model,&iter)){ + char *name; + gtk_tree_model_get(model,&iter,5,&name,-1); + log_window *window = yon_log_window_new(); + gtk_widget_show(window->SaveButton); + window->target=user_show_source_command(name); + yon_terminal_integrated_start(window->SystemTerminal,window->target,NULL,NULL); + GdkRGBA rgba; + rgba.blue=1; + rgba.green=1; + rgba.red=1; + vte_terminal_set_color_cursor(VTE_TERMINAL(window->SystemTerminal),&rgba); + gtk_widget_set_sensitive(window->SystemTerminal,1); + g_signal_connect(G_OBJECT(window->SaveButton),"clicked",G_CALLBACK(on_save_clicked),window); + gtk_widget_show(window->Window); + } } } @@ -391,9 +425,17 @@ void on_user_edit_clicked(GtkWidget *self, main_window *widgets){ void on_user_status_clicked(GtkWidget *self, main_window *widgets){ if (self){} if (widgets){ - log_window *window = yon_log_window_new(); + GtkTreeIter iter; + GtkTreeModel *model = GTK_TREE_MODEL(widgets->UserList); + if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->UserUnitsTree)),&model,&iter)){ + char *name; + gtk_tree_model_get(model,&iter,5,&name,-1); + log_window *window = yon_log_window_new(); + window->target = user_properties_command(name); + yon_terminal_integrated_start(window->SystemTerminal,window->target,NULL,NULL); + gtk_widget_show(window->Window); + } - gtk_widget_show(window->Window); } } @@ -438,24 +480,43 @@ void on_user_unloaded_toggled(GtkWidget *self, main_window *widgets){ } +void on_config_log_save(GtkWidget *self, log_window *window){ + if (self){}; + GtkTextIter start, end; + GtkTextBuffer *buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(window->TextEditor)); + gtk_text_buffer_get_end_iter(buffer,&end); + gtk_text_buffer_get_start_iter(buffer,&start); + char *text = gtk_text_buffer_get_text(buffer,&start,&end,1); + if (text){ + if (yon_file_save(window->target,text)){ + yon_ubl_status_box_render(SAVED_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE); + } else { + yon_ubl_status_box_render(ERROR_LABEL,BACKGROUND_IMAGE_FAIL_TYPE); + } + } +} + void on_config_edit_clicked(GtkWidget *self, main_window *widgets){ if (self){} if (widgets){ - log_window *window = yon_log_window_new(); - gtk_widget_hide(gtk_widget_get_parent(window->SystemTerminal)); - gtk_widget_show(gtk_widget_get_parent(window->TextEditor)); GtkTreeIter iter; GtkTreeModel *model = GTK_TREE_MODEL(widgets->ConfigList); if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->ConfigMainTree)),&model,&iter)){ + log_window *window = yon_log_window_new(); + gtk_widget_hide(gtk_widget_get_parent(window->SystemTerminal)); + gtk_widget_show(gtk_widget_get_parent(window->TextEditor)); + gtk_widget_show(window->SaveButton); char *name; gtk_tree_model_get(model,&iter,0,&name,-1); int size; + window->target = name; config_str parsed = yon_config_load(config_get_command(name),&size); char *text = yon_char_parsed_to_string(parsed,size,""); gtk_text_buffer_set_text(gtk_text_view_get_buffer(GTK_TEXT_VIEW(window->TextEditor)),text,-1); + g_signal_connect(G_OBJECT(window->SaveButton),"clicked",G_CALLBACK(on_config_log_save),window); + gtk_widget_show(window->Window); } - gtk_widget_show(window->Window); } } @@ -573,9 +634,9 @@ gboolean yon_interface_update(main_window *widgets){ config_str config_files = yon_config_load(get_config_files_command,&config_size); int sessions_size; config_str sessions = yon_config_load(list_of_session_command,&sessions_size); - // int timers_size; - // config_str timers = yon_config_load(list_of_timers_command,&timers_size); - + int timers_size; + config_str timers = yon_config_load(get_timers_command,&timers_size); + struct json_object *jsobject = json_tokener_parse(timers[0]); for (int i=0; iSessionsList,&iter,0,atoi(parsed[0]),1,atoi(parsed[1]),2,parsed[2],3,parsed[3],4,parsed[4],-1); } } + for (size_t i=0;iTimersList,&iter); + GDateTime *datetime = g_date_time_new_from_unix_local(atoi(next)); + next = g_date_time_format(datetime,"%Y.%m.%d H:M:s"); + g_date_time_unref(datetime); + datetime = g_date_time_new_from_unix_local(atoi(left)); + left = g_date_time_format(datetime,"%Y.%m.%d H:M:s"); + g_date_time_unref(datetime); + datetime = g_date_time_new_from_unix_local(atoi(last)); + last = g_date_time_format(datetime,"%Y.%m.%d H:M:s"); + g_date_time_unref(datetime); + gtk_list_store_set(widgets->TimersList,&iter,0,unit,1,next,2,left,3,last,4,passed,5,activates,-1); + } } return 0; } diff --git a/source/ubl-settings-services.h b/source/ubl-settings-services.h index a5677c3..54f1f32 100644 --- a/source/ubl-settings-services.h +++ b/source/ubl-settings-services.h @@ -13,6 +13,7 @@ #include #include #include +#include #ifdef WEBKIT_FOUND #include #endif @@ -49,6 +50,11 @@ #define show_source_command(target) yon_char_append("systemctl edit --full ",target) #define properties_command(target) yon_char_append("systemctl show --no-pager ",target) +#define user_service_info_command(target) yon_char_unite("systemctl --user --machine=",yon_ubl_root_user_get(),"@ status -l --no-pager ",target,NULL) +#define user_get_log_command(target) yon_char_unite("usermod -a -G systemd-journal ",yon_ubl_root_user_get(),";journalctl --user -u --all --no-pager --unit ",target,NULL) +#define user_show_source_command(target) yon_char_unite("systemctl edit --full ",target,NULL) +#define user_properties_command(target) yon_char_unite("systemctl --user --machine=",yon_ubl_root_user_get(),"@ show --no-pager ",target,NULL) + #define get_config_files_command "find /etc/systemd -iname *.conf -exec du -sh --time {} \\;|sed -e 's/\t/;/g'" #define system_services_status_command "systemctl status --no-pager" @@ -57,6 +63,7 @@ #define list_of_units_states_command "systemctl list-units --all --no-pager" #define list_of_sockets_states_command "systemctl list-sockets --all --no-pager" #define list_of_timers_states_command "systemctl list-timers --all --no-pager" +#define get_timers_command "systemctl list-timers --all --no-pager --plain --no-legend --output=json" #define installed_units_command "systemctl list-unit-files --no-pager| sed -e 's/ */;/g'" #define list_of_units_command "systemctl list-units --all --no-pager| sed -e 's/ */;/g'" @@ -329,6 +336,7 @@ void on_user_inactive_toggled(GtkWidget *self, main_window *widgets); void on_user_unloaded_toggled(GtkWidget *self, main_window *widgets); +void on_config_log_save(GtkWidget *self, log_window *window); void on_config_edit_clicked(GtkWidget *self, main_window *widgets); void on_session_start_clicked(GtkWidget *self, main_window *widgets); diff --git a/source/ubl-strings.h b/source/ubl-strings.h index 551fe33..78d001d 100644 --- a/source/ubl-strings.h +++ b/source/ubl-strings.h @@ -55,6 +55,8 @@ #define SOURCE_UNFOUND_LABEL _("Service source were not loaded") #define SAVING_LABEL _("Saving...") +#define SAVED_LABEL _("Saved") +#define ERROR_LABEL _("Error has occured") #define SWITCH_OFF_ERROR_LABEL _("Service were not stopped") #define STOP_SERVICE_WARMING_LABEL(target) yon_char_unite(_("Are you sure want to stop "),target,"?\n",_("The stop will be forced.\nThe system may become unstable."),NULL) \ No newline at end of file From 7f2753d726616230d65d227d176e9a1681c7c4bc Mon Sep 17 00:00:00 2001 From: Ivan Yarcev Date: Wed, 27 Mar 2024 17:44:34 +0600 Subject: [PATCH 05/31] Localisation. Loading and saving return (WIP); services config interactions; Fixes of tables fulling --- source/ubl-settings-services.c | 438 ++++++++++++++++++++++++++++----- source/ubl-settings-services.h | 28 ++- source/ubl-strings.h | 56 ++++- ubl-settings-services.glade | 44 ++-- ubl-settings-services.pot | 340 ++++++++++++++++++------- ubl-settings-services_ru.po | 343 +++++++++++++++++++------- 6 files changed, 982 insertions(+), 267 deletions(-) diff --git a/source/ubl-settings-services.c b/source/ubl-settings-services.c index c7db282..55621b9 100644 --- a/source/ubl-settings-services.c +++ b/source/ubl-settings-services.c @@ -60,37 +60,211 @@ void on_config_global_save(){ } -void on_config_autostart_clicked(){ - -} - void on_activate(GtkTreeView *self, main_window *widgets){ if (self&&widgets){}; } +void on_config_autostart_clicked(GtkWidget *self, main_window *widgets){ + if (self){}; + GtkTreeIter iter; + GtkTreeModel *model; + GtkWidget *Tree; + if (gtk_notebook_get_current_page(GTK_NOTEBOOK(widgets->MainNotebook))==0){ + model = GTK_TREE_MODEL(widgets->SystemList); + Tree = widgets->SystemUnitsTree; + } else { + model = GTK_TREE_MODEL(widgets->UserList); + Tree = widgets->UserUnitsTree; + } + if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(Tree)),&model,&iter)){ + gboolean status = 0; + char *name; + gtk_tree_model_get(model,&iter,0,&status,5,&name,-1); + char *parsed_name = yon_char_divide(name, yon_char_find_last(name,'.')); + free(name); + name=parsed_name; + gtk_list_store_set(GTK_LIST_STORE(model),&iter,0,!status,-1); + char *config_sting = yon_config_get_by_key("SERVICES_ENABLE"); + int size; + config_str parsed = yon_char_parse(config_sting,&size,","); + int place = yon_char_parsed_check_exist(parsed,size,name); + if (status==0){ + if (place ==-1){ + if (!yon_config_append("SERVICES_ENABLE",name,",")){ + yon_config_register("SERVICES_ENABLE",SERVICES_ENABLE_get_command,name); + } + } + } else { + if (place !=-1){ + parsed = yon_char_parsed_rip(parsed,&size,place); + if (parsed) + yon_config_set("SERVICES_ENABLE",yon_char_parsed_to_string(parsed,size,",")); + else yon_config_remove_by_key("SERVICES_ENABLE"); + } + } + yon_char_parsed_free(parsed,size); + } +} -void on_config_autostop_clicked(){ +void on_config_autostop_clicked(GtkWidget *self, main_window *widgets){ + if (self){}; + GtkTreeIter iter; + GtkTreeModel *model; + GtkWidget *Tree; + if (gtk_notebook_get_current_page(GTK_NOTEBOOK(widgets->MainNotebook))==0){ + model = GTK_TREE_MODEL(widgets->SystemList); + Tree = widgets->SystemUnitsTree; + } else { + model = GTK_TREE_MODEL(widgets->UserList); + Tree = widgets->UserUnitsTree; + } + if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(Tree)),&model,&iter)){ + gboolean status = 0; + char *name; + gtk_tree_model_get(model,&iter,1,&status,5,&name,-1); + char *parsed_name = yon_char_divide(name, yon_char_find_last(name,'.')); + free(name); + name=parsed_name; + gtk_list_store_set(GTK_LIST_STORE(model),&iter,1,!status,-1); + char *config_sting = yon_config_get_by_key("SERVICES_DISABLE"); + int size; + config_str parsed = yon_char_parse(config_sting,&size,","); + int place = yon_char_parsed_check_exist(parsed,size,name); + if (status==0){ + if (place ==-1){ + if (!yon_config_append("SERVICES_DISABLE",name,",")){ + yon_config_register("SERVICES_DISABLE",SERVICES_DISABLE_get_command,name); + } + } + } else { + if (place !=-1){ + parsed = yon_char_parsed_rip(parsed,&size,place); + if (parsed) + yon_config_set("SERVICES_DISABLE",yon_char_parsed_to_string(parsed,size,",")); + else yon_config_remove_by_key("SERVICES_DISABLE"); + } + } + yon_char_parsed_free(parsed,size); + } } -void on_config_block_clicked(){ +void on_config_block_clicked(GtkWidget *self, main_window *widgets){ + if (self){}; + GtkTreeIter iter; + GtkTreeModel *model; + GtkWidget *Tree; + if (gtk_notebook_get_current_page(GTK_NOTEBOOK(widgets->MainNotebook))==0){ + model = GTK_TREE_MODEL(widgets->SystemList); + Tree = widgets->SystemUnitsTree; + } else { + model = GTK_TREE_MODEL(widgets->UserList); + Tree = widgets->UserUnitsTree; + } + if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(Tree)),&model,&iter)){ + gboolean status = 0; + char *name; + gtk_tree_model_get(model,&iter,2,&status,5,&name,-1); + char *parsed_name = yon_char_divide(name, yon_char_find_last(name,'.')); + free(name); + name=parsed_name; + gtk_list_store_set(GTK_LIST_STORE(model),&iter,2,!status,-1); + char *config_sting = yon_config_get_by_key("SERVICES_MASK"); + int size; + config_str parsed = yon_char_parse(config_sting,&size,","); + int place = yon_char_parsed_check_exist(parsed,size,name); + if (status==0){ + if (place ==-1){ + if (!yon_config_append("SERVICES_MASK",name,",")){ + yon_config_register("SERVICES_MASK",SERVICES_MASK_get_command,name); + } + } + } else { + if (place !=-1){ + parsed = yon_char_parsed_rip(parsed,&size,place); + if (parsed) + yon_config_set("SERVICES_MASK",yon_char_parsed_to_string(parsed,size,",")); + else yon_config_remove_by_key("SERVICES_MASK"); + } + } + yon_char_parsed_free(parsed,size); + } } -void on_system_autostart_clicked(){ +void on_system_autostart_clicked(GtkWidget *self, main_window *widgets){ + if (self){}; + GtkTreeIter iter; + GtkTreeModel *model; + GtkWidget *Tree; + if (gtk_notebook_get_current_page(GTK_NOTEBOOK(widgets->MainNotebook))==0){ + model = GTK_TREE_MODEL(widgets->SystemList); + Tree = widgets->SystemUnitsTree; + } else { + model = GTK_TREE_MODEL(widgets->UserList); + Tree = widgets->UserUnitsTree; + } + if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(Tree)),&model,&iter)){ + gboolean status = 0; + char *service_name; + gtk_tree_model_get(model,&iter,3,&status,5,&service_name,-1); + gtk_list_store_set(GTK_LIST_STORE(model),&iter,3,!status,-1); + yon_launch((!status)==1 ? service_enable_command(service_name) : \ + service_disable_command(service_name)); + } } void on_system_kill_confirmed(GtkWidget *self,char *service_name){ - if (self&&service_name){}; - + if (self){}; + char *command = service_kill_command(service_name); + yon_launch(command); } -void on_system_launch_clicked(){ +void on_system_launch_clicked(GtkWidget *self, main_window *widgets){ + if (self){}; + GtkTreeIter iter; + GtkTreeModel *model; + GtkWidget *Tree; + if (gtk_notebook_get_current_page(GTK_NOTEBOOK(widgets->MainNotebook))==0){ + model = GTK_TREE_MODEL(widgets->SystemList); + Tree = widgets->SystemUnitsTree; + } else { + model = GTK_TREE_MODEL(widgets->UserList); + Tree = widgets->UserUnitsTree; + } + if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(Tree)),&model,&iter)){ + gboolean status = 0; + char *service_name; + gtk_tree_model_get(model,&iter,4,&status,5,&service_name,-1); + yon_launch((!status)==1 ? service_start_command(service_name) : \ + service_stop_command(service_name)); + int size; + config_str result = yon_config_load(service_check_active_command(service_name),&size); + yon_char_remove_last_symbol(result[0],'\n'); + if (size>0){ + if (!strcmp(result[0],"active")){ + if (status){ + dialog_confirmation_data data; + data.action_text=STOP_SERVICE_WARMING_LABEL(service_name); + data.function=(void*)(void*)on_system_kill_confirmed; + data.data=service_name; + int answer = yon_confirmation_dialog_call(self,&data); + if (answer) + gtk_list_store_set(GTK_LIST_STORE(model),&iter,4,0,-1); + } else { + gtk_list_store_set(GTK_LIST_STORE(model),&iter,4,1,-1); + } + } else { + gtk_list_store_set(GTK_LIST_STORE(model),&iter,4,0,-1); + } + } + yon_char_parsed_free(result,size); + } } -void on_system_restart_clicked(){ - +void on_system_restart_clicked(GtkWidget *self, main_window *widgets){ + if (self&&widgets){}; } void on_source_show(){ @@ -301,9 +475,7 @@ void on_system_status_clicked(GtkWidget *self, main_window *widgets){ void on_system_filter_changed(GtkWidget *self, main_window *widgets){ if (self){} if (widgets){ - log_window *window = yon_log_window_new(); - - gtk_widget_show(window->Window); + } } @@ -311,9 +483,7 @@ void on_system_filter_changed(GtkWidget *self, main_window *widgets){ void on_system_search(GtkWidget *self, main_window *widgets){ if (self){} if (widgets){ - log_window *window = yon_log_window_new(); - - gtk_widget_show(window->Window); + } } @@ -321,9 +491,7 @@ void on_system_search(GtkWidget *self, main_window *widgets){ void on_system_inactive_toggled(GtkWidget *self, main_window *widgets){ if (self){} if (widgets){ - log_window *window = yon_log_window_new(); - - gtk_widget_show(window->Window); + } } @@ -331,9 +499,7 @@ void on_system_inactive_toggled(GtkWidget *self, main_window *widgets){ void on_system_unloaded_toggled(GtkWidget *self, main_window *widgets){ if (self){} if (widgets){ - log_window *window = yon_log_window_new(); - - gtk_widget_show(window->Window); + } } @@ -443,9 +609,7 @@ void on_user_status_clicked(GtkWidget *self, main_window *widgets){ void on_user_filter_changed(GtkWidget *self, main_window *widgets){ if (self){} if (widgets){ - log_window *window = yon_log_window_new(); - - gtk_widget_show(window->Window); + } } @@ -453,9 +617,7 @@ void on_user_filter_changed(GtkWidget *self, main_window *widgets){ void on_user_search(GtkWidget *self, main_window *widgets){ if (self){} if (widgets){ - log_window *window = yon_log_window_new(); - - gtk_widget_show(window->Window); + } } @@ -463,9 +625,7 @@ void on_user_search(GtkWidget *self, main_window *widgets){ void on_user_inactive_toggled(GtkWidget *self, main_window *widgets){ if (self){} if (widgets){ - log_window *window = yon_log_window_new(); - - gtk_widget_show(window->Window); + } } @@ -473,9 +633,7 @@ void on_user_inactive_toggled(GtkWidget *self, main_window *widgets){ void on_user_unloaded_toggled(GtkWidget *self, main_window *widgets){ if (self){} if (widgets){ - log_window *window = yon_log_window_new(); - - gtk_widget_show(window->Window); + } } @@ -524,9 +682,6 @@ void on_config_edit_clicked(GtkWidget *self, main_window *widgets){ void on_session_start_clicked(GtkWidget *self, main_window *widgets){ if (self){} if (widgets){ - log_window *window = yon_log_window_new(); - - gtk_widget_show(window->Window); } } @@ -534,9 +689,7 @@ void on_session_start_clicked(GtkWidget *self, main_window *widgets){ void on_session_stop_clicked(GtkWidget *self, main_window *widgets){ if (self){} if (widgets){ - log_window *window = yon_log_window_new(); - - gtk_widget_show(window->Window); + } } @@ -544,9 +697,6 @@ void on_session_stop_clicked(GtkWidget *self, main_window *widgets){ void on_session_lock_clicked(GtkWidget *self, main_window *widgets){ if (self){} if (widgets){ - log_window *window = yon_log_window_new(); - - gtk_widget_show(window->Window); } @@ -626,6 +776,11 @@ void on_timers_list_status(GtkWidget *self, main_window *widgets){ gboolean yon_interface_update(main_window *widgets){ if (widgets){ + gtk_tree_view_set_model(GTK_TREE_VIEW(widgets->SystemUnitsTree),NULL); + gtk_tree_view_set_model(GTK_TREE_VIEW(widgets->UserUnitsTree),NULL); + gtk_tree_view_set_model(GTK_TREE_VIEW(widgets->ConfigMainTree),NULL); + gtk_tree_view_set_model(GTK_TREE_VIEW(widgets->SessionMainTree),NULL); + gtk_tree_view_set_model(GTK_TREE_VIEW(widgets->TimersMainTree),NULL); int system_size; config_str system_services = yon_config_load(load_services_command,&system_size); int user_size; @@ -642,7 +797,7 @@ gboolean yon_interface_update(main_window *widgets){ if (system_services[i][strlen(system_services[i])-1]=='\n') system_services[i][strlen(system_services[i])-1] = '\0'; int size; config_str parsed = yon_char_parse(system_services[i],&size,";"); - if (parsed&&strstr(parsed[0],".service")){ + if (parsed){ gtk_list_store_append(widgets->SystemList,&iter); gtk_list_store_set(widgets->SystemList,&iter,4,strcmp(parsed[2],"active")?0:1,5,parsed[0],6,parsed[4],-1); } @@ -653,7 +808,7 @@ gboolean yon_interface_update(main_window *widgets){ if (user_services[i][strlen(user_services[i])-1]=='\n') user_services[i][strlen(user_services[i])-1] = '\0'; int size; config_str parsed = yon_char_parse(user_services[i],&size,";"); - if (strstr(parsed[0],".service")){ + if (parsed){ gtk_list_store_append(widgets->UserList,&iter); gtk_list_store_set(widgets->UserList,&iter,4,strcmp(parsed[2],"active")?0:1,5,parsed[0],6,parsed[4],-1); } @@ -675,14 +830,16 @@ gboolean yon_interface_update(main_window *widgets){ GtkTreeIter iter; int size; config_str parsed = yon_char_parse(sessions[i],&size," "); + if (!strcmp(parsed[1],"\001")) parsed[1]=ACTIVE_LABEL; + else parsed[1]=INACTIVE_LABEL; if (parsed&&size>4){ gtk_list_store_append(widgets->SessionsList,&iter); - gtk_list_store_set(widgets->SessionsList,&iter,0,atoi(parsed[0]),1,atoi(parsed[1]),2,parsed[2],3,parsed[3],4,parsed[4],-1); + gtk_list_store_set(widgets->SessionsList,&iter,0,atoi(parsed[0]),1,parsed[1],2,atoi(parsed[2]),3,parsed[3],4,parsed[4],-1); } } for (size_t i=0;iTimersList,&iter); - GDateTime *datetime = g_date_time_new_from_unix_local(atoi(next)); - next = g_date_time_format(datetime,"%Y.%m.%d H:M:s"); - g_date_time_unref(datetime); - datetime = g_date_time_new_from_unix_local(atoi(left)); - left = g_date_time_format(datetime,"%Y.%m.%d H:M:s"); - g_date_time_unref(datetime); - datetime = g_date_time_new_from_unix_local(atoi(last)); - last = g_date_time_format(datetime,"%Y.%m.%d H:M:s"); + GDateTime *datetime=NULL; + if (atol(next)!=0){ + datetime = g_date_time_new_from_unix_local(atol(next)/1000000); + next = g_date_time_format(datetime,"%Y.%m.%d %H:%M:%S"); + g_date_time_unref(datetime); + } else { + next=""; + } + if (atol(left)!=0){ + datetime = g_date_time_new_from_unix_local(atol(left)/1000000); + GDateTime *now = g_date_time_new_now_local(); + left = g_date_time_format(datetime,"%Y.%m.%d %H:%M:%S"); + gint64 left_microseconds = 0; + left_microseconds = g_date_time_difference(datetime,now); + left_microseconds/=1000000; + long days = (long)((left_microseconds/60)/60)/24; + long hours = (long)(left_microseconds/60)/60%60; + long minutes = (long)left_microseconds/60%60; + long seconds = (long)left_microseconds%60; g_date_time_unref(datetime); + left = yon_char_unite(days?yon_char_from_long(days):"",days?" ":"",days?DAYS_LABEL:"",days?" ":"",hours?yon_char_from_long(hours):"",hours?" ":"",hours?HOURS_LABEL:"",hours?" ":"",minutes?yon_char_from_long(minutes):"",minutes?" ":"",minutes?MINUTES_LABEL:"",minutes?" ":"",seconds?yon_char_from_long(seconds):"",seconds?" ":"",seconds?SECONDS_LABEL:"",NULL); + } else { + left=""; + } + if (atol(last)!=0){ + datetime = g_date_time_new_from_unix_local(atol(last)/1000000); + last = g_date_time_format(datetime,"%Y.%m.%d %H:%M:%S"); + g_date_time_unref(datetime); + } else { + last=""; + } + if (atol(passed)!=0){ + datetime = g_date_time_new_from_unix_local(atol(passed)/1000000); + passed = g_date_time_format(datetime,"%Y.%m.%d %H:%M:%S"); + g_date_time_unref(datetime); + } else { + passed=""; + } gtk_list_store_set(widgets->TimersList,&iter,0,unit,1,next,2,left,3,last,4,passed,5,activates,-1); } } + { + int parsed_size; + char *enabled = yon_config_get_by_key(SERVICES_ENABLE_PARAMETER); + config_str parsed = yon_char_parse(enabled,&parsed_size,","); + GtkTreeIter iter; + GtkTreeModel *model = GTK_TREE_MODEL(widgets->UserList); + + int valid = gtk_tree_model_get_iter_first(model,&iter); + for (;valid;valid=gtk_tree_model_iter_next(model,&iter)) + { + gtk_list_store_set(widgets->UserList,&iter,0,0,-1); + } + valid = gtk_tree_model_get_iter_first(model,&iter); + for (;valid;valid=gtk_tree_model_iter_next(model,&iter)) + { + char *name; + gtk_tree_model_get(model,&iter,5,&name,-1); + for (int i=0;iUserList,&iter,0,1,-1); + } + } + yon_char_parsed_free(parsed,parsed_size); + + char *disabled = yon_config_get_by_key(SERVICES_DISABLE_PARAMETER); + parsed = yon_char_parse(disabled,&parsed_size,","); + valid = gtk_tree_model_get_iter_first(model,&iter); + for (;valid;valid=gtk_tree_model_iter_next(model,&iter)) + { + gtk_list_store_set(widgets->UserList,&iter,1,0,-1); + } + valid = gtk_tree_model_get_iter_first(model,&iter); + for (;valid;valid=gtk_tree_model_iter_next(model,&iter)) + { + char *name; + gtk_tree_model_get(model,&iter,5,&name,-1); + for (int i=0;iUserList,&iter,1,1,-1); + } + } + yon_char_parsed_free(parsed,parsed_size); + + char *masked = yon_config_get_by_key(SERVICES_MASK_PARAMETER); + parsed = yon_char_parse(masked,&parsed_size,","); + valid = gtk_tree_model_get_iter_first(model,&iter); + for (;valid;valid=gtk_tree_model_iter_next(model,&iter)) + { + gtk_list_store_set(widgets->UserList,&iter,2,0,-1); + } + valid = gtk_tree_model_get_iter_first(model,&iter); + for (;valid;valid=gtk_tree_model_iter_next(model,&iter)) + { + char *name; + gtk_tree_model_get(model,&iter,5,&name,-1); + for (int i=0;iUserList,&iter,2,1,-1); + } + } + } + { + + int parsed_size; + char *enabled = yon_config_get_by_key(SERVICES_ENABLE_PARAMETER); + config_str parsed = yon_char_parse(enabled,&parsed_size,","); + GtkTreeIter iter; + GtkTreeModel *model = GTK_TREE_MODEL(widgets->UserList); + + int valid = gtk_tree_model_get_iter_first(model,&iter); + for (;valid;valid=gtk_tree_model_iter_next(model,&iter)) + { + gtk_list_store_set(widgets->UserList,&iter,0,0,-1); + } + valid = gtk_tree_model_get_iter_first(model,&iter); + for (;valid;valid=gtk_tree_model_iter_next(model,&iter)) + { + char *name; + gtk_tree_model_get(model,&iter,5,&name,-1); + for (int i=0;iUserList,&iter,0,1,-1); + } + } + yon_char_parsed_free(parsed,parsed_size); + + char *disabled = yon_config_get_by_key(SERVICES_DISABLE_PARAMETER); + parsed = yon_char_parse(disabled,&parsed_size,","); + valid = gtk_tree_model_get_iter_first(model,&iter); + for (;valid;valid=gtk_tree_model_iter_next(model,&iter)) + { + gtk_list_store_set(widgets->UserList,&iter,1,0,-1); + } + valid = gtk_tree_model_get_iter_first(model,&iter); + for (;valid;valid=gtk_tree_model_iter_next(model,&iter)) + { + char *name; + gtk_tree_model_get(model,&iter,5,&name,-1); + for (int i=0;iUserList,&iter,1,1,-1); + } + } + yon_char_parsed_free(parsed,parsed_size); + + char *masked = yon_config_get_by_key(SERVICES_MASK_PARAMETER); + parsed = yon_char_parse(masked,&parsed_size,","); + valid = gtk_tree_model_get_iter_first(model,&iter); + for (;valid;valid=gtk_tree_model_iter_next(model,&iter)) + { + gtk_list_store_set(widgets->UserList,&iter,2,0,-1); + } + valid = gtk_tree_model_get_iter_first(model,&iter); + for (;valid;valid=gtk_tree_model_iter_next(model,&iter)) + { + char *name; + gtk_tree_model_get(model,&iter,5,&name,-1); + for (int i=0;iUserList,&iter,2,1,-1); + } + } + } + gtk_tree_view_set_model(GTK_TREE_VIEW(widgets->SystemUnitsTree),GTK_TREE_MODEL(widgets->SystemList)); + gtk_tree_view_set_model(GTK_TREE_VIEW(widgets->UserUnitsTree),GTK_TREE_MODEL(widgets->UserList)); + gtk_tree_view_set_model(GTK_TREE_VIEW(widgets->ConfigMainTree),GTK_TREE_MODEL(widgets->ConfigList)); + gtk_tree_view_set_model(GTK_TREE_VIEW(widgets->SessionMainTree),GTK_TREE_MODEL(widgets->SessionsList)); + gtk_tree_view_set_model(GTK_TREE_VIEW(widgets->TimersMainTree),GTK_TREE_MODEL(widgets->TimersList)); return 0; } @@ -831,10 +1139,10 @@ void yon_main_window_complete(main_window *widgets){ AUTOSTART_LABEL,start_icon_path,on_system_autostart_clicked,widgets, LAUNCHED_LABEL,launch_icon_path,on_system_launch_clicked,widgets, RESTART_LABEL,update_icon_path,on_system_restart_clicked,widgets, - STATUS_LABEL,status_icon_path,on_status_show,widgets, - SHOW_LOG_LABEL,log_icon_path,on_log_show,widgets, - SHOW_SOURCE_LABEL,source_icon_path,on_source_show,widgets, - PROPERTIES_LABEL,properties_icon_path,on_properties_show,widgets, + STATUS_LABEL,status_icon_path,on_system_info_clicked,widgets, + SHOW_LOG_LABEL,log_icon_path,on_system_log_clicked,widgets, + SHOW_SOURCE_LABEL,source_icon_path,on_system_edit_clicked,widgets, + PROPERTIES_LABEL,properties_icon_path,on_system_status_clicked,widgets, NULL); widgets->UserSearchEntry=yon_gtk_builder_get_widget(builder,"UserSearchEntry"); @@ -860,10 +1168,10 @@ void yon_main_window_complete(main_window *widgets){ AUTOSTART_LABEL,start_icon_path,on_system_autostart_clicked,widgets, LAUNCHED_LABEL,launch_icon_path,on_system_launch_clicked,widgets, RESTART_LABEL,update_icon_path,on_system_restart_clicked,widgets, - STATUS_LABEL,status_icon_path,on_status_show,widgets, - SHOW_LOG_LABEL,log_icon_path,on_log_show,widgets, - SHOW_SOURCE_LABEL,source_icon_path,on_source_show,widgets, - PROPERTIES_LABEL,properties_icon_path,on_properties_show,widgets, + STATUS_LABEL,status_icon_path,on_user_info_clicked,widgets, + SHOW_LOG_LABEL,log_icon_path,on_user_log_clicked,widgets, + SHOW_SOURCE_LABEL,source_icon_path,on_user_edit_clicked,widgets, + PROPERTIES_LABEL,properties_icon_path,on_user_status_clicked,widgets, NULL); widgets->ConfigEditButton=yon_gtk_builder_get_widget(builder,"ConfigEditButton"); diff --git a/source/ubl-settings-services.h b/source/ubl-settings-services.h index 54f1f32..a7a710a 100644 --- a/source/ubl-settings-services.h +++ b/source/ubl-settings-services.h @@ -33,11 +33,11 @@ #define LocalePath "/usr/share/locale" #define LocaleName "ubl-settings-services" -#define load_services_command "systemctl list-units --type=service --type=socket --no-pager --all --plain --no-legend |sed -E 's/(\\S+)\\s+(\\S+)\\s+(\\S+)\\s+(\\S+)\\s+(.*)/\\1;\\2;\\3;\\4;\\5/'" -#define load_user_services_command yon_char_unite("systemctl --user --machine=",yon_ubl_root_user_get(),"@ list-units --type=service --type=socket --no-pager --all --plain --no-legend |sed -E 's/(\\S+)\\s+(\\S+)\\s+(\\S+)\\s+(\\S+)\\s+(.*)/\\1;\\2;\\3;\\4;\\5/'",NULL) -#define load_system_services_command "systemctl --system list-units --type=service --type=socket --no-pager --all |grep -E \"^ \" |grep -v \"UNIT\" |sed -e 's/ */;/g' -e 's/^;//g' |cut -f1 -d';'" -#define load_enabled_command "systemctl list-unit-files --type=service --type=socket --no-pager --state=enabled --all |sed -e 's/ */:/g' -e 's/ *: */:/g'|cut -f1 -d:" -#define load_launched_command "systemctl list-units --type=service --type=socket --no-pager --state=active --all --no-legend|sed -e 's/^ //g' -e 's/ */:/g' |cut -f1 -d:" +#define load_services_command "systemctl list-units --no-pager --all --plain --no-legend |sed -E 's/(\\S+)\\s+(\\S+)\\s+(\\S+)\\s+(\\S+)\\s+(.*)/\\1;\\2;\\3;\\4;\\5/'" +#define load_user_services_command yon_char_unite("systemctl --user --machine=",yon_ubl_root_user_get(),"@ list-units --no-pager --all --plain --no-legend |sed -E 's/(\\S+)\\s+(\\S+)\\s+(\\S+)\\s+(\\S+)\\s+(.*)/\\1;\\2;\\3;\\4;\\5/'",NULL) +#define load_system_services_command "systemctl --system list-units --no-pager --all |grep -E \"^ \" |grep -v \"UNIT\" |sed -e 's/ */;/g' -e 's/^;//g' |cut -f1 -d';'" +#define load_enabled_command "systemctl list-unit-files --no-pager --state=enabled --all |sed -e 's/ */:/g' -e 's/ *: */:/g'|cut -f1 -d:" +#define load_launched_command "systemctl list-units --no-pager --state=active --all --no-legend|sed -e 's/^ //g' -e 's/ */:/g' |cut -f1 -d:" #define service_start_command(target) yon_char_append("systemctl start --no-pager ",target) #define service_stop_command(target) yon_char_append("systemctl stop --no-pager ",target) #define service_enable_command(target) yon_char_append("systemctl enable --no-pager ",target) @@ -74,7 +74,7 @@ #define config_get_command(target) yon_char_append("cat ",target) #define config_get_local_command "ubconfig --source system get system SERVICES_ENABLE SERVICES_DISABLE SERVICES_MASK" -#define config_get_global_command "ubconfig --source global get system SERVICES_ENABLE SERVICES_DISABLE SERVICES_MASK" +#define config_get_global_command yon_char_new("ubconfig --source global get system SERVICES_ENABLE SERVICES_DISABLE SERVICES_MASK") #define config_get_default_command "" #define config_get_global_only_parameters "" @@ -102,6 +102,10 @@ #define reload_systemd_user_command "systemctl --user daemon-reload" #define reexec_systemd_user_command "systemctl --user daemon-reexec" +#define SERVICES_ENABLE_PARAMETER "SERVICES_ENABLE" +#define SERVICES_DISABLE_PARAMETER "SERVICES_DISABLE" +#define SERVICES_MASK_PARAMETER "SERVICES_MASK" + typedef char* string; string version_application; @@ -262,21 +266,21 @@ gboolean on_context_menu_open(GtkWidget *self,GdkEventButton *event, main_window GtkWidget *yon_menu_separator_create(); -void on_config_autostart_clicked(); +void on_config_autostart_clicked(GtkWidget *self, main_window *widgets); void on_activate(GtkTreeView *self, main_window *widgets); -void on_config_autostop_clicked(); +void on_config_autostop_clicked(GtkWidget *self, main_window *widgets); -void on_config_block_clicked(); +void on_config_block_clicked(GtkWidget *self, main_window *widgets); -void on_system_autostart_clicked(); +void on_system_autostart_clicked(GtkWidget *self, main_window *widgets); void on_system_kill_confirmed(GtkWidget *self,char *service_name); -void on_system_launch_clicked(); +void on_system_launch_clicked(GtkWidget *self, main_window *widgets); -void on_system_restart_clicked(); +void on_system_restart_clicked(GtkWidget *self, main_window *widgets); void on_source_show(); diff --git a/source/ubl-strings.h b/source/ubl-strings.h index 78d001d..f7f3ba3 100644 --- a/source/ubl-strings.h +++ b/source/ubl-strings.h @@ -59,4 +59,58 @@ #define ERROR_LABEL _("Error has occured") #define SWITCH_OFF_ERROR_LABEL _("Service were not stopped") -#define STOP_SERVICE_WARMING_LABEL(target) yon_char_unite(_("Are you sure want to stop "),target,"?\n",_("The stop will be forced.\nThe system may become unstable."),NULL) \ No newline at end of file +#define STOP_SERVICE_WARMING_LABEL(target) yon_char_unite(_("Are you sure want to stop "),target,"?\n",_("The stop will be forced.\nThe system may become unstable."),NULL) +#define DAYS_LABEL _("Days") +#define HOURS_LABEL _("Hours") +#define MINUTES_LABEL _("Minutes") +#define SECONDS_LABEL _("Seconds") + +#define ACTIVE_LABEL _("Active") +#define INACTIVE_LABEL _("Inactive") + +#define SYSTEM_UNITS_LABEL _("System units") +#define USER_UNITS_LABEL _("User units") +#define CONFIG_FILES_LABEL _("Config files") +#define SESSIONS__LABEL _("Sessions") +#define TIMERS_LABEL _("Timers") + +#define SYSTEM_STATUS_LABEL _("System services status") +#define USER_STATUS_LABEL _("User services status") +#define INSTALLED_UNIT_LABEL _("Installed unit files") +#define UNITS_LIST_LABEL _("Units and status list") +#define SOCKETS_LIST_LABEL _("Sockets and status list") +#define TIMERS_LIST_LABEL _("Timers and status list") + +#define UNIT_LABEL _("Unit") + +#define RELAUNCH_SYSTEMCTL_LABEL _("Relaunch systemctl") +#define REEXEC_SYSTEMCTL_LABEL _("Reexec systemctl") +#define SHOW_SERVICE_INFO_LABEL _("Show service information") +#define SHOW_SERVICE_LOG_LABEL _("Show service log") +#define SHOW_SERVICE_SOURCE_LABEL _("Show service source file") +#define SHOW_SERVICE_PROPERTIES_LABEL _("Show service properties") +#define SHOW_LABEL _("Show...") + +#define SHOW_INACTIVE_LABEL _("Show inactive") +#define SHOW_UNLOADED_LABEL _("Show unloaded") + +#define FILE_LABEL _("File") +#define CHANGE_DATE_LABEL _("Change date") +#define DESCRIPTION_TAB_LABEL _("Description") +#define EDIT_LABEL _("Edit") + +#define SESSION_ID_LABEL _("Session ID") +#define USER_ID_LABEL _("User ID") +#define USER_NAME_LABEL _("User name") +#define SEAT_ID_LABEL _("Seat ID") + +#define SESSION_START_LABEL _("Start session") +#define SESSION_END_LABEL _("Stop session") +#define SESSION_LOCK_LABEL _("Lock session") + +#define TIMER_LABEL _("Timer") +#define NEXT_LABEL _("Next") +#define LEFT_LABEL _("Left") +#define LAST_LABEL _("Last") +#define PASSED_LABEL _("Passed") +#define ACTIVATES_LABEL _("Activates") \ No newline at end of file diff --git a/ubl-settings-services.glade b/ubl-settings-services.glade index 508fb87..debcdbc 100644 --- a/ubl-settings-services.glade +++ b/ubl-settings-services.glade @@ -549,6 +549,7 @@ True fixed + 20 Autostart @@ -562,6 +563,7 @@ True fixed + 20 Autostop @@ -575,6 +577,7 @@ True fixed + 20 Block @@ -588,6 +591,7 @@ True fixed + 20 Autostart @@ -601,6 +605,7 @@ True fixed + 20 Launched @@ -614,7 +619,7 @@ True 10 - 10 + 20 Unit @@ -627,6 +632,7 @@ autosize + 20 True @@ -1050,6 +1056,7 @@ True fixed + 20 Autostart @@ -1063,6 +1070,7 @@ True fixed + 20 Autostop @@ -1076,6 +1084,7 @@ True fixed + 20 Block @@ -1089,6 +1098,7 @@ True fixed + 20 Autostart @@ -1102,6 +1112,7 @@ True fixed + 20 Launched @@ -1115,7 +1126,7 @@ True 10 - 10 + 20 Unit @@ -1128,6 +1139,7 @@ autosize + 20 True @@ -1331,7 +1343,7 @@ True fixed - 10 + 20 File @@ -1345,7 +1357,7 @@ True fixed - 10 + 20 Change date @@ -1357,7 +1369,7 @@ - 10 + 20 Description True @@ -1490,7 +1502,7 @@ True fixed - 10 + 20 Session ID @@ -1504,7 +1516,7 @@ True fixed - 10 + 20 Status @@ -1518,7 +1530,7 @@ True fixed - 10 + 20 User ID @@ -1532,7 +1544,7 @@ True fixed - 10 + 20 User name @@ -1544,7 +1556,7 @@ - 10 + 20 Seat ID True @@ -1616,7 +1628,7 @@ True fixed - 10 + 20 Timer @@ -1630,7 +1642,7 @@ True fixed - 10 + 20 Next @@ -1644,7 +1656,7 @@ True fixed - 10 + 20 Previous @@ -1658,7 +1670,7 @@ True fixed - 10 + 20 Last @@ -1672,7 +1684,7 @@ True fixed - 10 + 20 Passed @@ -1684,7 +1696,7 @@ - 10 + 20 Activates True diff --git a/ubl-settings-services.pot b/ubl-settings-services.pot index 90c1107..b82b19f 100644 --- a/ubl-settings-services.pot +++ b/ubl-settings-services.pot @@ -18,199 +18,367 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" #: source/ubl-strings.h:1 -msgid "Version:" -msgstr "" - -#: source/ubl-strings.h:2 -msgid "ubl-settings-services version:" -msgstr "" - -#: source/ubl-strings.h:2 -msgid "Usage:" -msgstr "" - -#: source/ubl-strings.h:2 -msgid "[OPTIONS]" -msgstr "" - -#: source/ubl-strings.h:2 -msgid "Options:" -msgstr "" - -#: source/ubl-strings.h:2 -msgid "Show this help" -msgstr "" - -#: source/ubl-strings.h:2 -msgid "Show package version" -msgstr "" - -#: source/ubl-strings.h:2 -msgid "Lock this help menu" -msgstr "" - -#: source/ubl-strings.h:2 -msgid "Lock configuration saving" -msgstr "" - -#: source/ubl-strings.h:2 -msgid "Lock local configration saving" -msgstr "" - -#: source/ubl-strings.h:2 -msgid "Lock global configration saving" -msgstr "" - -#: source/ubl-strings.h:2 -msgid "Lock global configration loading" -msgstr "" - -#: source/ubl-strings.h:2 -msgid "Reset application settings" -msgstr "" - -#: source/ubl-strings.h:4 msgid "Services and processes systemd" msgstr "" -#: source/ubl-strings.h:5 +#: source/ubl-strings.h:2 msgid "System services and processes configuration" msgstr "" -#: source/ubl-strings.h:6 +#: source/ubl-strings.h:3 msgid "Services and processes - service information" msgstr "" -#: source/ubl-strings.h:8 source/ubl-strings.h:40 +#: source/ubl-strings.h:5 source/ubl-strings.h:37 msgid "Configure in configuration" msgstr "" -#: source/ubl-strings.h:9 source/ubl-strings.h:44 +#: source/ubl-strings.h:6 source/ubl-strings.h:41 msgid "Autostart" msgstr "" -#: source/ubl-strings.h:10 source/ubl-strings.h:45 +#: source/ubl-strings.h:7 source/ubl-strings.h:42 msgid "Autostop" msgstr "" -#: source/ubl-strings.h:11 source/ubl-strings.h:46 +#: source/ubl-strings.h:8 source/ubl-strings.h:43 msgid "Block" msgstr "" -#: source/ubl-strings.h:12 source/ubl-strings.h:41 +#: source/ubl-strings.h:9 source/ubl-strings.h:38 msgid "Configure in system" msgstr "" -#: source/ubl-strings.h:13 source/ubl-strings.h:47 +#: source/ubl-strings.h:10 source/ubl-strings.h:44 msgid "Launched" msgstr "" -#: source/ubl-strings.h:14 +#: source/ubl-strings.h:11 msgid "Reload" msgstr "" -#: source/ubl-strings.h:15 +#: source/ubl-strings.h:12 msgid "Show status" msgstr "" -#: source/ubl-strings.h:16 +#: source/ubl-strings.h:13 msgid "Update" msgstr "" -#: source/ubl-strings.h:18 +#: source/ubl-strings.h:15 msgid "All services" msgstr "" -#: source/ubl-strings.h:19 +#: source/ubl-strings.h:16 msgid "System services only" msgstr "" -#: source/ubl-strings.h:20 +#: source/ubl-strings.h:17 msgid "User services only" msgstr "" -#: source/ubl-strings.h:22 +#: source/ubl-strings.h:19 msgid "All" msgstr "" -#: source/ubl-strings.h:23 +#: source/ubl-strings.h:20 msgid "Services" msgstr "" -#: source/ubl-strings.h:24 +#: source/ubl-strings.h:21 msgid "Sockets" msgstr "" -#: source/ubl-strings.h:25 +#: source/ubl-strings.h:22 msgid "Autolaunch in configuration" msgstr "" -#: source/ubl-strings.h:26 +#: source/ubl-strings.h:23 msgid "Stopped in configuration" msgstr "" -#: source/ubl-strings.h:27 +#: source/ubl-strings.h:24 msgid "Blocked in configuration" msgstr "" -#: source/ubl-strings.h:29 +#: source/ubl-strings.h:26 msgid "Toggle autostart at configuration" msgstr "" -#: source/ubl-strings.h:30 +#: source/ubl-strings.h:27 msgid "Toggle autostop at configuration" msgstr "" -#: source/ubl-strings.h:31 +#: source/ubl-strings.h:28 msgid "Toggle service blocking at configuration" msgstr "" -#: source/ubl-strings.h:32 +#: source/ubl-strings.h:29 msgid "Toggle autostart at system" msgstr "" -#: source/ubl-strings.h:33 +#: source/ubl-strings.h:30 msgid "Launch/Stop service" msgstr "" -#: source/ubl-strings.h:34 +#: source/ubl-strings.h:31 msgid "Check service status" msgstr "" -#: source/ubl-strings.h:35 +#: source/ubl-strings.h:32 msgid "Check service log" msgstr "" -#: source/ubl-strings.h:37 +#: source/ubl-strings.h:34 msgid "Service:" msgstr "" -#: source/ubl-strings.h:38 +#: source/ubl-strings.h:35 msgid "Description:" msgstr "" -#: source/ubl-strings.h:42 +#: source/ubl-strings.h:39 msgid "Service" msgstr "" -#: source/ubl-strings.h:48 +#: source/ubl-strings.h:45 msgid "Service list is loading" msgstr "" -#: source/ubl-strings.h:49 +#: source/ubl-strings.h:46 msgid "Status" msgstr "" +#: source/ubl-strings.h:47 +msgid "Restart with new configuration" +msgstr "" + +#: source/ubl-strings.h:48 +msgid "Show log" +msgstr "" + +#: source/ubl-strings.h:49 +msgid "Show source" +msgstr "" + +#: source/ubl-strings.h:50 +msgid "Properties" +msgstr "" + #: source/ubl-strings.h:51 -msgid "Service were not stopped" +msgid "Activate session" msgstr "" #: source/ubl-strings.h:52 +msgid "End session" +msgstr "" + +#: source/ubl-strings.h:53 +msgid "Block session" +msgstr "" + +#: source/ubl-strings.h:55 +msgid "Service source were not loaded" +msgstr "" + +#: source/ubl-strings.h:57 +msgid "Saving..." +msgstr "" + +#: source/ubl-strings.h:58 +msgid "Saved" +msgstr "" + +#: source/ubl-strings.h:59 +msgid "Error has occured" +msgstr "" + +#: source/ubl-strings.h:61 +msgid "Service were not stopped" +msgstr "" + +#: source/ubl-strings.h:62 msgid "Are you sure want to stop " msgstr "" -#: source/ubl-strings.h:52 +#: source/ubl-strings.h:62 msgid "" "The stop will be forced.\n" "The system may become unstable." msgstr "" + +#: source/ubl-strings.h:63 +msgid "Days" +msgstr "" + +#: source/ubl-strings.h:64 +msgid "Hours" +msgstr "" + +#: source/ubl-strings.h:65 +msgid "Minutes" +msgstr "" + +#: source/ubl-strings.h:66 +msgid "Seconds" +msgstr "" + +#: source/ubl-strings.h:68 +msgid "Active" +msgstr "" + +#: source/ubl-strings.h:69 +msgid "Inactive" +msgstr "" + +#: source/ubl-strings.h:71 +msgid "System units" +msgstr "" + +#: source/ubl-strings.h:72 +msgid "User units" +msgstr "" + +#: source/ubl-strings.h:73 +msgid "Config files" +msgstr "" + +#: source/ubl-strings.h:74 +msgid "Sessions" +msgstr "" + +#: source/ubl-strings.h:75 +msgid "Timers" +msgstr "" + +#: source/ubl-strings.h:77 +msgid "System services status" +msgstr "" + +#: source/ubl-strings.h:78 +msgid "User services status" +msgstr "" + +#: source/ubl-strings.h:79 +msgid "Installed unit files" +msgstr "" + +#: source/ubl-strings.h:80 +msgid "Units and status list" +msgstr "" + +#: source/ubl-strings.h:81 +msgid "Sockets and status list" +msgstr "" + +#: source/ubl-strings.h:82 +msgid "Timers and status list" +msgstr "" + +#: source/ubl-strings.h:84 +msgid "Unit" +msgstr "" + +#: source/ubl-strings.h:86 +msgid "Relaunch systemctl" +msgstr "" + +#: source/ubl-strings.h:87 +msgid "Reexec systemctl" +msgstr "" + +#: source/ubl-strings.h:88 +msgid "Show service information" +msgstr "" + +#: source/ubl-strings.h:89 +msgid "Show service log" +msgstr "" + +#: source/ubl-strings.h:90 +msgid "Show service source file" +msgstr "" + +#: source/ubl-strings.h:91 +msgid "Show service properties" +msgstr "" + +#: source/ubl-strings.h:92 +msgid "Show..." +msgstr "" + +#: source/ubl-strings.h:94 +msgid "Show inactive" +msgstr "" + +#: source/ubl-strings.h:95 +msgid "Show unloaded" +msgstr "" + +#: source/ubl-strings.h:97 +msgid "File" +msgstr "" + +#: source/ubl-strings.h:98 +msgid "Change date" +msgstr "" + +#: source/ubl-strings.h:99 +msgid "Description" +msgstr "" + +#: source/ubl-strings.h:100 +msgid "Edit" +msgstr "" + +#: source/ubl-strings.h:102 +msgid "Session ID" +msgstr "" + +#: source/ubl-strings.h:103 +msgid "User ID" +msgstr "" + +#: source/ubl-strings.h:104 +msgid "User name" +msgstr "" + +#: source/ubl-strings.h:105 +msgid "Seat ID" +msgstr "" + +#: source/ubl-strings.h:107 +msgid "Start session" +msgstr "" + +#: source/ubl-strings.h:108 +msgid "Stop session" +msgstr "" + +#: source/ubl-strings.h:109 +msgid "Lock session" +msgstr "" + +#: source/ubl-strings.h:111 +msgid "Timer" +msgstr "" + +#: source/ubl-strings.h:112 +msgid "Next" +msgstr "" + +#: source/ubl-strings.h:113 +msgid "Left" +msgstr "" + +#: source/ubl-strings.h:114 +msgid "Last" +msgstr "" + +#: source/ubl-strings.h:115 +msgid "Passed" +msgstr "" + +#: source/ubl-strings.h:116 +msgid "Activates" +msgstr "" diff --git a/ubl-settings-services_ru.po b/ubl-settings-services_ru.po index 588e6cb..878c93b 100644 --- a/ubl-settings-services_ru.po +++ b/ubl-settings-services_ru.po @@ -18,201 +18,370 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" #: source/ubl-strings.h:1 -msgid "Version:" -msgstr "Версия:" - -#: source/ubl-strings.h:2 -msgid "ubl-settings-services version:" -msgstr "Версия ubl-settings-services: " - -#: source/ubl-strings.h:2 -msgid "Usage:" -msgstr "Использование:" - -#: source/ubl-strings.h:2 -msgid "[OPTIONS]" -msgstr "[АРГУМЕНТЫ]" - -#: source/ubl-strings.h:2 -msgid "Options:" -msgstr "Аргументы:" - -#: source/ubl-strings.h:2 -msgid "Show this help" -msgstr "Показать параметры справки" - -#: source/ubl-strings.h:2 -msgid "Show package version" -msgstr "Показать текущую версию" - -#: source/ubl-strings.h:2 -msgid "Lock this help menu" -msgstr "Блокировка вызова справки" - -#: source/ubl-strings.h:2 -msgid "Lock configuration saving" -msgstr "Блокировка сохранения локальной и глобальной конфигурации" - -#: source/ubl-strings.h:2 -msgid "Lock local configration saving" -msgstr "Блокировка сохранения локальной конфигурации" - -#: source/ubl-strings.h:2 -msgid "Lock global configration saving" -msgstr "Блокировка сохранения глобальной конфигурации" - -#: source/ubl-strings.h:2 -msgid "Lock global configration loading" -msgstr "Блокировка загрузки глобальной конфигурации" - -#: source/ubl-strings.h:2 -msgid "Reset application settings" -msgstr "Сбросить настройки утилиты" - -#: source/ubl-strings.h:4 msgid "Services and processes systemd" msgstr "Сервисы и процессы systemd" -#: source/ubl-strings.h:5 +#: source/ubl-strings.h:2 msgid "System services and processes configuration" msgstr "Настройка работы служб и процессов системы" -#: source/ubl-strings.h:6 +#: source/ubl-strings.h:3 msgid "Services and processes - service information" msgstr "Сервисы и процессы - статус" -#: source/ubl-strings.h:8 source/ubl-strings.h:40 +#: source/ubl-strings.h:5 source/ubl-strings.h:37 msgid "Configure in configuration" msgstr "Настройка в конфигурации" -#: source/ubl-strings.h:9 source/ubl-strings.h:44 +#: source/ubl-strings.h:6 source/ubl-strings.h:41 msgid "Autostart" msgstr "Автостарт" -#: source/ubl-strings.h:10 source/ubl-strings.h:45 +#: source/ubl-strings.h:7 source/ubl-strings.h:42 msgid "Autostop" msgstr "Автостоп" -#: source/ubl-strings.h:11 source/ubl-strings.h:46 +#: source/ubl-strings.h:8 source/ubl-strings.h:43 msgid "Block" msgstr "Блокировать" -#: source/ubl-strings.h:12 source/ubl-strings.h:41 +#: source/ubl-strings.h:9 source/ubl-strings.h:38 msgid "Configure in system" msgstr "Настройка в системе" -#: source/ubl-strings.h:13 source/ubl-strings.h:47 +#: source/ubl-strings.h:10 source/ubl-strings.h:44 msgid "Launched" msgstr "Запущено" -#: source/ubl-strings.h:14 +#: source/ubl-strings.h:11 msgid "Reload" msgstr "Перезагрузить" -#: source/ubl-strings.h:15 +#: source/ubl-strings.h:12 msgid "Show status" msgstr "Показать статус" -#: source/ubl-strings.h:16 +#: source/ubl-strings.h:13 msgid "Update" msgstr "Обновить" -#: source/ubl-strings.h:18 +#: source/ubl-strings.h:15 msgid "All services" msgstr "Все сервисы" -#: source/ubl-strings.h:19 +#: source/ubl-strings.h:16 msgid "System services only" msgstr "Только системные сервисы" -#: source/ubl-strings.h:20 +#: source/ubl-strings.h:17 msgid "User services only" msgstr "Только сервисы пользователя" -#: source/ubl-strings.h:22 +#: source/ubl-strings.h:19 msgid "All" msgstr "Все" -#: source/ubl-strings.h:23 +#: source/ubl-strings.h:20 msgid "Services" msgstr "Сервисы" -#: source/ubl-strings.h:24 +#: source/ubl-strings.h:21 msgid "Sockets" msgstr "Сокеты" -#: source/ubl-strings.h:25 +#: source/ubl-strings.h:22 msgid "Autolaunch in configuration" msgstr "Автозапуск в конфигурации" -#: source/ubl-strings.h:26 +#: source/ubl-strings.h:23 msgid "Stopped in configuration" msgstr "Остановлено в конфигурации" -#: source/ubl-strings.h:27 +#: source/ubl-strings.h:24 msgid "Blocked in configuration" msgstr "Заблокированные в конфигурации" -#: source/ubl-strings.h:29 +#: source/ubl-strings.h:26 msgid "Toggle autostart at configuration" msgstr "Переключить автозапуск в конфигурации" -#: source/ubl-strings.h:30 +#: source/ubl-strings.h:27 msgid "Toggle autostop at configuration" msgstr "Переключить автостоп в конфигурации" -#: source/ubl-strings.h:31 +#: source/ubl-strings.h:28 msgid "Toggle service blocking at configuration" msgstr "Переключить блокирование в конфигурации" -#: source/ubl-strings.h:32 +#: source/ubl-strings.h:29 msgid "Toggle autostart at system" msgstr "Переключить автозапуск в системе" -#: source/ubl-strings.h:33 +#: source/ubl-strings.h:30 msgid "Launch/Stop service" msgstr "Запустить/Остановить сервис" -#: source/ubl-strings.h:34 +#: source/ubl-strings.h:31 msgid "Check service status" msgstr "Проверить статус сервиса" -#: source/ubl-strings.h:35 +#: source/ubl-strings.h:32 msgid "Check service log" msgstr "Открыть лог сервиса" -#: source/ubl-strings.h:37 +#: source/ubl-strings.h:34 msgid "Service:" msgstr "Сервис:" -#: source/ubl-strings.h:38 +#: source/ubl-strings.h:35 #, fuzzy msgid "Description:" msgstr "Описание:" -#: source/ubl-strings.h:42 +#: source/ubl-strings.h:39 msgid "Service" msgstr "Сервис" -#: source/ubl-strings.h:48 +#: source/ubl-strings.h:45 msgid "Service list is loading" msgstr "Список сервисов загружается" -#: source/ubl-strings.h:49 +#: source/ubl-strings.h:46 msgid "Status" msgstr "Статус" +#: source/ubl-strings.h:47 +msgid "Restart with new configuration" +msgstr "Перезагрузить с новой конфигурацией" + +#: source/ubl-strings.h:48 +msgid "Show log" +msgstr "Показать логи" + +#: source/ubl-strings.h:49 +msgid "Show source" +msgstr "Открыть конфигурационный файл" + +#: source/ubl-strings.h:50 +msgid "Properties" +msgstr "Свойства" + #: source/ubl-strings.h:51 +msgid "Activate session" +msgstr "Активировать сессию" + +#: source/ubl-strings.h:52 +msgid "End session" +msgstr "Завершить сессию" + +#: source/ubl-strings.h:53 +msgid "Block session" +msgstr "Заблокировать сессию" + +#: source/ubl-strings.h:55 +msgid "Service source were not loaded" +msgstr "Сервис не был загружен" + +#: source/ubl-strings.h:57 +msgid "Saving..." +msgstr "Сохранение..." + +#: source/ubl-strings.h:58 +msgid "Saved" +msgstr "Сохранено" + +#: source/ubl-strings.h:59 +msgid "Error has occured" +msgstr "Произошла ошибка" + +#: source/ubl-strings.h:61 msgid "Service were not stopped" msgstr "Сервис не был остановлен" -#: source/ubl-strings.h:52 +#: source/ubl-strings.h:62 msgid "Are you sure want to stop " msgstr "Вы уверены что хотите остановить " -#: source/ubl-strings.h:52 +#: source/ubl-strings.h:62 msgid "" "The stop will be forced.\n" "The system may become unstable." -msgstr "Остановка будет произведена принудительно.\n" +msgstr "" +"Остановка будет произведена принудительно.\n" "Возможна нестабильная работа системы." + +#: source/ubl-strings.h:63 +msgid "Days" +msgstr "Дней" + +#: source/ubl-strings.h:64 +msgid "Hours" +msgstr "Часов" + +#: source/ubl-strings.h:65 +msgid "Minutes" +msgstr "Минут" + +#: source/ubl-strings.h:66 +msgid "Seconds" +msgstr "Секунд" + +#: source/ubl-strings.h:68 +msgid "Active" +msgstr "Активна" + +#: source/ubl-strings.h:69 +msgid "Inactive" +msgstr "Неактивна" + +#: source/ubl-strings.h:71 +msgid "System units" +msgstr "Системные юниты" + +#: source/ubl-strings.h:72 +msgid "User units" +msgstr "Пользовательские юниты" + +#: source/ubl-strings.h:73 +msgid "Config files" +msgstr "Конфигурационные файлы" + +#: source/ubl-strings.h:74 +msgid "Sessions" +msgstr "Сессии" + +#: source/ubl-strings.h:75 +msgid "Timers" +msgstr "Таймеры" + +#: source/ubl-strings.h:77 +msgid "System services status" +msgstr "Статус сервисов системы" + +#: source/ubl-strings.h:78 +msgid "User services status" +msgstr "Статус сервисов пользователя" + +#: source/ubl-strings.h:79 +msgid "Installed unit files" +msgstr "Установленные юнит-файлы" + +#: source/ubl-strings.h:80 +msgid "Units and status list" +msgstr "Список юнитов и состояния" + +#: source/ubl-strings.h:81 +msgid "Sockets and status list" +msgstr "Список сокетов и состояния" + +#: source/ubl-strings.h:82 +msgid "Timers and status list" +msgstr "Список таймеров и состояния" + +#: source/ubl-strings.h:84 +msgid "Unit" +msgstr "Юнит" + +#: source/ubl-strings.h:86 +msgid "Relaunch systemctl" +msgstr "Перезагрузить systemctl" + +#: source/ubl-strings.h:87 +msgid "Reexec systemctl" +msgstr "Перезапустить systemctl" + +#: source/ubl-strings.h:88 +msgid "Show service information" +msgstr "Показать информацию о сервисе" + +#: source/ubl-strings.h:89 +msgid "Show service log" +msgstr "Открыть лог сервиса" + +#: source/ubl-strings.h:90 +msgid "Show service source file" +msgstr "Показать конфигурационный файл сервиса" + +#: source/ubl-strings.h:91 +msgid "Show service properties" +msgstr "Открыть свойства сервиса" + +#: source/ubl-strings.h:92 +msgid "Show..." +msgstr "Показать..." + +#: source/ubl-strings.h:94 +msgid "Show inactive" +msgstr "Показать неактивные" + +#: source/ubl-strings.h:95 +msgid "Show unloaded" +msgstr "Показать незагруженные" + +#: source/ubl-strings.h:97 +msgid "File" +msgstr "Файл" + +#: source/ubl-strings.h:98 +msgid "Change date" +msgstr "Изменён" + +#: source/ubl-strings.h:99 +msgid "Description" +msgstr "Описание" + +#: source/ubl-strings.h:100 +msgid "Edit" +msgstr "Редактировать" + +#: source/ubl-strings.h:102 +msgid "Session ID" +msgstr "ID сессии" + +#: source/ubl-strings.h:103 +msgid "User ID" +msgstr "ID пользователя" + +#: source/ubl-strings.h:104 +msgid "User name" +msgstr "Имя пользователя" + +#: source/ubl-strings.h:105 +msgid "Seat ID" +msgstr "Seat ID" + +#: source/ubl-strings.h:107 +msgid "Start session" +msgstr "Запустить сессию" + +#: source/ubl-strings.h:108 +msgid "Stop session" +msgstr "Остановить сессию" + +#: source/ubl-strings.h:109 +msgid "Lock session" +msgstr "Заблокировать сессию" + +#: source/ubl-strings.h:111 +msgid "Timer" +msgstr "Таймер" + +#: source/ubl-strings.h:112 +msgid "Next" +msgstr "Следующий" + +#: source/ubl-strings.h:113 +msgid "Left" +msgstr "Осталось времени" + +#: source/ubl-strings.h:114 +msgid "Last" +msgstr "Последний" + +#: source/ubl-strings.h:115 +msgid "Passed" +msgstr "Пройденный" + +#: source/ubl-strings.h:116 +msgid "Activates" +msgstr "Активируется" From 955950a126d2d60d8e0e50fa908e3dc0cec0bf37 Mon Sep 17 00:00:00 2001 From: Ivan Yarcev Date: Thu, 28 Mar 2024 11:40:00 +0600 Subject: [PATCH 06/31] Added loading to custom location --- source/ubl-settings-services.c | 96 +++++++++++++++++++++------------- source/ubl-settings-services.h | 5 ++ ubl-settings-services.css | 10 ++-- 3 files changed, 73 insertions(+), 38 deletions(-) diff --git a/source/ubl-settings-services.c b/source/ubl-settings-services.c index 55621b9..0ebfec0 100644 --- a/source/ubl-settings-services.c +++ b/source/ubl-settings-services.c @@ -10,17 +10,34 @@ void yon_load_proceed(YON_CONFIG_TYPE type){ yon_config_load_config(YON_CONFIG_DEFAULT,config_get_default_command,NULL); if (type==YON_CONFIG_GLOBAL){ yon_config_load_config(type,config_get_global_command,NULL); - } - if (type==YON_CONFIG_LOCAL){ + } else if (type==YON_CONFIG_LOCAL){ yon_config_load_config(type,config_get_local_command,NULL); - } - + } else if (type==YON_CONFIG_CUSTOM){ + char *path=""; + GtkWidget *dialog = gtk_file_chooser_dialog_new(template_app_information.app_title,NULL,GTK_FILE_CHOOSER_ACTION_SAVE,CANCEL_LABEL,GTK_RESPONSE_CANCEL,OPEN_LABEL,GTK_RESPONSE_ACCEPT,NULL); + GtkFileFilter *filter = gtk_file_filter_new(); + gtk_file_filter_add_pattern(filter,"*.ini"); + gtk_file_chooser_add_filter(GTK_FILE_CHOOSER(dialog),filter); + gtk_widget_show(dialog); + int response = gtk_dialog_run(GTK_DIALOG(dialog)); + if (response == GTK_RESPONSE_ACCEPT){ + char *file = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog)); + if (!yon_char_is_empty(file)){ + path=file; + } + gtk_widget_destroy(dialog); + } else { + gtk_widget_destroy(dialog); + } + char *command = yon_config_get_custom_command(path); + yon_config_load_config(type,command,NULL); + } } void on_config_local_load(GtkWidget *self,main_window *widgets){ + if (self){} if (!main_config.update_thread_active){ main_config.update_thread_active=1; - if (self){}; yon_load_proceed(YON_CONFIG_LOCAL); yon_ubl_status_box_render(LIST_LOAD_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE); gdk_threads_add_idle((GSourceFunc)((gboolean*)(void*)yon_interface_update),widgets); @@ -29,9 +46,9 @@ void on_config_local_load(GtkWidget *self,main_window *widgets){ } void on_config_global_load(GtkWidget *self,main_window *widgets){ + if (self){} if (!main_config.update_thread_active){ main_config.update_thread_active=1; - if (self){}; yon_load_proceed(YON_CONFIG_GLOBAL); yon_ubl_status_box_render(LIST_LOAD_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE); gdk_threads_add_idle((GSourceFunc)((gboolean*)(void*)yon_interface_update),widgets); @@ -40,6 +57,16 @@ void on_config_global_load(GtkWidget *self,main_window *widgets){ } +void on_config_custom_load(GtkWidget *self,main_window *widgets){ + if (self){} + yon_load_proceed(YON_CONFIG_CUSTOM); + textdomain(template_ui_LocaleName); + yon_ubl_status_box_render(GLOBAL_LOAD_SUCCESS_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE); + textdomain(LocaleName); + main_config.load_mode=3; + yon_interface_update(widgets); +} + // functions void on_service_constant_update(){ @@ -60,6 +87,12 @@ void on_config_global_save(){ } +void on_config_custom_save(GtkWidget *self, main_window *widgets){ + if (self&&widgets){} + template_saving_window *window = yon_save_proceed(NULL,YON_CONFIG_CUSTOM,config_get_command("system"),NULL); + if (window){}; +} + void on_activate(GtkTreeView *self, main_window *widgets){ if (self&&widgets){}; } @@ -781,6 +814,11 @@ gboolean yon_interface_update(main_window *widgets){ gtk_tree_view_set_model(GTK_TREE_VIEW(widgets->ConfigMainTree),NULL); gtk_tree_view_set_model(GTK_TREE_VIEW(widgets->SessionMainTree),NULL); gtk_tree_view_set_model(GTK_TREE_VIEW(widgets->TimersMainTree),NULL); + gtk_list_store_clear(widgets->SystemList); + gtk_list_store_clear(widgets->UserList); + gtk_list_store_clear(widgets->ConfigList); + gtk_list_store_clear(widgets->SessionsList); + gtk_list_store_clear(widgets->TimersList); int system_size; config_str system_services = yon_config_load(load_services_command,&system_size); int user_size; @@ -790,7 +828,7 @@ gboolean yon_interface_update(main_window *widgets){ int sessions_size; config_str sessions = yon_config_load(list_of_session_command,&sessions_size); int timers_size; - config_str timers = yon_config_load(get_timers_command,&timers_size); + config_str timers = yon_config_load(get_timers_command,&timers_size); struct json_object *jsobject = json_tokener_parse(timers[0]); for (int i=0; iConfigMainTree),GTK_TREE_MODEL(widgets->ConfigList)); gtk_tree_view_set_model(GTK_TREE_VIEW(widgets->SessionMainTree),GTK_TREE_MODEL(widgets->SessionsList)); gtk_tree_view_set_model(GTK_TREE_VIEW(widgets->TimersMainTree),GTK_TREE_MODEL(widgets->TimersList)); + main_config.update_thread_active=0; return 0; } @@ -1186,8 +1225,14 @@ void yon_main_window_complete(main_window *widgets){ END_SESSION_LABEL,stop_icon_path,on_session_end,NULL, BLOCK_SESSION_LABEL,block_icon_path,on_session_block,NULL, NULL); - - widgets->SystemServiceLabel=yon_gtk_builder_get_widget(builder,"SystemServiceLabel"); + { + GList *list = gtk_container_get_children(GTK_CONTAINER(widgets->SystemMenu->menu)); + gtk_style_context_add_class(gtk_widget_get_style_context(g_list_nth_data(list,3)),"separatorBottom"); + gtk_style_context_add_class(gtk_widget_get_style_context(g_list_nth_data(list,8)),"separatorTop"); + gtk_style_context_add_class(gtk_widget_get_style_context(g_list_nth_data(list,6)),"separatorBottom"); + g_list_free(list); + } + widgets->SystemServiceLabel=yon_gtk_builder_get_widget(builder,"SystemServiceLabel"); widgets->SystemDescriptionLabel=yon_gtk_builder_get_widget(builder,"SystemDescriptionLabel"); } widgets->TimersMainTree=yon_gtk_builder_get_widget(builder,"TimersMainTree"); @@ -1230,57 +1275,36 @@ void yon_main_window_complete(main_window *widgets){ g_signal_connect(G_OBJECT(widgets->TimersStatusListMenuItem),"activate",G_CALLBACK(on_timers_list_status),widgets); // g_signal_connect(G_OBJECT(widgets->SystemUnitsTree),"button-press-event",G_CALLBACK(on_context_menu_open),widgets); - g_signal_connect(G_OBJECT(g_list_nth_data(list,0)),"notify::width",G_CALLBACK(on_column_resize),widgets); - g_signal_connect(G_OBJECT(g_list_nth_data(list,1)),"notify::width",G_CALLBACK(on_column_resize),widgets); - g_signal_connect(G_OBJECT(g_list_nth_data(list,2)),"notify::width",G_CALLBACK(on_column_resize),widgets); - g_signal_connect(G_OBJECT(g_list_nth_data(list,3)),"notify::width",G_CALLBACK(on_column_resize),widgets); - g_signal_connect(G_OBJECT(g_list_nth_data(list,4)),"notify::width",G_CALLBACK(on_column_resize),widgets); - g_signal_connect(G_OBJECT(g_list_nth_data(list,5)),"notify::width",G_CALLBACK(on_column_resize),widgets); for (unsigned int i=0;iUserUnitsTree)); - g_signal_connect(G_OBJECT(g_list_nth_data(list,0)),"notify::width",G_CALLBACK(on_column_resize),widgets); - g_signal_connect(G_OBJECT(g_list_nth_data(list,1)),"notify::width",G_CALLBACK(on_column_resize),widgets); - g_signal_connect(G_OBJECT(g_list_nth_data(list,2)),"notify::width",G_CALLBACK(on_column_resize),widgets); - g_signal_connect(G_OBJECT(g_list_nth_data(list,3)),"notify::width",G_CALLBACK(on_column_resize),widgets); - g_signal_connect(G_OBJECT(g_list_nth_data(list,4)),"notify::width",G_CALLBACK(on_column_resize),widgets); - g_signal_connect(G_OBJECT(g_list_nth_data(list,5)),"notify::width",G_CALLBACK(on_column_resize),widgets); for (unsigned int i=0;iConfigMainTree)); - g_signal_connect(G_OBJECT(g_list_nth_data(list,0)),"notify::width",G_CALLBACK(on_column_resize),widgets); - g_signal_connect(G_OBJECT(g_list_nth_data(list,1)),"notify::width",G_CALLBACK(on_column_resize),widgets); - g_signal_connect(G_OBJECT(g_list_nth_data(list,2)),"notify::width",G_CALLBACK(on_column_resize),widgets); for (unsigned int i=0;iSessionMainTree)); - g_signal_connect(G_OBJECT(g_list_nth_data(list,0)),"notify::width",G_CALLBACK(on_column_resize),widgets); - g_signal_connect(G_OBJECT(g_list_nth_data(list,1)),"notify::width",G_CALLBACK(on_column_resize),widgets); - g_signal_connect(G_OBJECT(g_list_nth_data(list,2)),"notify::width",G_CALLBACK(on_column_resize),widgets); - g_signal_connect(G_OBJECT(g_list_nth_data(list,3)),"notify::width",G_CALLBACK(on_column_resize),widgets); - g_signal_connect(G_OBJECT(g_list_nth_data(list,4)),"notify::width",G_CALLBACK(on_column_resize),widgets); for (unsigned int i=0;iTimersMainTree)); - g_signal_connect(G_OBJECT(g_list_nth_data(list,0)),"notify::width",G_CALLBACK(on_column_resize),widgets); - g_signal_connect(G_OBJECT(g_list_nth_data(list,1)),"notify::width",G_CALLBACK(on_column_resize),widgets); - g_signal_connect(G_OBJECT(g_list_nth_data(list,2)),"notify::width",G_CALLBACK(on_column_resize),widgets); - g_signal_connect(G_OBJECT(g_list_nth_data(list,3)),"notify::width",G_CALLBACK(on_column_resize),widgets); - g_signal_connect(G_OBJECT(g_list_nth_data(list,4)),"notify::width",G_CALLBACK(on_column_resize),widgets); - g_signal_connect(G_OBJECT(g_list_nth_data(list,5)),"notify::width",G_CALLBACK(on_column_resize),widgets); for (unsigned int i=0;iLoadLocalMenuItem),"activate",G_CALLBACK(on_config_local_load),widgets); g_signal_connect(G_OBJECT(widgets->LoadGlobalMenuItem),"activate",G_CALLBACK(on_config_global_load),widgets); + g_signal_connect(G_OBJECT(widgets->LoadCustomMenuItem),"activate",G_CALLBACK(on_config_custom_load),widgets); g_signal_connect(G_OBJECT(widgets->SaveMenuItem),"activate",G_CALLBACK(on_config_global_local_save),NULL); g_signal_connect(G_OBJECT(widgets->SaveLocalMenuItem),"activate",G_CALLBACK(on_config_local_save),NULL); g_signal_connect(G_OBJECT(widgets->SaveGlobalMenuItem),"activate",G_CALLBACK(on_config_global_save),NULL); + g_signal_connect(G_OBJECT(widgets->SaveCustomMenuItem),"activate",G_CALLBACK(on_config_custom_save),NULL); g_signal_connect(G_OBJECT(widgets->SystemUnitsTree),"cursor-changed",G_CALLBACK(on_tree_selection_changed),widgets); gtk_tree_view_set_search_entry(GTK_TREE_VIEW(widgets->SystemUnitsTree),GTK_ENTRY(widgets->SystemSearchEntry)); yon_load_proceed(YON_CONFIG_LOCAL); diff --git a/source/ubl-settings-services.h b/source/ubl-settings-services.h index a7a710a..84b1c04 100644 --- a/source/ubl-settings-services.h +++ b/source/ubl-settings-services.h @@ -73,6 +73,7 @@ #define config_get_command(target) yon_char_append("cat ",target) +#define yon_config_get_custom_command(target) yon_char_unite("ubconfig --source ",target," get system SERVICES_ENABLE SERVICES_DISABLE SERVICES_MASK",NULL) #define config_get_local_command "ubconfig --source system get system SERVICES_ENABLE SERVICES_DISABLE SERVICES_MASK" #define config_get_global_command yon_char_new("ubconfig --source global get system SERVICES_ENABLE SERVICES_DISABLE SERVICES_MASK") #define config_get_default_command "" @@ -234,12 +235,16 @@ void on_config_local_load(GtkWidget *self,main_window *widgets); void on_config_global_load(GtkWidget *self,main_window *widgets); +void on_config_custom_load(GtkWidget *self,main_window *widgets); + void on_config_global_local_save(); void on_config_local_save(); void on_config_global_save(); +void on_config_custom_save(GtkWidget *self, main_window *widgets); + void on_service_constant_update(); log_window *yon_log_window_new(); diff --git a/ubl-settings-services.css b/ubl-settings-services.css index 9a6c1f7..1ca94fe 100644 --- a/ubl-settings-services.css +++ b/ubl-settings-services.css @@ -118,12 +118,16 @@ background:transparent; border-style:solid; } -.separator_menu_item{ +.separatorTop{ border-color: darker (@theme_bg_color); border-top-width:1px; border-style:solid; - margin:0px; - padding:0px; +} + +.separatorBottom{ + border-color: darker (@theme_bg_color); + border-bottom-width:1px; + border-style:solid; } .marginright image{ From 8d16d6f11aadb21fc52929c702f9eccf276c3003 Mon Sep 17 00:00:00 2001 From: Ivan Yarcev Date: Thu, 28 Mar 2024 18:07:04 +0600 Subject: [PATCH 07/31] Filters implemented; localisation updates; loading test fixes; button sensitivity logic added; --- source/ubl-settings-services.c | 319 ++++++++++++++++++++++----------- source/ubl-settings-services.h | 24 +-- source/ubl-strings.h | 11 +- ubl-settings-services.glade | 60 +++++-- ubl-settings-services.pot | 32 ++++ ubl-settings-services_ru.po | 32 ++++ 6 files changed, 335 insertions(+), 143 deletions(-) diff --git a/source/ubl-settings-services.c b/source/ubl-settings-services.c index 0ebfec0..58617fc 100644 --- a/source/ubl-settings-services.c +++ b/source/ubl-settings-services.c @@ -67,8 +67,6 @@ void on_config_custom_load(GtkWidget *self,main_window *widgets){ yon_interface_update(widgets); } -// functions - void on_service_constant_update(){ } @@ -93,22 +91,78 @@ void on_config_custom_save(GtkWidget *self, main_window *widgets){ if (window){}; } +// functions + +enum YON_UNIT_TYPE { + YON_UNIT_SERVICE=0, + YON_UNIT_SWAP, + YON_UNIT_SOCKET, + YON_UNIT_DEVICE, + YON_UNIT_TARGET, + YON_UNIT_MOUNT, + YON_UNIT_TIMER, + YON_UNIT_PATH, + YON_UNIT_SLICE, + YON_UNIT_SCOPE, + YON_UNIT_UNRECOGNISED +}; +enum YON_UNIT_TYPE yon_get_unit_type(char *unit_name); + +enum YON_UNIT_TYPE yon_get_unit_type(char *unit_name){ + enum YON_UNIT_TYPE final_type=0; + char *type = yon_char_new(unit_name); + int cut = yon_char_find_last(type,'.'); + if (cut>-1){ + free(yon_char_divide(type,cut)); + } + if (!strcmp(type,"service")){ + final_type = YON_UNIT_SERVICE; + } else if (!strcmp(type,"swap")){ + final_type = YON_UNIT_SWAP; + } else if (!strcmp(type,"socket")){ + final_type = YON_UNIT_SOCKET; + } else if (!strcmp(type,"device")){ + final_type = YON_UNIT_DEVICE; + } else if (!strcmp(type,"target")){ + final_type = YON_UNIT_TARGET; + } else if (!strcmp(type,"automount")){ + final_type = YON_UNIT_MOUNT; + } else if (!strcmp(type,"timer")){ + final_type = YON_UNIT_TIMER; + } else if (!strcmp(type,"path")){ + final_type = YON_UNIT_PATH; + } else if (!strcmp(type,"slice")){ + final_type = YON_UNIT_SLICE; + } else if (!strcmp(type,"scope")){ + final_type = YON_UNIT_SCOPE; + } else { + final_type = YON_UNIT_UNRECOGNISED; + } + free(type); + return final_type; +} + void on_activate(GtkTreeView *self, main_window *widgets){ if (self&&widgets){}; } void on_config_autostart_clicked(GtkWidget *self, main_window *widgets){ if (self){}; + GtkTreeIter filter_iter; GtkTreeIter iter; GtkTreeModel *model; GtkWidget *Tree; + GtkTreeModel *filter; if (gtk_notebook_get_current_page(GTK_NOTEBOOK(widgets->MainNotebook))==0){ model = GTK_TREE_MODEL(widgets->SystemList); Tree = widgets->SystemUnitsTree; + filter = GTK_TREE_MODEL(widgets->SystemFilter); } else { model = GTK_TREE_MODEL(widgets->UserList); Tree = widgets->UserUnitsTree; + filter = GTK_TREE_MODEL(widgets->UserFilter); } - if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(Tree)),&model,&iter)){ + if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(Tree)),&filter,&filter_iter)){ + gtk_tree_model_filter_convert_iter_to_child_iter(GTK_TREE_MODEL_FILTER(filter),&iter,&filter_iter); gboolean status = 0; char *name; gtk_tree_model_get(model,&iter,0,&status,5,&name,-1); @@ -140,17 +194,22 @@ void on_config_autostart_clicked(GtkWidget *self, main_window *widgets){ void on_config_autostop_clicked(GtkWidget *self, main_window *widgets){ if (self){}; + GtkTreeIter filter_iter; GtkTreeIter iter; GtkTreeModel *model; GtkWidget *Tree; + GtkTreeModel *filter; if (gtk_notebook_get_current_page(GTK_NOTEBOOK(widgets->MainNotebook))==0){ model = GTK_TREE_MODEL(widgets->SystemList); Tree = widgets->SystemUnitsTree; + filter = GTK_TREE_MODEL(widgets->SystemFilter); } else { model = GTK_TREE_MODEL(widgets->UserList); Tree = widgets->UserUnitsTree; + filter = GTK_TREE_MODEL(widgets->UserFilter); } - if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(Tree)),&model,&iter)){ + if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(Tree)),&filter,&filter_iter)){ + gtk_tree_model_filter_convert_iter_to_child_iter(GTK_TREE_MODEL_FILTER(filter),&iter,&filter_iter); gboolean status = 0; char *name; gtk_tree_model_get(model,&iter,1,&status,5,&name,-1); @@ -183,17 +242,22 @@ void on_config_autostop_clicked(GtkWidget *self, main_window *widgets){ void on_config_block_clicked(GtkWidget *self, main_window *widgets){ if (self){}; + GtkTreeIter filter_iter; GtkTreeIter iter; GtkTreeModel *model; GtkWidget *Tree; + GtkTreeModel *filter; if (gtk_notebook_get_current_page(GTK_NOTEBOOK(widgets->MainNotebook))==0){ model = GTK_TREE_MODEL(widgets->SystemList); Tree = widgets->SystemUnitsTree; + filter = GTK_TREE_MODEL(widgets->SystemFilter); } else { model = GTK_TREE_MODEL(widgets->UserList); Tree = widgets->UserUnitsTree; + filter = GTK_TREE_MODEL(widgets->UserFilter); } - if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(Tree)),&model,&iter)){ + if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(Tree)),&filter,&filter_iter)){ + gtk_tree_model_filter_convert_iter_to_child_iter(GTK_TREE_MODEL_FILTER(filter),&iter,&filter_iter); gboolean status = 0; char *name; gtk_tree_model_get(model,&iter,2,&status,5,&name,-1); @@ -226,17 +290,22 @@ void on_config_block_clicked(GtkWidget *self, main_window *widgets){ void on_system_autostart_clicked(GtkWidget *self, main_window *widgets){ if (self){}; + GtkTreeIter filter_iter; GtkTreeIter iter; GtkTreeModel *model; GtkWidget *Tree; + GtkTreeModel *filter; if (gtk_notebook_get_current_page(GTK_NOTEBOOK(widgets->MainNotebook))==0){ model = GTK_TREE_MODEL(widgets->SystemList); Tree = widgets->SystemUnitsTree; + filter = GTK_TREE_MODEL(widgets->SystemFilter); } else { model = GTK_TREE_MODEL(widgets->UserList); Tree = widgets->UserUnitsTree; + filter = GTK_TREE_MODEL(widgets->UserFilter); } - if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(Tree)),&model,&iter)){ + if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(Tree)),&filter,&filter_iter)){ + gtk_tree_model_filter_convert_iter_to_child_iter(GTK_TREE_MODEL_FILTER(filter),&iter,&filter_iter); gboolean status = 0; char *service_name; gtk_tree_model_get(model,&iter,3,&status,5,&service_name,-1); @@ -247,6 +316,70 @@ void on_system_autostart_clicked(GtkWidget *self, main_window *widgets){ } +gboolean yon_filter(GtkTreeModel* model, GtkTreeIter *iter, main_window *widgets){ + gboolean autostart,autostop,masked,type,loaded,inactive; + gtk_tree_model_get(model,iter,0,&autostart,1,&autostop,2,&masked,7,&type,8,&loaded,9,&inactive,-1); + GtkWidget *combo=NULL; + GtkWidget *loaded_check=NULL; + GtkWidget *active_check=NULL; + int page = gtk_notebook_get_current_page(GTK_NOTEBOOK(widgets->MainNotebook)); + if (page == 0){ + combo = widgets->SystemFiltersCombo; + loaded_check = widgets->SystemUnloadedShowCheck; + active_check = widgets->SystemInactiveShowCheck; + } else if (page == 1){ + combo = widgets->UserFiltersCombo; + loaded_check = widgets->UserUnloadedShowCheck; + active_check = widgets->UserInactiveShowCheck; + } + int type_filter=1; + int active_filter=0; + int loaded_filter=0; + + int filter_active = gtk_combo_box_get_active(GTK_COMBO_BOX(combo)); + if (filter_active>0){ + if (filter_active>3){ + char *text = (char*)gtk_combo_box_text_get_active_text(GTK_COMBO_BOX_TEXT(combo)); + if (yon_get_unit_type(text)!=(enum YON_UNIT_TYPE)type) type_filter = 0; + } else { + switch (filter_active){ + case 1: if (!autostart) type_filter=0; + break; + case 2: if (!autostop) type_filter=0; + break; + case 3: if (!masked) type_filter=0; + break; + } + } + } + + if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(active_check))){ + active_filter=1; + + if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(loaded_check))) + loaded_filter=1; + } + + if (type_filter&&(active_filter||inactive)&&(loaded_filter||loaded)){ + return 1; + } + return 0; +} + +void on_filter_changed(GtkWidget *self, main_window *widgets){ + if (self){}; + int page = gtk_notebook_get_current_page(GTK_NOTEBOOK(widgets->MainNotebook)); + if (page == 0){ + gtk_tree_view_set_model(GTK_TREE_VIEW(widgets->SystemUnitsTree),NULL); + gtk_tree_model_filter_refilter(widgets->SystemFilter); + gtk_tree_view_set_model(GTK_TREE_VIEW(widgets->SystemUnitsTree),GTK_TREE_MODEL(widgets->SystemFilter)); + } else if (page == 1){ + gtk_tree_view_set_model(GTK_TREE_VIEW(widgets->UserUnitsTree),NULL); + gtk_tree_model_filter_refilter(widgets->UserFilter); + gtk_tree_view_set_model(GTK_TREE_VIEW(widgets->UserUnitsTree),GTK_TREE_MODEL(widgets->UserFilter)); + } +} + void on_system_kill_confirmed(GtkWidget *self,char *service_name){ if (self){}; char *command = service_kill_command(service_name); @@ -300,14 +433,6 @@ void on_system_restart_clicked(GtkWidget *self, main_window *widgets){ if (self&&widgets){}; } -void on_source_show(){ - -} - -void on_properties_show(){ - -} - void on_session_activate(){ } @@ -320,14 +445,6 @@ void on_session_block(){ } -void on_status_show(){ - -} - -void on_log_show(){ - -} - log_window *yon_log_window_new(){ log_window *window = malloc(sizeof(log_window)); GtkBuilder *builder = gtk_builder_new_from_resource(glade_path_log); @@ -505,38 +622,6 @@ void on_system_status_clicked(GtkWidget *self, main_window *widgets){ } -void on_system_filter_changed(GtkWidget *self, main_window *widgets){ - if (self){} - if (widgets){ - - } - -} - -void on_system_search(GtkWidget *self, main_window *widgets){ - if (self){} - if (widgets){ - - } - -} - -void on_system_inactive_toggled(GtkWidget *self, main_window *widgets){ - if (self){} - if (widgets){ - - } - -} - -void on_system_unloaded_toggled(GtkWidget *self, main_window *widgets){ - if (self){} - if (widgets){ - - } - -} - void on_user_update_hz_clicked(GtkWidget *self, main_window *widgets){ if (self){} if (widgets){ @@ -639,38 +724,6 @@ void on_user_status_clicked(GtkWidget *self, main_window *widgets){ } -void on_user_filter_changed(GtkWidget *self, main_window *widgets){ - if (self){} - if (widgets){ - - } - -} - -void on_user_search(GtkWidget *self, main_window *widgets){ - if (self){} - if (widgets){ - - } - -} - -void on_user_inactive_toggled(GtkWidget *self, main_window *widgets){ - if (self){} - if (widgets){ - - } - -} - -void on_user_unloaded_toggled(GtkWidget *self, main_window *widgets){ - if (self){} - if (widgets){ - - } - -} - void on_config_log_save(GtkWidget *self, log_window *window){ if (self){}; GtkTextIter start, end; @@ -836,8 +889,11 @@ gboolean yon_interface_update(main_window *widgets){ int size; config_str parsed = yon_char_parse(system_services[i],&size,";"); if (parsed){ + int loaded = !strcmp(parsed[1],"loaded"); + int active = !strcmp(parsed[2],"active"); + enum YON_UNIT_TYPE type = yon_get_unit_type(parsed[0]); gtk_list_store_append(widgets->SystemList,&iter); - gtk_list_store_set(widgets->SystemList,&iter,4,strcmp(parsed[2],"active")?0:1,5,parsed[0],6,parsed[4],-1); + gtk_list_store_set(widgets->SystemList,&iter,4,strcmp(parsed[2],"active")?0:1,5,parsed[0],6,parsed[4],7,type,8,loaded,9,active,11,_(parsed[3]),-1); } } @@ -847,8 +903,11 @@ gboolean yon_interface_update(main_window *widgets){ int size; config_str parsed = yon_char_parse(user_services[i],&size,";"); if (parsed){ + int loaded = !strcmp(parsed[1],"loaded"); + int active = !strcmp(parsed[2],"active"); + enum YON_UNIT_TYPE type = yon_get_unit_type(parsed[0]); gtk_list_store_append(widgets->UserList,&iter); - gtk_list_store_set(widgets->UserList,&iter,4,strcmp(parsed[2],"active")?0:1,5,parsed[0],6,parsed[4],-1); + gtk_list_store_set(widgets->UserList,&iter,4,strcmp(parsed[2],"active")?0:1,5,parsed[0],6,parsed[4],5,parsed[0],6,parsed[4],7,type,8,loaded,9,active,11,_(parsed[3]),-1); } } @@ -956,12 +1015,12 @@ gboolean yon_interface_update(main_window *widgets){ char *enabled = yon_config_get_by_key(SERVICES_ENABLE_PARAMETER); config_str parsed = yon_char_parse(enabled,&parsed_size,","); GtkTreeIter iter; - GtkTreeModel *model = GTK_TREE_MODEL(widgets->UserList); + GtkTreeModel *model = GTK_TREE_MODEL(widgets->SystemList); int valid = gtk_tree_model_get_iter_first(model,&iter); for (;valid;valid=gtk_tree_model_iter_next(model,&iter)) { - gtk_list_store_set(widgets->UserList,&iter,0,0,-1); + gtk_list_store_set(widgets->SystemList,&iter,0,0,-1); } valid = gtk_tree_model_get_iter_first(model,&iter); for (;valid;valid=gtk_tree_model_iter_next(model,&iter)) @@ -969,7 +1028,13 @@ gboolean yon_interface_update(main_window *widgets){ char *name; gtk_tree_model_get(model,&iter,5,&name,-1); for (int i=0;iUserList,&iter,0,1,-1); + if (yon_char_find_last(parsed[i],'.')==-1) { + char *temp = yon_char_append(parsed[i],".service"); + free(parsed[i]); + parsed[i]=temp; + } + if (!strcmp(name,parsed[i])) + gtk_list_store_set(widgets->SystemList,&iter,0,1,-1); } } yon_char_parsed_free(parsed,parsed_size); @@ -979,7 +1044,7 @@ gboolean yon_interface_update(main_window *widgets){ valid = gtk_tree_model_get_iter_first(model,&iter); for (;valid;valid=gtk_tree_model_iter_next(model,&iter)) { - gtk_list_store_set(widgets->UserList,&iter,1,0,-1); + gtk_list_store_set(widgets->SystemList,&iter,1,0,-1); } valid = gtk_tree_model_get_iter_first(model,&iter); for (;valid;valid=gtk_tree_model_iter_next(model,&iter)) @@ -987,7 +1052,7 @@ gboolean yon_interface_update(main_window *widgets){ char *name; gtk_tree_model_get(model,&iter,5,&name,-1); for (int i=0;iUserList,&iter,1,1,-1); + if (strstr(name,parsed[i])) gtk_list_store_set(widgets->SystemList,&iter,1,1,-1); } } yon_char_parsed_free(parsed,parsed_size); @@ -997,7 +1062,7 @@ gboolean yon_interface_update(main_window *widgets){ valid = gtk_tree_model_get_iter_first(model,&iter); for (;valid;valid=gtk_tree_model_iter_next(model,&iter)) { - gtk_list_store_set(widgets->UserList,&iter,2,0,-1); + gtk_list_store_set(widgets->SystemList,&iter,2,0,-1); } valid = gtk_tree_model_get_iter_first(model,&iter); for (;valid;valid=gtk_tree_model_iter_next(model,&iter)) @@ -1005,7 +1070,7 @@ gboolean yon_interface_update(main_window *widgets){ char *name; gtk_tree_model_get(model,&iter,5,&name,-1); for (int i=0;iUserList,&iter,2,1,-1); + if (strstr(name,parsed[i])) gtk_list_store_set(widgets->SystemList,&iter,2,1,-1); } } } @@ -1068,8 +1133,8 @@ gboolean yon_interface_update(main_window *widgets){ } } } - gtk_tree_view_set_model(GTK_TREE_VIEW(widgets->SystemUnitsTree),GTK_TREE_MODEL(widgets->SystemList)); - gtk_tree_view_set_model(GTK_TREE_VIEW(widgets->UserUnitsTree),GTK_TREE_MODEL(widgets->UserList)); + gtk_tree_view_set_model(GTK_TREE_VIEW(widgets->SystemUnitsTree),GTK_TREE_MODEL(widgets->SystemFilter)); + gtk_tree_view_set_model(GTK_TREE_VIEW(widgets->UserUnitsTree),GTK_TREE_MODEL(widgets->UserFilter)); gtk_tree_view_set_model(GTK_TREE_VIEW(widgets->ConfigMainTree),GTK_TREE_MODEL(widgets->ConfigList)); gtk_tree_view_set_model(GTK_TREE_VIEW(widgets->SessionMainTree),GTK_TREE_MODEL(widgets->SessionsList)); gtk_tree_view_set_model(GTK_TREE_VIEW(widgets->TimersMainTree),GTK_TREE_MODEL(widgets->TimersList)); @@ -1116,12 +1181,41 @@ void config_init(){ void on_tree_selection_changed(GtkWidget *self, main_window *widgets){ if (self){}; - GtkTreeModel *model = GTK_TREE_MODEL(widgets->SystemList); + GtkTreeModel *model; + GtkWidget *Tree; GtkTreeIter iter; - // int switch_status=0; - if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->SystemUnitsTree)),&model,&iter)){ - // switch_status=1; + int page = gtk_notebook_get_current_page(GTK_NOTEBOOK(widgets->MainNotebook)); + if (page==0){ + model = GTK_TREE_MODEL(widgets->SystemList); + Tree = widgets->SystemUnitsTree; + if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(Tree)),&model,&iter)){ + gtk_widget_set_sensitive(widgets->SystemEditButton,1); + gtk_widget_set_sensitive(widgets->SystemLogButton,1); + gtk_widget_set_sensitive(widgets->SystemStatusButton,1); + gtk_widget_set_sensitive(widgets->SystemInfoButton,1); + } else { + gtk_widget_set_sensitive(widgets->SystemEditButton,0); + gtk_widget_set_sensitive(widgets->SystemLogButton,0); + gtk_widget_set_sensitive(widgets->SystemStatusButton,0); + gtk_widget_set_sensitive(widgets->SystemInfoButton,0); + } + } else if (page==1){ + model = GTK_TREE_MODEL(widgets->UserList); + Tree = widgets->UserUnitsTree; + if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(Tree)),&model,&iter)){ + gtk_widget_set_sensitive(widgets->UserEditButton,1); + gtk_widget_set_sensitive(widgets->UserLogButton,1); + gtk_widget_set_sensitive(widgets->UserStatusButton,1); + gtk_widget_set_sensitive(widgets->UserInfoButton,1); + } else { + gtk_widget_set_sensitive(widgets->UserEditButton,0); + gtk_widget_set_sensitive(widgets->UserLogButton,0); + gtk_widget_set_sensitive(widgets->UserStatusButton,0); + gtk_widget_set_sensitive(widgets->UserInfoButton,0); + } + } + // int switch_status=0; if (getuid()==0){ } } @@ -1168,6 +1262,8 @@ void yon_main_window_complete(main_window *widgets){ widgets->SystemLogButton=yon_gtk_builder_get_widget(builder,"SystemLogButton"); widgets->SystemEditButton=yon_gtk_builder_get_widget(builder,"SystemEditButton"); widgets->SystemPropertiesButton=yon_gtk_builder_get_widget(builder,"SystemPropertiesButton"); + widgets->SystemFilter = GTK_TREE_MODEL_FILTER(gtk_builder_get_object(builder,"SystemFilter")); + widgets->UserFilter = GTK_TREE_MODEL_FILTER(gtk_builder_get_object(builder,"UserFilter")); widgets->SystemStatusButton=yon_gtk_builder_get_widget(builder,"SystemStatusButton"); widgets->SystemMenu = yon_rmb_menu_setup(widgets->SystemUnitsTree,NULL,NULL, CONFIGURE_CONFIGURATION_LABEL,NULL,NULL,NULL, @@ -1245,10 +1341,10 @@ void yon_main_window_complete(main_window *widgets){ g_signal_connect(G_OBJECT(widgets->SystemLogButton),"clicked",G_CALLBACK(on_system_log_clicked),widgets); g_signal_connect(G_OBJECT(widgets->SystemEditButton),"clicked",G_CALLBACK(on_system_edit_clicked),widgets); g_signal_connect(G_OBJECT(widgets->SystemStatusButton),"clicked",G_CALLBACK(on_system_status_clicked),widgets); - g_signal_connect(G_OBJECT(widgets->SystemFiltersCombo),"changed",G_CALLBACK(on_system_filter_changed),widgets); - g_signal_connect(G_OBJECT(widgets->SystemSearchEntry),"changed",G_CALLBACK(on_system_search),widgets); - g_signal_connect(G_OBJECT(widgets->SystemInactiveShowCheck),"toggled",G_CALLBACK(on_system_inactive_toggled),widgets); - g_signal_connect(G_OBJECT(widgets->SystemUnloadedShowCheck),"toggled",G_CALLBACK(on_system_unloaded_toggled),widgets); + g_signal_connect(G_OBJECT(widgets->SystemFiltersCombo),"changed",G_CALLBACK(on_filter_changed),widgets); + g_signal_connect(G_OBJECT(widgets->SystemSearchEntry),"changed",G_CALLBACK(on_filter_changed),widgets); + g_signal_connect(G_OBJECT(widgets->SystemInactiveShowCheck),"toggled",G_CALLBACK(on_filter_changed),widgets); + g_signal_connect(G_OBJECT(widgets->SystemUnloadedShowCheck),"toggled",G_CALLBACK(on_filter_changed),widgets); g_signal_connect(G_OBJECT(widgets->UserPrevButton),"clicked",G_CALLBACK(on_user_update_hz_clicked),widgets); g_signal_connect(G_OBJECT(widgets->UserUpdateButton),"clicked",G_CALLBACK(on_user_update_clicked),widgets); @@ -1256,10 +1352,10 @@ void yon_main_window_complete(main_window *widgets){ g_signal_connect(G_OBJECT(widgets->UserLogButton),"clicked",G_CALLBACK(on_user_log_clicked),widgets); g_signal_connect(G_OBJECT(widgets->UserEditButton),"clicked",G_CALLBACK(on_user_edit_clicked),widgets); g_signal_connect(G_OBJECT(widgets->UserStatusButton),"clicked",G_CALLBACK(on_user_status_clicked),widgets); - g_signal_connect(G_OBJECT(widgets->UserFiltersCombo),"changed",G_CALLBACK(on_user_filter_changed),widgets); - g_signal_connect(G_OBJECT(widgets->UserSearchEntry),"changed",G_CALLBACK(on_user_search),widgets); - g_signal_connect(G_OBJECT(widgets->UserInactiveShowCheck),"toggled",G_CALLBACK(on_user_inactive_toggled),widgets); - g_signal_connect(G_OBJECT(widgets->UserUnloadedShowCheck),"toggled",G_CALLBACK(on_user_unloaded_toggled),widgets); + g_signal_connect(G_OBJECT(widgets->UserFiltersCombo),"changed",G_CALLBACK(on_filter_changed),widgets); + g_signal_connect(G_OBJECT(widgets->UserSearchEntry),"changed",G_CALLBACK(on_filter_changed),widgets); + g_signal_connect(G_OBJECT(widgets->UserInactiveShowCheck),"toggled",G_CALLBACK(on_filter_changed),widgets); + g_signal_connect(G_OBJECT(widgets->UserUnloadedShowCheck),"toggled",G_CALLBACK(on_filter_changed),widgets); g_signal_connect(G_OBJECT(widgets->ConfigEditButton),"clicked",G_CALLBACK(on_config_edit_clicked),widgets); @@ -1274,6 +1370,8 @@ void yon_main_window_complete(main_window *widgets){ g_signal_connect(G_OBJECT(widgets->SocketsStatusListMenuItem),"activate",G_CALLBACK(on_sockets_list_status),widgets); g_signal_connect(G_OBJECT(widgets->TimersStatusListMenuItem),"activate",G_CALLBACK(on_timers_list_status),widgets); + g_signal_connect(G_OBJECT(widgets->SystemInactiveShowCheck),"toggled",G_CALLBACK(yon_gtk_widget_set_sensitive_from_toggle_button),widgets->SystemUnloadedShowCheck); + g_signal_connect(G_OBJECT(widgets->UserInactiveShowCheck),"toggled",G_CALLBACK(yon_gtk_widget_set_sensitive_from_toggle_button),widgets->UserUnloadedShowCheck); // g_signal_connect(G_OBJECT(widgets->SystemUnitsTree),"button-press-event",G_CALLBACK(on_context_menu_open),widgets); for (unsigned int i=0;iSaveGlobalMenuItem),"activate",G_CALLBACK(on_config_global_save),NULL); g_signal_connect(G_OBJECT(widgets->SaveCustomMenuItem),"activate",G_CALLBACK(on_config_custom_save),NULL); g_signal_connect(G_OBJECT(widgets->SystemUnitsTree),"cursor-changed",G_CALLBACK(on_tree_selection_changed),widgets); + g_signal_connect(G_OBJECT(widgets->UserUnitsTree),"cursor-changed",G_CALLBACK(on_tree_selection_changed),widgets); + gtk_tree_model_filter_set_visible_func(widgets->UserFilter,(GtkTreeModelFilterVisibleFunc)yon_filter,widgets,NULL); + gtk_tree_model_filter_set_visible_func(widgets->SystemFilter,(GtkTreeModelFilterVisibleFunc)yon_filter,widgets,NULL); gtk_tree_view_set_search_entry(GTK_TREE_VIEW(widgets->SystemUnitsTree),GTK_ENTRY(widgets->SystemSearchEntry)); yon_load_proceed(YON_CONFIG_LOCAL); yon_ubl_status_box_render(LIST_LOAD_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE); diff --git a/source/ubl-settings-services.h b/source/ubl-settings-services.h index 84b1c04..df255ee 100644 --- a/source/ubl-settings-services.h +++ b/source/ubl-settings-services.h @@ -186,7 +186,8 @@ typedef struct { GtkWidget *UnitsStatusListMenuItem; GtkWidget *SocketsStatusListMenuItem; GtkWidget *TimersStatusListMenuItem; - + GtkTreeModelFilter *SystemFilter; + GtkTreeModelFilter *UserFilter; } main_window; @@ -249,6 +250,9 @@ void on_service_constant_update(); log_window *yon_log_window_new(); +gboolean yon_filter(GtkTreeModel* model, GtkTreeIter *iter, main_window *widgets); +void on_filter_changed(GtkWidget *self, main_window *widgets); + void on_system_services_status(GtkWidget *self, main_window *widgets); void on_user_services_status(GtkWidget *self, main_window *widgets); @@ -315,15 +319,9 @@ void on_save_clicked(GtkWidget *self, log_window *window); void on_update_clicked(GtkWidget *self, log_window *window); void on_system_edit_clicked(GtkWidget *self, main_window *widgets); -void on_system_status_clicked(GtkWidget *self, main_window *widgets); - -void on_system_filter_changed(GtkWidget *self, main_window *widgets); - -void on_system_search(GtkWidget *self, main_window *widgets); - -void on_system_inactive_toggled(GtkWidget *self, main_window *widgets); +void on_filter_changed(GtkWidget *self, main_window *widgets); -void on_system_unloaded_toggled(GtkWidget *self, main_window *widgets); +void on_system_status_clicked(GtkWidget *self, main_window *widgets); void on_user_update_hz_clicked(GtkWidget *self, main_window *widgets); @@ -337,14 +335,6 @@ void on_user_edit_clicked(GtkWidget *self, main_window *widgets); void on_user_status_clicked(GtkWidget *self, main_window *widgets); -void on_user_filter_changed(GtkWidget *self, main_window *widgets); - -void on_user_search(GtkWidget *self, main_window *widgets); - -void on_user_inactive_toggled(GtkWidget *self, main_window *widgets); - -void on_user_unloaded_toggled(GtkWidget *self, main_window *widgets); - void on_config_log_save(GtkWidget *self, log_window *window); void on_config_edit_clicked(GtkWidget *self, main_window *widgets); diff --git a/source/ubl-strings.h b/source/ubl-strings.h index f7f3ba3..b8d8ee6 100644 --- a/source/ubl-strings.h +++ b/source/ubl-strings.h @@ -113,4 +113,13 @@ #define LEFT_LABEL _("Left") #define LAST_LABEL _("Last") #define PASSED_LABEL _("Passed") -#define ACTIVATES_LABEL _("Activates") \ No newline at end of file +#define ACTIVATES_LABEL _("Activates") + +#define STATE_ACTIVE_LABEL _("active") +#define STATE_DEAD_LABEL _("dead") +#define STATE_WAITING_LABEL _("waiting") +#define STATE_RUNNING_LABEL _("running") +#define STATE_LISTENING_LABEL _("listening") +#define STATE_EXITED_LABEL _("exited") +#define STATE_MOUNTED_LABEL _("mounted") +#define STATE_PLUGGED_LABEL _("plugged") \ No newline at end of file diff --git a/ubl-settings-services.glade b/ubl-settings-services.glade index debcdbc..7ee5de3 100644 --- a/ubl-settings-services.glade +++ b/ubl-settings-services.glade @@ -29,26 +29,35 @@ - + - + - + - + - + - + - + - - - + + + + + + + + + + + SystemList + @@ -77,16 +86,25 @@ - + - + - + + + + + - + + + + + UserList + True False @@ -284,6 +302,7 @@ Show unloaded True + False True False True @@ -374,6 +393,7 @@ True + False True True Toggle service blocking at configuration @@ -391,6 +411,7 @@ True + False True True Toggle autostart at system @@ -408,6 +429,7 @@ True + False True True Launch/Stop service @@ -425,6 +447,7 @@ True + False True True Check service log @@ -624,7 +647,7 @@ - 5 + 11 @@ -835,6 +858,7 @@ Show unloaded True + False True False True @@ -923,6 +947,7 @@ True + False True True image15 @@ -939,6 +964,7 @@ True + False True True image16 @@ -955,6 +981,7 @@ True + False True True image17 @@ -971,6 +998,7 @@ True + False True True image18 @@ -1131,7 +1159,7 @@ - 5 + 11 diff --git a/ubl-settings-services.pot b/ubl-settings-services.pot index b82b19f..2edf990 100644 --- a/ubl-settings-services.pot +++ b/ubl-settings-services.pot @@ -382,3 +382,35 @@ msgstr "" #: source/ubl-strings.h:116 msgid "Activates" msgstr "" + +#: source/ubl-strings.h:118 +msgid "active" +msgstr "" + +#: source/ubl-strings.h:119 +msgid "dead" +msgstr "" + +#: source/ubl-strings.h:120 +msgid "waiting" +msgstr "" + +#: source/ubl-strings.h:121 +msgid "running" +msgstr "" + +#: source/ubl-strings.h:122 +msgid "listening" +msgstr "" + +#: source/ubl-strings.h:123 +msgid "exited" +msgstr "" + +#: source/ubl-strings.h:124 +msgid "mounted" +msgstr "" + +#: source/ubl-strings.h:125 +msgid "plugged" +msgstr "" diff --git a/ubl-settings-services_ru.po b/ubl-settings-services_ru.po index 878c93b..9167fac 100644 --- a/ubl-settings-services_ru.po +++ b/ubl-settings-services_ru.po @@ -385,3 +385,35 @@ msgstr "Пройденный" #: source/ubl-strings.h:116 msgid "Activates" msgstr "Активируется" + +#: source/ubl-strings.h:118 +msgid "active" +msgstr "актиен" + +#: source/ubl-strings.h:119 +msgid "dead" +msgstr "" + +#: source/ubl-strings.h:120 +msgid "waiting" +msgstr "ожидает" + +#: source/ubl-strings.h:121 +msgid "running" +msgstr "работает" + +#: source/ubl-strings.h:122 +msgid "listening" +msgstr "слушает" + +#: source/ubl-strings.h:123 +msgid "exited" +msgstr "" + +#: source/ubl-strings.h:124 +msgid "mounted" +msgstr "примонтирован" + +#: source/ubl-strings.h:125 +msgid "plugged" +msgstr "подключен" From b58eb0edc7b58e1bd9a7fda5d66c05bba0a9e675 Mon Sep 17 00:00:00 2001 From: Ivan Yarcev Date: Thu, 28 Mar 2024 18:26:15 +0600 Subject: [PATCH 08/31] Added icons --- Makefile | 4 +++ ...ux.ubl-settings-services.menu-symbolic.svg | 1 + ...-settings-services.properties-symbolic.svg | 1 + ....ubl-settings-services.source-symbolic.svg | 1 + ...l-settings-services.sync-time-symbolic.svg | 1 + source/ubl-settings-services.h | 6 ++--- ubl-settings-services.glade | 26 ++++++++++++++----- 7 files changed, 31 insertions(+), 9 deletions(-) create mode 100644 icons/com.ublinux.ubl-settings-services.menu-symbolic.svg create mode 100644 icons/com.ublinux.ubl-settings-services.properties-symbolic.svg create mode 100644 icons/com.ublinux.ubl-settings-services.source-symbolic.svg create mode 100644 icons/com.ublinux.ubl-settings-services.sync-time-symbolic.svg diff --git a/Makefile b/Makefile index 4856d78..4c98d16 100644 --- a/Makefile +++ b/Makefile @@ -137,6 +137,10 @@ install: check uninstall @install -Dm644 -t "${DESTDIR}/usr/share/icons/hicolor/scalable/actions/" "icons/com.ublinux.${PKGNAME}.lookup-symbolic.svg" @install -Dm644 -t "${DESTDIR}/usr/share/icons/hicolor/scalable/actions/" "icons/com.ublinux.${PKGNAME}.edit-symbolic.svg" @install -Dm644 -t "${DESTDIR}/usr/share/icons/hicolor/scalable/actions/" "icons/com.ublinux.${PKGNAME}.lock-symbolic.svg" + @install -Dm644 -t "${DESTDIR}/usr/share/icons/hicolor/scalable/actions/" "icons/com.ublinux.${PKGNAME}.sync-time-symbolic.svg" + @install -Dm644 -t "${DESTDIR}/usr/share/icons/hicolor/scalable/actions/" "icons/com.ublinux.${PKGNAME}.menu-symbolic.svg" + @install -Dm644 -t "${DESTDIR}/usr/share/icons/hicolor/scalable/actions/" "icons/com.ublinux.${PKGNAME}.properties-symbolic.svg" + @install -Dm644 -t "${DESTDIR}/usr/share/icons/hicolor/scalable/actions/" "icons/com.ublinux.${PKGNAME}.source-symbolic.svg" @install -Dm644 -t "${DESTDIR}/usr/share/polkit-1/actions/" "${CMAKE_BUILD_DIR}/com.ublinux.${PKGNAME}${PKGIDENT}.policy" @if [ -z ${DESTDIR} ]; then \ [ -d "${DESTDIR}/usr/share/icons/hicolor/" ] && gtk-update-icon-cache -fiq "${DESTDIR}/usr/share/icons/hicolor/" &>/dev/null || true; \ diff --git a/icons/com.ublinux.ubl-settings-services.menu-symbolic.svg b/icons/com.ublinux.ubl-settings-services.menu-symbolic.svg new file mode 100644 index 0000000..f8e628f --- /dev/null +++ b/icons/com.ublinux.ubl-settings-services.menu-symbolic.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/icons/com.ublinux.ubl-settings-services.properties-symbolic.svg b/icons/com.ublinux.ubl-settings-services.properties-symbolic.svg new file mode 100644 index 0000000..93afc13 --- /dev/null +++ b/icons/com.ublinux.ubl-settings-services.properties-symbolic.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/icons/com.ublinux.ubl-settings-services.source-symbolic.svg b/icons/com.ublinux.ubl-settings-services.source-symbolic.svg new file mode 100644 index 0000000..b509606 --- /dev/null +++ b/icons/com.ublinux.ubl-settings-services.source-symbolic.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/icons/com.ublinux.ubl-settings-services.sync-time-symbolic.svg b/icons/com.ublinux.ubl-settings-services.sync-time-symbolic.svg new file mode 100644 index 0000000..87adb7a --- /dev/null +++ b/icons/com.ublinux.ubl-settings-services.sync-time-symbolic.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/source/ubl-settings-services.h b/source/ubl-settings-services.h index df255ee..34ddcd8 100644 --- a/source/ubl-settings-services.h +++ b/source/ubl-settings-services.h @@ -93,9 +93,9 @@ #define update_icon_path "com.ublinux.ubl-settings-services.sync-symbolic" #define launch_icon_path "com.ublinux.ubl-settings-services.check-symbolic" #define log_icon_path "com.ublinux.ubl-settings-services.lookup-symbolic" -#define source_icon_path "com.ublinux.ubl-settings-services.play-symbolic" -#define properties_icon_path "com.ublinux.ubl-settings-services.play-symbolic" -#define status_icon_path "com.ublinux.ubl-settings-services.play-symbolic" +#define source_icon_path "com.ublinux.ubl-settings-services.source-symbolic" +#define properties_icon_path "com.ublinux.ubl-settings-services.properties-symbolic" +#define status_icon_path "com.ublinux.ubl-settings-services.important-symbolic" #define reload_systemd_root_command "systemctl daemon-reload" #define reexec_systemd_root_command "systemctl daemon-reexec" diff --git a/ubl-settings-services.glade b/ubl-settings-services.glade index 7ee5de3..6aca0d2 100644 --- a/ubl-settings-services.glade +++ b/ubl-settings-services.glade @@ -108,6 +108,7 @@ True False + com.ublinux.ubl-settings-services.sync-time-symbolic True @@ -127,6 +128,7 @@ True False + com.ublinux.ubl-settings-services.sync-time-symbolic True @@ -146,10 +148,12 @@ True False + com.ublinux.ubl-settings-services.source-symbolic True False + com.ublinux.ubl-settings-services.properties-symbolic True @@ -164,10 +168,12 @@ True False + com.ublinux.ubl-settings-services.source-symbolic True False + com.ublinux.ubl-settings-services.properties-symbolic True @@ -350,7 +356,7 @@ True True True - Toggle autostart at configuration + Relaunch systemctl image1 + + + + + + False + True + 0 + + + + + True + True + True + + + True + True + False + True + menu2 + + + + + + + + + + False + True + 1 + + + + + False + True + 4 + + False @@ -891,6 +972,83 @@ 3 + + + True + False + 5 + + + True + True + True + + + True + True + False + True + menu2 + up + + + + + + + + + + False + True + 0 + + + + + True + True + True + + + True + True + False + True + menu2 + + + + + + + + + + False + True + 1 + + + + + False + True + 4 + + False From 58c5d2323fa284321da99d7dedc1dae11932cde6 Mon Sep 17 00:00:00 2001 From: Ivan Yarcev Date: Fri, 29 Mar 2024 16:27:50 +0600 Subject: [PATCH 14/31] Removed control buttons from RMB menu --- source/ubl-settings-services.c | 110 +++++++++++--------- source/ubl-settings-services.h | 21 +++- ubl-settings-services.glade | 182 +++------------------------------ 3 files changed, 91 insertions(+), 222 deletions(-) diff --git a/source/ubl-settings-services.c b/source/ubl-settings-services.c index ad81c4f..5123a58 100644 --- a/source/ubl-settings-services.c +++ b/source/ubl-settings-services.c @@ -148,23 +148,22 @@ enum YON_UNIT_TYPE yon_get_unit_type(char *unit_name){ void on_activate(GtkTreeView *self, main_window *widgets){ if (self&&widgets){}; } -void on_config_autostart_clicked(GtkWidget *self, main_window *widgets){ +void on_config_autostart_clicked(GtkCellRenderer *self, char *path, main_window *widgets){ if (self){}; GtkTreeIter filter_iter; GtkTreeIter iter; GtkTreeModel *model; - GtkWidget *Tree; GtkTreeModel *filter; if (gtk_notebook_get_current_page(GTK_NOTEBOOK(widgets->MainNotebook))==0){ model = GTK_TREE_MODEL(widgets->SystemList); - Tree = widgets->SystemUnitsTree; filter = GTK_TREE_MODEL(widgets->SystemFilter); } else { model = GTK_TREE_MODEL(widgets->UserList); - Tree = widgets->UserUnitsTree; filter = GTK_TREE_MODEL(widgets->UserFilter); } - if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(Tree)),&filter,&filter_iter)){ + GtkTreePath *path_converted = gtk_tree_path_new_from_string(path); + gtk_tree_model_get_iter(filter,&filter_iter,path_converted); + { gtk_tree_model_filter_convert_iter_to_child_iter(GTK_TREE_MODEL_FILTER(filter),&iter,&filter_iter); gboolean status = 0; char *name; @@ -203,23 +202,22 @@ void on_config_autostart_clicked(GtkWidget *self, main_window *widgets){ } } -void on_config_autostop_clicked(GtkWidget *self, main_window *widgets){ +void on_config_autostop_clicked(GtkCellRenderer *self, char *path, main_window *widgets){ if (self){}; GtkTreeIter filter_iter; GtkTreeIter iter; GtkTreeModel *model; - GtkWidget *Tree; GtkTreeModel *filter; if (gtk_notebook_get_current_page(GTK_NOTEBOOK(widgets->MainNotebook))==0){ model = GTK_TREE_MODEL(widgets->SystemList); - Tree = widgets->SystemUnitsTree; filter = GTK_TREE_MODEL(widgets->SystemFilter); } else { model = GTK_TREE_MODEL(widgets->UserList); - Tree = widgets->UserUnitsTree; filter = GTK_TREE_MODEL(widgets->UserFilter); } - if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(Tree)),&filter,&filter_iter)){ + GtkTreePath *path_converted = gtk_tree_path_new_from_string(path); + gtk_tree_model_get_iter(filter,&filter_iter,path_converted); + { gtk_tree_model_filter_convert_iter_to_child_iter(GTK_TREE_MODEL_FILTER(filter),&iter,&filter_iter); gboolean status = 0; char *name; @@ -259,23 +257,22 @@ void on_config_autostop_clicked(GtkWidget *self, main_window *widgets){ } -void on_config_block_clicked(GtkWidget *self, main_window *widgets){ +void on_config_block_clicked(GtkCellRenderer *self, char *path, main_window *widgets){ if (self){}; GtkTreeIter filter_iter; GtkTreeIter iter; GtkTreeModel *model; - GtkWidget *Tree; GtkTreeModel *filter; if (gtk_notebook_get_current_page(GTK_NOTEBOOK(widgets->MainNotebook))==0){ model = GTK_TREE_MODEL(widgets->SystemList); - Tree = widgets->SystemUnitsTree; filter = GTK_TREE_MODEL(widgets->SystemFilter); } else { model = GTK_TREE_MODEL(widgets->UserList); - Tree = widgets->UserUnitsTree; filter = GTK_TREE_MODEL(widgets->UserFilter); } - if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(Tree)),&filter,&filter_iter)){ + GtkTreePath *path_converted = gtk_tree_path_new_from_string(path); + gtk_tree_model_get_iter(filter,&filter_iter,path_converted); + { gtk_tree_model_filter_convert_iter_to_child_iter(GTK_TREE_MODEL_FILTER(filter),&iter,&filter_iter); gboolean status = 0; char *name; @@ -315,23 +312,22 @@ void on_config_block_clicked(GtkWidget *self, main_window *widgets){ } -void on_system_autostart_clicked(GtkWidget *self, main_window *widgets){ +void on_system_autostart_clicked(GtkCellRenderer *self, char *path, main_window *widgets){ if (self){}; GtkTreeIter filter_iter; GtkTreeIter iter; GtkTreeModel *model; - GtkWidget *Tree; GtkTreeModel *filter; if (gtk_notebook_get_current_page(GTK_NOTEBOOK(widgets->MainNotebook))==0){ model = GTK_TREE_MODEL(widgets->SystemList); - Tree = widgets->SystemUnitsTree; filter = GTK_TREE_MODEL(widgets->SystemFilter); } else { model = GTK_TREE_MODEL(widgets->UserList); - Tree = widgets->UserUnitsTree; filter = GTK_TREE_MODEL(widgets->UserFilter); } - if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(Tree)),&filter,&filter_iter)){ + GtkTreePath *path_converted = gtk_tree_path_new_from_string(path); + gtk_tree_model_get_iter(filter,&filter_iter,path_converted); + { gtk_tree_model_filter_convert_iter_to_child_iter(GTK_TREE_MODEL_FILTER(filter),&iter,&filter_iter); gboolean status = 0; char *service_name; @@ -413,24 +409,25 @@ void on_system_kill_confirmed(GtkWidget *self,char *service_name){ yon_launch(command); } -void on_system_launch_clicked(GtkWidget *self, main_window *widgets){ +void on_system_launch_clicked(GtkWidget *self, char *path, main_window *widgets){ if (self){}; - GtkTreeIter iter; + GtkTreeIter iter, filter_iter; GtkTreeModel *model; - GtkWidget *Tree; + GtkTreeModel *filter; if (gtk_notebook_get_current_page(GTK_NOTEBOOK(widgets->MainNotebook))==0){ model = GTK_TREE_MODEL(widgets->SystemList); - Tree = widgets->SystemUnitsTree; + filter = GTK_TREE_MODEL(widgets->SystemFilter); } else { model = GTK_TREE_MODEL(widgets->UserList); - Tree = widgets->UserUnitsTree; + filter = GTK_TREE_MODEL(widgets->UserFilter); } - if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(Tree)),&model,&iter)){ + GtkTreePath *path_converted = gtk_tree_path_new_from_string(path); + gtk_tree_model_get_iter(filter,&filter_iter,path_converted); + { + gtk_tree_model_filter_convert_iter_to_child_iter(GTK_TREE_MODEL_FILTER(filter),&iter,&filter_iter); gboolean status = 0; char *service_name; gtk_tree_model_get(model,&iter,4,&status,5,&service_name,-1); - yon_launch((!status)==1 ? service_start_command(service_name) : \ - service_stop_command(service_name)); int size; config_str result = yon_config_load(service_check_active_command(service_name),&size); yon_char_remove_last_symbol(result[0],'\n'); @@ -444,12 +441,15 @@ void on_system_launch_clicked(GtkWidget *self, main_window *widgets){ int answer = yon_confirmation_dialog_call(self,&data); if (answer) gtk_list_store_set(GTK_LIST_STORE(model),&iter,4,0,-1); - } else { - gtk_list_store_set(GTK_LIST_STORE(model),&iter,4,1,-1); } } else { gtk_list_store_set(GTK_LIST_STORE(model),&iter,4,0,-1); } + yon_launch((!status)==1 ? service_start_command(service_name) : \ + service_stop_command(service_name)); + if (!status) { + gtk_list_store_set(GTK_LIST_STORE(model),&iter,4,1,-1); + } } yon_char_parsed_free(result,size); } @@ -1315,15 +1315,19 @@ void yon_main_window_complete(main_window *widgets){ widgets->SystemFilter = GTK_TREE_MODEL_FILTER(gtk_builder_get_object(builder,"SystemFilter")); widgets->UserFilter = GTK_TREE_MODEL_FILTER(gtk_builder_get_object(builder,"UserFilter")); widgets->SystemStatusButton=yon_gtk_builder_get_widget(builder,"SystemStatusButton"); + widgets->ConfigAutostartCell = GTK_CELL_RENDERER(gtk_builder_get_object(builder,"ConfigAutostartCell")); + widgets->ConfigAutostopCell = GTK_CELL_RENDERER(gtk_builder_get_object(builder,"ConfigAutostopCell")); + widgets->ConfigBlockCell = GTK_CELL_RENDERER(gtk_builder_get_object(builder,"ConfigBlockCell")); + widgets->SystemAutostartCell = GTK_CELL_RENDERER(gtk_builder_get_object(builder,"SystemAutostartCell")); + widgets->SystemLaunchedCell = GTK_CELL_RENDERER(gtk_builder_get_object(builder,"SystemLaunchedCell")); + + widgets->UserConfigAutostartCell = GTK_CELL_RENDERER(gtk_builder_get_object(builder,"UserConfigAutostartCell")); + widgets->UserConfigAutostopCell = GTK_CELL_RENDERER(gtk_builder_get_object(builder,"UserConfigAutostopCell")); + widgets->UserConfigBlockCell = GTK_CELL_RENDERER(gtk_builder_get_object(builder,"UserConfigBlockCell")); + widgets->UserSystemAutostartCell = GTK_CELL_RENDERER(gtk_builder_get_object(builder,"UserSystemAutostartCell")); + widgets->UserSystemLaunchedCell = GTK_CELL_RENDERER(gtk_builder_get_object(builder,"UserSystemLaunchedCell")); widgets->SystemMenu = yon_rmb_menu_setup(widgets->SystemUnitsTree,NULL,NULL, - CONFIGURE_CONFIGURATION_LABEL,NULL,NULL,NULL, - AUTOSTART_LABEL,play_icon_path,on_config_autostart_clicked,widgets, - AUTOSTOP_LABEL,stop_icon_path,on_config_autostop_clicked,widgets, - BLOCK_LABEL,block_icon_path,on_config_block_clicked,widgets, - SYSTEM_CONFIGURATION_LABEL,NULL,NULL,NULL, - AUTOSTART_LABEL,start_icon_path,on_system_autostart_clicked,widgets, - LAUNCHED_LABEL,launch_icon_path,on_system_launch_clicked,widgets, - RESTART_LABEL,update_icon_path,on_system_restart_clicked,widgets, + RESTART_LABEL,update_icon_path,G_CALLBACK(on_system_restart_clicked),widgets, STATUS_LABEL,status_icon_path,on_system_info_clicked,widgets, SHOW_LOG_LABEL,log_icon_path,on_system_log_clicked,widgets, SHOW_SOURCE_LABEL,source_icon_path,on_system_edit_clicked,widgets, @@ -1345,14 +1349,7 @@ void yon_main_window_complete(main_window *widgets){ widgets->UserServiceLabel=yon_gtk_builder_get_widget(builder,"UserServiceLabel"); widgets->UserDescriptionLabel=yon_gtk_builder_get_widget(builder,"UserDescriptionLabel"); widgets->UserMenu = yon_rmb_menu_setup(widgets->UserUnitsTree,NULL,NULL, - CONFIGURE_CONFIGURATION_LABEL,NULL,NULL,NULL, - AUTOSTART_LABEL,play_icon_path,on_config_autostart_clicked,widgets, - AUTOSTOP_LABEL,stop_icon_path,on_config_autostop_clicked,widgets, - BLOCK_LABEL,block_icon_path,on_config_block_clicked,widgets, - SYSTEM_CONFIGURATION_LABEL,NULL,NULL,NULL, - AUTOSTART_LABEL,start_icon_path,on_system_autostart_clicked,widgets, - LAUNCHED_LABEL,launch_icon_path,on_system_launch_clicked,widgets, - RESTART_LABEL,update_icon_path,on_system_restart_clicked,widgets, + RESTART_LABEL,update_icon_path,G_CALLBACK(on_system_restart_clicked),widgets, STATUS_LABEL,status_icon_path,on_user_info_clicked,widgets, SHOW_LOG_LABEL,log_icon_path,on_user_log_clicked,widgets, SHOW_SOURCE_LABEL,source_icon_path,on_user_edit_clicked,widgets, @@ -1373,9 +1370,12 @@ void yon_main_window_complete(main_window *widgets){ NULL); { GList *list = gtk_container_get_children(GTK_CONTAINER(widgets->SystemMenu->menu)); - gtk_style_context_add_class(gtk_widget_get_style_context(g_list_nth_data(list,3)),"separatorBottom"); - gtk_style_context_add_class(gtk_widget_get_style_context(g_list_nth_data(list,8)),"separatorTop"); - gtk_style_context_add_class(gtk_widget_get_style_context(g_list_nth_data(list,6)),"separatorBottom"); + gtk_style_context_add_class(gtk_widget_get_style_context(g_list_nth_data(list,1)),"separatorTop"); + g_list_free(list); + } + { + GList *list = gtk_container_get_children(GTK_CONTAINER(widgets->UserMenu->menu)); + gtk_style_context_add_class(gtk_widget_get_style_context(g_list_nth_data(list,1)),"separatorTop"); g_list_free(list); } widgets->SystemServiceLabel=yon_gtk_builder_get_widget(builder,"SystemServiceLabel"); @@ -1419,6 +1419,18 @@ void yon_main_window_complete(main_window *widgets){ g_signal_connect(G_OBJECT(widgets->UnitsStatusListMenuItem),"activate",G_CALLBACK(on_units_list_status),widgets); g_signal_connect(G_OBJECT(widgets->SocketsStatusListMenuItem),"activate",G_CALLBACK(on_sockets_list_status),widgets); g_signal_connect(G_OBJECT(widgets->TimersStatusListMenuItem),"activate",G_CALLBACK(on_timers_list_status),widgets); + + g_signal_connect(G_OBJECT(widgets->ConfigAutostartCell),"toggled",G_CALLBACK(on_config_autostart_clicked),widgets); + g_signal_connect(G_OBJECT(widgets->ConfigAutostopCell),"toggled",G_CALLBACK(on_config_autostop_clicked),widgets); + g_signal_connect(G_OBJECT(widgets->ConfigBlockCell),"toggled",G_CALLBACK(on_config_block_clicked),widgets); + g_signal_connect(G_OBJECT(widgets->SystemAutostartCell),"toggled",G_CALLBACK(on_system_autostart_clicked),widgets); + g_signal_connect(G_OBJECT(widgets->SystemLaunchedCell),"toggled",G_CALLBACK(on_system_launch_clicked),widgets); + + g_signal_connect(G_OBJECT(widgets->UserConfigAutostartCell),"toggled",G_CALLBACK(on_config_autostart_clicked),widgets); + g_signal_connect(G_OBJECT(widgets->UserConfigAutostopCell),"toggled",G_CALLBACK(on_config_autostop_clicked),widgets); + g_signal_connect(G_OBJECT(widgets->UserConfigBlockCell),"toggled",G_CALLBACK(on_config_block_clicked),widgets); + g_signal_connect(G_OBJECT(widgets->UserSystemAutostartCell),"toggled",G_CALLBACK(on_system_autostart_clicked),widgets); + g_signal_connect(G_OBJECT(widgets->UserSystemLaunchedCell),"toggled",G_CALLBACK(on_system_launch_clicked),widgets); yon_gtk_tree_view_minimal_fixed_size_set_full(GTK_TREE_VIEW(widgets->UserUnitsTree)); yon_gtk_tree_view_minimal_fixed_size_set_full(GTK_TREE_VIEW(widgets->SystemUnitsTree)); yon_gtk_tree_view_minimal_fixed_size_set_full(GTK_TREE_VIEW(widgets->ConfigMainTree)); diff --git a/source/ubl-settings-services.h b/source/ubl-settings-services.h index 7d9eb44..443dfb8 100644 --- a/source/ubl-settings-services.h +++ b/source/ubl-settings-services.h @@ -194,6 +194,17 @@ typedef struct { GtkTreeModelFilter *SystemFilter; GtkTreeModelFilter *UserFilter; + GtkCellRenderer *ConfigAutostartCell; + GtkCellRenderer *ConfigAutostopCell; + GtkCellRenderer *ConfigBlockCell; + GtkCellRenderer *SystemAutostartCell; + GtkCellRenderer *SystemLaunchedCell; + + GtkCellRenderer *UserConfigAutostartCell; + GtkCellRenderer *UserConfigAutostopCell; + GtkCellRenderer *UserConfigBlockCell; + GtkCellRenderer *UserSystemAutostartCell; + GtkCellRenderer *UserSystemLaunchedCell; } main_window; typedef struct { @@ -280,19 +291,19 @@ gboolean on_context_menu_open(GtkWidget *self,GdkEventButton *event, main_window GtkWidget *yon_menu_separator_create(); -void on_config_autostart_clicked(GtkWidget *self, main_window *widgets); +void on_config_autostart_clicked(GtkCellRenderer *self, char *path, main_window *widgets); void on_activate(GtkTreeView *self, main_window *widgets); -void on_config_autostop_clicked(GtkWidget *self, main_window *widgets); +void on_config_autostop_clicked(GtkCellRenderer *self, char *path, main_window *widgets); -void on_config_block_clicked(GtkWidget *self, main_window *widgets); +void on_config_block_clicked(GtkCellRenderer *self, char *path, main_window *widgets); -void on_system_autostart_clicked(GtkWidget *self, main_window *widgets); +void on_system_autostart_clicked(GtkCellRenderer *self, char *path, main_window *widgets); void on_system_kill_confirmed(GtkWidget *self,char *service_name); -void on_system_launch_clicked(GtkWidget *self, main_window *widgets); +void on_system_launch_clicked(GtkWidget *self, char *path, main_window *widgets); void on_system_restart_clicked(GtkWidget *self, main_window *widgets); diff --git a/ubl-settings-services.glade b/ubl-settings-services.glade index 350f82e..e8534d7 100644 --- a/ubl-settings-services.glade +++ b/ubl-settings-services.glade @@ -239,10 +239,6 @@ - - True - False - True False @@ -337,83 +333,6 @@ 3 - - - True - False - 5 - - - True - True - True - - - True - True - False - True - menu2 - up - - - - - - - - - - False - True - 0 - - - - - True - True - True - - - True - True - False - True - menu2 - - - - - - - - - - False - True - 1 - - - - - False - True - 4 - - False @@ -664,7 +583,7 @@ 20 Autostart - + 0 @@ -678,7 +597,7 @@ 20 Autostop - + 1 @@ -692,7 +611,7 @@ 20 Block - + 2 @@ -706,7 +625,7 @@ 20 Autostart - + 3 @@ -720,7 +639,7 @@ 20 Launched - + 4 @@ -972,83 +891,6 @@ 3 - - - True - False - 5 - - - True - True - True - - - True - True - False - True - menu2 - up - - - - - - - - - - False - True - 0 - - - - - True - True - True - - - True - True - False - True - menu2 - - - - - - - - - - False - True - 1 - - - - - False - True - 4 - - False @@ -1259,7 +1101,7 @@ 20 Autostart - + 0 @@ -1273,7 +1115,7 @@ 20 Autostop - + 1 @@ -1287,7 +1129,7 @@ 20 Block - + 2 @@ -1301,7 +1143,7 @@ 20 Autostart - + 3 @@ -1315,7 +1157,7 @@ 20 Launched - + 4 @@ -1945,4 +1787,8 @@ + + True + False + From ed110909e4a7eceb6f4386d272ba912ce91e8b4f Mon Sep 17 00:00:00 2001 From: Ivan Yarcev Date: Fri, 29 Mar 2024 16:44:48 +0600 Subject: [PATCH 15/31] Added sorting for config files, sessions and timers tables --- ubl-settings-services.glade | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/ubl-settings-services.glade b/ubl-settings-services.glade index e8534d7..31e0b21 100644 --- a/ubl-settings-services.glade +++ b/ubl-settings-services.glade @@ -1387,6 +1387,7 @@ fixed 20 File + 0 @@ -1401,6 +1402,7 @@ fixed 20 Change date + 1 @@ -1414,6 +1416,7 @@ 20 Description True + 2 @@ -1546,6 +1549,7 @@ fixed 20 Session ID + 0 @@ -1560,6 +1564,7 @@ fixed 20 Status + 1 @@ -1574,6 +1579,7 @@ fixed 20 User ID + 2 @@ -1588,6 +1594,7 @@ fixed 20 User name + 3 @@ -1601,6 +1608,7 @@ 20 Seat ID True + 4 @@ -1672,6 +1680,7 @@ fixed 20 Timer + 0 @@ -1686,6 +1695,7 @@ fixed 20 Next + 1 @@ -1700,6 +1710,7 @@ fixed 20 Left + 2 @@ -1714,6 +1725,7 @@ fixed 20 Last + 3 @@ -1728,6 +1740,7 @@ fixed 20 Passed + 4 @@ -1741,6 +1754,7 @@ 20 Activates True + 5 From b14d076a956fa137b1dc3d44b43af710c92ebee9 Mon Sep 17 00:00:00 2001 From: Ivan Yarcev Date: Fri, 29 Mar 2024 17:02:10 +0600 Subject: [PATCH 16/31] Switched search entry for filtering instead of searching --- source/ubl-settings-services.c | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/source/ubl-settings-services.c b/source/ubl-settings-services.c index 5123a58..7377295 100644 --- a/source/ubl-settings-services.c +++ b/source/ubl-settings-services.c @@ -341,23 +341,28 @@ void on_system_autostart_clicked(GtkCellRenderer *self, char *path, main_window gboolean yon_filter(GtkTreeModel* model, GtkTreeIter *iter, main_window *widgets){ gboolean autostart,autostop,masked,type,loaded,inactive; - gtk_tree_model_get(model,iter,0,&autostart,1,&autostop,2,&masked,7,&type,8,&loaded,9,&inactive,-1); + char *name; + gtk_tree_model_get(model,iter,0,&autostart,1,&autostop,2,&masked,5,&name,7,&type,8,&loaded,9,&inactive,-1); GtkWidget *combo=NULL; GtkWidget *loaded_check=NULL; GtkWidget *active_check=NULL; + GtkWidget *name_entry = NULL; int page = gtk_notebook_get_current_page(GTK_NOTEBOOK(widgets->MainNotebook)); if (page == 0){ combo = widgets->SystemFiltersCombo; loaded_check = widgets->SystemUnloadedShowCheck; active_check = widgets->SystemInactiveShowCheck; + name_entry = widgets->SystemSearchEntry; } else if (page == 1){ combo = widgets->UserFiltersCombo; loaded_check = widgets->UserUnloadedShowCheck; active_check = widgets->UserInactiveShowCheck; + name_entry = widgets->UserSearchEntry; } - int type_filter=1; - int active_filter=0; - int loaded_filter=0; + int type_filter = 1; + int active_filter = 0; + int loaded_filter = 0; + int name_filter = 1; int filter_active = gtk_combo_box_get_active(GTK_COMBO_BOX(combo)); if (filter_active>0){ @@ -383,7 +388,10 @@ gboolean yon_filter(GtkTreeModel* model, GtkTreeIter *iter, main_window *widgets loaded_filter=1; } - if (type_filter&&(active_filter||inactive)&&(loaded_filter||loaded)){ + char *name_text = (char*)gtk_entry_get_text(GTK_ENTRY(name_entry)); + if (name&&!yon_char_is_empty(name_text)&&!strstr(name,name_text)) + name_filter=0; + if (type_filter&&(active_filter||inactive)&&(loaded_filter||loaded)&&name_filter){ return 1; } return 0; From 755417237844492dcc3c4fbd199cdbb7030e84ef Mon Sep 17 00:00:00 2001 From: Ivan Yarcev Date: Mon, 1 Apr 2024 10:40:13 +0600 Subject: [PATCH 17/31] User mode implementations --- source/ubl-settings-services.c | 92 ++++++++++++++++++++++++++++------ source/ubl-settings-services.h | 7 ++- source/ubl-strings.h | 4 +- ubl-settings-services.pot | 4 ++ ubl-settings-services_ru.po | 4 ++ 5 files changed, 94 insertions(+), 17 deletions(-) diff --git a/source/ubl-settings-services.c b/source/ubl-settings-services.c index 7377295..1905d77 100644 --- a/source/ubl-settings-services.c +++ b/source/ubl-settings-services.c @@ -440,14 +440,15 @@ void on_system_launch_clicked(GtkWidget *self, char *path, main_window *widgets) config_str result = yon_config_load(service_check_active_command(service_name),&size); yon_char_remove_last_symbol(result[0],'\n'); if (size>0){ + int answer = 0; if (!strcmp(result[0],"active")){ if (status){ dialog_confirmation_data data; data.action_text=STOP_SERVICE_WARMING_LABEL(service_name); data.function=(void*)(void*)on_system_kill_confirmed; data.data=service_name; - int answer = yon_confirmation_dialog_call(self,&data); - if (answer) + answer = yon_confirmation_dialog_call(widgets->Window,&data); + if (answer==GTK_RESPONSE_ACCEPT) gtk_list_store_set(GTK_LIST_STORE(model),&iter,4,0,-1); } } else { @@ -1239,17 +1240,22 @@ void on_tree_selection_changed(GtkWidget *self, main_window *widgets){ gtk_tree_model_get(model,&iter,5,&name,6,&descr,-1); gtk_label_set_text(GTK_LABEL(widgets->SystemServiceLabel),name); gtk_label_set_text(GTK_LABEL(widgets->SystemDescriptionLabel),descr); - gtk_widget_set_sensitive(widgets->SystemEditButton,1); - gtk_widget_set_sensitive(widgets->SystemLogButton,1); gtk_widget_set_sensitive(widgets->SystemStatusButton,1); gtk_widget_set_sensitive(widgets->SystemInfoButton,1); + if (getuid()==0){ + gtk_widget_set_sensitive(widgets->SystemEditButton,1); + gtk_widget_set_sensitive(widgets->SystemLogButton,1); + + } } else { gtk_label_set_text(GTK_LABEL(widgets->SystemServiceLabel),""); gtk_label_set_text(GTK_LABEL(widgets->SystemDescriptionLabel),""); - gtk_widget_set_sensitive(widgets->SystemEditButton,0); - gtk_widget_set_sensitive(widgets->SystemLogButton,0); gtk_widget_set_sensitive(widgets->SystemStatusButton,0); gtk_widget_set_sensitive(widgets->SystemInfoButton,0); + if (getuid()==0){ + gtk_widget_set_sensitive(widgets->SystemEditButton,0); + gtk_widget_set_sensitive(widgets->SystemLogButton,0); + } } } else if (page==1){ model = GTK_TREE_MODEL(widgets->UserList); @@ -1259,17 +1265,22 @@ void on_tree_selection_changed(GtkWidget *self, main_window *widgets){ gtk_tree_model_get(model,&iter,5,&name,6,&descr,-1); gtk_label_set_text(GTK_LABEL(widgets->UserServiceLabel),name); gtk_label_set_text(GTK_LABEL(widgets->UserDescriptionLabel),descr); - gtk_widget_set_sensitive(widgets->UserEditButton,1); - gtk_widget_set_sensitive(widgets->UserLogButton,1); gtk_widget_set_sensitive(widgets->UserStatusButton,1); gtk_widget_set_sensitive(widgets->UserInfoButton,1); + if (getuid()==0){ + gtk_widget_set_sensitive(widgets->UserEditButton,1); + gtk_widget_set_sensitive(widgets->UserLogButton,1); + } } else { gtk_label_set_text(GTK_LABEL(widgets->UserServiceLabel),""); gtk_label_set_text(GTK_LABEL(widgets->UserDescriptionLabel),""); - gtk_widget_set_sensitive(widgets->UserEditButton,0); - gtk_widget_set_sensitive(widgets->UserLogButton,0); gtk_widget_set_sensitive(widgets->UserStatusButton,0); gtk_widget_set_sensitive(widgets->UserInfoButton,0); + if (getuid()==0){ + gtk_widget_set_sensitive(widgets->UserEditButton,0); + gtk_widget_set_sensitive(widgets->UserLogButton,0); + + } } } @@ -1278,6 +1289,29 @@ void on_tree_selection_changed(GtkWidget *self, main_window *widgets){ } } +void on_root_get_root(char *argline){ + yon_launch(argline); +} + +void on_root_access(GtkWidget *self, main_window *widgets){ + if (self){}; + if (getuid()){ + char *argline = LocaleName; + for (int i=1;iWindow); + } + } +} + /**yon_main_window_complete(main_window *widgets) * [EN] * @@ -1431,14 +1465,22 @@ void yon_main_window_complete(main_window *widgets){ g_signal_connect(G_OBJECT(widgets->ConfigAutostartCell),"toggled",G_CALLBACK(on_config_autostart_clicked),widgets); g_signal_connect(G_OBJECT(widgets->ConfigAutostopCell),"toggled",G_CALLBACK(on_config_autostop_clicked),widgets); g_signal_connect(G_OBJECT(widgets->ConfigBlockCell),"toggled",G_CALLBACK(on_config_block_clicked),widgets); - g_signal_connect(G_OBJECT(widgets->SystemAutostartCell),"toggled",G_CALLBACK(on_system_autostart_clicked),widgets); - g_signal_connect(G_OBJECT(widgets->SystemLaunchedCell),"toggled",G_CALLBACK(on_system_launch_clicked),widgets); g_signal_connect(G_OBJECT(widgets->UserConfigAutostartCell),"toggled",G_CALLBACK(on_config_autostart_clicked),widgets); g_signal_connect(G_OBJECT(widgets->UserConfigAutostopCell),"toggled",G_CALLBACK(on_config_autostop_clicked),widgets); g_signal_connect(G_OBJECT(widgets->UserConfigBlockCell),"toggled",G_CALLBACK(on_config_block_clicked),widgets); - g_signal_connect(G_OBJECT(widgets->UserSystemAutostartCell),"toggled",G_CALLBACK(on_system_autostart_clicked),widgets); - g_signal_connect(G_OBJECT(widgets->UserSystemLaunchedCell),"toggled",G_CALLBACK(on_system_launch_clicked),widgets); + if (getuid()==0){ + g_signal_connect(G_OBJECT(widgets->SystemAutostartCell),"toggled",G_CALLBACK(on_system_autostart_clicked),widgets); + g_signal_connect(G_OBJECT(widgets->SystemLaunchedCell),"toggled",G_CALLBACK(on_system_launch_clicked),widgets); + + g_signal_connect(G_OBJECT(widgets->UserSystemAutostartCell),"toggled",G_CALLBACK(on_system_autostart_clicked),widgets); + g_signal_connect(G_OBJECT(widgets->UserSystemLaunchedCell),"toggled",G_CALLBACK(on_system_launch_clicked),widgets); + } else { + gtk_widget_set_sensitive(widgets->SystemUpdateButton,0); + gtk_widget_set_sensitive(widgets->UserUpdateButton,0); + gtk_widget_set_sensitive(widgets->SystemPrevButton,0); + gtk_widget_set_sensitive(widgets->UserPrevButton,0); + } yon_gtk_tree_view_minimal_fixed_size_set_full(GTK_TREE_VIEW(widgets->UserUnitsTree)); yon_gtk_tree_view_minimal_fixed_size_set_full(GTK_TREE_VIEW(widgets->SystemUnitsTree)); yon_gtk_tree_view_minimal_fixed_size_set_full(GTK_TREE_VIEW(widgets->ConfigMainTree)); @@ -1492,6 +1534,23 @@ void yon_main_window_complete(main_window *widgets){ g_signal_connect(G_OBJECT(widgets->SaveCustomMenuItem),"activate",G_CALLBACK(on_config_custom_save),NULL); g_signal_connect(G_OBJECT(widgets->SystemUnitsTree),"cursor-changed",G_CALLBACK(on_tree_selection_changed),widgets); g_signal_connect(G_OBJECT(widgets->UserUnitsTree),"cursor-changed",G_CALLBACK(on_tree_selection_changed),widgets); + GtkWidget *root_item = gtk_menu_item_new(); + gtk_style_context_add_class(gtk_widget_get_style_context(root_item),"menuitemtop"); + gtk_style_context_add_class(gtk_widget_get_style_context(widgets->DocumentationMenuItem),"menuitemmiddle"); + gtk_style_context_remove_class(gtk_widget_get_style_context(widgets->DocumentationMenuItem),"menuitemtop"); + GtkWidget *box = gtk_box_new(GTK_ORIENTATION_HORIZONTAL,5); + GtkWidget *root_label = gtk_label_new(ROOT_CHECK_LABEL); + GtkWidget *root_check = gtk_check_button_new(); + gtk_menu_shell_prepend(GTK_MENU_SHELL(gtk_widget_get_parent(widgets->DocumentationMenuItem)),root_item); + gtk_box_pack_start(GTK_BOX(box),root_label,1,1,0); + gtk_box_pack_start(GTK_BOX(box),root_check,0,0,0); + gtk_container_add(GTK_CONTAINER(root_item),box); + gtk_widget_show_all(root_item); + g_signal_connect(G_OBJECT(root_item),"activate", G_CALLBACK(on_root_access),widgets); + if (getuid()==0) { + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(root_check),1); + gtk_widget_set_sensitive(root_item,0); + } gtk_tree_model_filter_set_visible_func(widgets->UserFilter,(GtkTreeModelFilterVisibleFunc)yon_filter,widgets,NULL); gtk_tree_model_filter_set_visible_func(widgets->SystemFilter,(GtkTreeModelFilterVisibleFunc)yon_filter,widgets,NULL); gtk_tree_view_set_search_column(GTK_TREE_VIEW(widgets->UserUnitsTree),5); @@ -1519,8 +1578,11 @@ int main(int argc, char *argv[]){ yon_main_window_complete((main_window*)widgets); char *path = yon_char_unite(yon_ubl_user_get_home_directory(),"/.config/",LocaleName,"/",LocaleName,".conf",NULL); yon_window_config_load(path); - if (getuid()!=0) + if (getuid()!=0){ yon_ubl_status_box_render(ROOT_WARNING_LABEL,BACKGROUND_IMAGE_FAIL_TYPE); + } + main_config.launch_arguments=argv; + main_config.launch_size=argc; gtk_main(); return 0; } \ No newline at end of file diff --git a/source/ubl-settings-services.h b/source/ubl-settings-services.h index 443dfb8..e017e9a 100644 --- a/source/ubl-settings-services.h +++ b/source/ubl-settings-services.h @@ -128,6 +128,8 @@ typedef struct { GtkTreeModel *SourceFilter; int update_thread_active; + config_str launch_arguments; + int launch_size; } config; @@ -396,4 +398,7 @@ gboolean on_blocked_filter(GtkTreeModel *model, GtkTreeIter *iter,void *data); gboolean on_source_user_filter(GtkTreeModel *model, GtkTreeIter *iter,void *data); -gboolean on_source_system_filter(GtkTreeModel *model, GtkTreeIter *iter,void *data); \ No newline at end of file +gboolean on_source_system_filter(GtkTreeModel *model, GtkTreeIter *iter,void *data); + +void on_root_get_root(char *argline); +void on_root_access(GtkWidget *self, main_window *widgets); \ No newline at end of file diff --git a/source/ubl-strings.h b/source/ubl-strings.h index b8d8ee6..c2493a1 100644 --- a/source/ubl-strings.h +++ b/source/ubl-strings.h @@ -122,4 +122,6 @@ #define STATE_LISTENING_LABEL _("listening") #define STATE_EXITED_LABEL _("exited") #define STATE_MOUNTED_LABEL _("mounted") -#define STATE_PLUGGED_LABEL _("plugged") \ No newline at end of file +#define STATE_PLUGGED_LABEL _("plugged") + +#define ROOT_CHECK_LABEL _("Upgrade to root") \ No newline at end of file diff --git a/ubl-settings-services.pot b/ubl-settings-services.pot index 2edf990..8ab1b5c 100644 --- a/ubl-settings-services.pot +++ b/ubl-settings-services.pot @@ -414,3 +414,7 @@ msgstr "" #: source/ubl-strings.h:125 msgid "plugged" msgstr "" + +#: source/ubl-strings.h:127 +msgid "Upgrade to root" +msgstr "" diff --git a/ubl-settings-services_ru.po b/ubl-settings-services_ru.po index 9167fac..43b2602 100644 --- a/ubl-settings-services_ru.po +++ b/ubl-settings-services_ru.po @@ -417,3 +417,7 @@ msgstr "примонтирован" #: source/ubl-strings.h:125 msgid "plugged" msgstr "подключен" + +#: source/ubl-strings.h:127 +msgid "Upgrade to root" +msgstr "Повысить права до root" From 10f5380a5e2d44516cd9caa5fd5ed993f1a2f736 Mon Sep 17 00:00:00 2001 From: Ivan Yarcev Date: Mon, 1 Apr 2024 11:02:11 +0600 Subject: [PATCH 18/31] Fixed loading file chooser icon --- source/ubl-settings-services.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/source/ubl-settings-services.c b/source/ubl-settings-services.c index 1905d77..66819d9 100644 --- a/source/ubl-settings-services.c +++ b/source/ubl-settings-services.c @@ -17,6 +17,8 @@ void yon_load_proceed(YON_CONFIG_TYPE type){ textdomain(template_ui_LocaleName); GtkWidget *dialog = gtk_file_chooser_dialog_new(template_app_information.app_title,NULL,GTK_FILE_CHOOSER_ACTION_SAVE,CANCEL_LABEL,GTK_RESPONSE_CANCEL,OPEN_LABEL,GTK_RESPONSE_ACCEPT,NULL); textdomain(LocaleName); + gtk_window_set_icon_name(GTK_WINDOW(dialog),"com.ublinux.ubl-settings-services"); + gtk_window_set_title(GTK_WINDOW(dialog),TITLE_LABEL); GtkFileFilter *filter = gtk_file_filter_new(); gtk_file_filter_add_pattern(filter,"*.ini"); gtk_file_filter_set_name(filter, "*.ini"); From c05b7cdeb152d234615bb048033a8e0035f84806 Mon Sep 17 00:00:00 2001 From: Ivan Yarcev Date: Mon, 1 Apr 2024 11:53:46 +0600 Subject: [PATCH 19/31] Confirmation windows removed --- source/ubl-settings-services.c | 20 +++--- source/ubl-strings.h | 3 +- ubl-settings-services.pot | 116 ++++++++++++++++---------------- ubl-settings-services_ru.po | 119 +++++++++++++++++---------------- 4 files changed, 129 insertions(+), 129 deletions(-) diff --git a/source/ubl-settings-services.c b/source/ubl-settings-services.c index 66819d9..a5d1aaa 100644 --- a/source/ubl-settings-services.c +++ b/source/ubl-settings-services.c @@ -442,16 +442,10 @@ void on_system_launch_clicked(GtkWidget *self, char *path, main_window *widgets) config_str result = yon_config_load(service_check_active_command(service_name),&size); yon_char_remove_last_symbol(result[0],'\n'); if (size>0){ - int answer = 0; if (!strcmp(result[0],"active")){ if (status){ - dialog_confirmation_data data; - data.action_text=STOP_SERVICE_WARMING_LABEL(service_name); - data.function=(void*)(void*)on_system_kill_confirmed; - data.data=service_name; - answer = yon_confirmation_dialog_call(widgets->Window,&data); - if (answer==GTK_RESPONSE_ACCEPT) - gtk_list_store_set(GTK_LIST_STORE(model),&iter,4,0,-1); + on_system_kill_confirmed(NULL,service_name); + gtk_list_store_set(GTK_LIST_STORE(model),&iter,4,0,-1); } } else { gtk_list_store_set(GTK_LIST_STORE(model),&iter,4,0,-1); @@ -591,7 +585,7 @@ void on_system_update_hz_clicked(GtkWidget *self, main_window *widgets){ if (self){} if (widgets){ dialog_confirmation_data *data = malloc(sizeof(dialog_confirmation_data)); - data->action_text = "Are you sure?"; + data->action_text = RELOAD_SERVICE_WARMING_LABEL("systemd"); data->data = widgets; data->function = (data_function)yon_system_systemd_restart; yon_confirmation_dialog_call(self,data); @@ -603,7 +597,7 @@ void on_system_update_clicked(GtkWidget *self, main_window *widgets){ if (self){} if (widgets){ dialog_confirmation_data *data = malloc(sizeof(dialog_confirmation_data)); - data->action_text = "Are you sure?"; + data->action_text = REEXEC_SERVICE_WARMING_LABEL("systemd"); data->data = widgets; data->function = (data_function)yon_system_systemd_reexec; yon_confirmation_dialog_call(self,data); @@ -714,7 +708,7 @@ void on_user_update_hz_clicked(GtkWidget *self, main_window *widgets){ if (self){} if (widgets){ dialog_confirmation_data *data = malloc(sizeof(dialog_confirmation_data)); - data->action_text = "Are you sure?"; + data->action_text = REEXEC_SERVICE_WARMING_LABEL("systemd"); data->data = widgets; data->function = (data_function)yon_system_systemd_restart; yon_confirmation_dialog_call(self,data); @@ -727,7 +721,7 @@ void on_user_update_clicked(GtkWidget *self, main_window *widgets){ if (self){} if (widgets){ dialog_confirmation_data *data = malloc(sizeof(dialog_confirmation_data)); - data->action_text = "Are you sure?"; + data->action_text = RELOAD_SERVICE_WARMING_LABEL("systemd"); data->data = widgets; data->function = (data_function)yon_system_systemd_reexec; yon_confirmation_dialog_call(self,data); @@ -1581,7 +1575,9 @@ int main(int argc, char *argv[]){ char *path = yon_char_unite(yon_ubl_user_get_home_directory(),"/.config/",LocaleName,"/",LocaleName,".conf",NULL); yon_window_config_load(path); if (getuid()!=0){ + textdomain(template_ui_LocaleName); yon_ubl_status_box_render(ROOT_WARNING_LABEL,BACKGROUND_IMAGE_FAIL_TYPE); + textdomain(LocaleName); } main_config.launch_arguments=argv; main_config.launch_size=argc; diff --git a/source/ubl-strings.h b/source/ubl-strings.h index c2493a1..ea30837 100644 --- a/source/ubl-strings.h +++ b/source/ubl-strings.h @@ -59,7 +59,8 @@ #define ERROR_LABEL _("Error has occured") #define SWITCH_OFF_ERROR_LABEL _("Service were not stopped") -#define STOP_SERVICE_WARMING_LABEL(target) yon_char_unite(_("Are you sure want to stop "),target,"?\n",_("The stop will be forced.\nThe system may become unstable."),NULL) +#define REEXEC_SERVICE_WARMING_LABEL(target) yon_char_unite(_("Are you sure want to restart "),target,"?\n",_("The system may become unstable."),NULL) +#define RELOAD_SERVICE_WARMING_LABEL(target) yon_char_unite(_("Are you sure want to reload "),target,"?\n",_("The system may become unstable."),NULL) #define DAYS_LABEL _("Days") #define HOURS_LABEL _("Hours") #define MINUTES_LABEL _("Minutes") diff --git a/ubl-settings-services.pot b/ubl-settings-services.pot index 8ab1b5c..9c59b4e 100644 --- a/ubl-settings-services.pot +++ b/ubl-settings-services.pot @@ -198,223 +198,225 @@ msgid "Service were not stopped" msgstr "" #: source/ubl-strings.h:62 -msgid "Are you sure want to stop " +msgid "Are you sure want to restart " msgstr "" -#: source/ubl-strings.h:62 -msgid "" -"The stop will be forced.\n" -"The system may become unstable." +#: source/ubl-strings.h:62 source/ubl-strings.h:63 +msgid "The system may become unstable." msgstr "" #: source/ubl-strings.h:63 -msgid "Days" +msgid "Are you sure want to reload " msgstr "" #: source/ubl-strings.h:64 -msgid "Hours" +msgid "Days" msgstr "" #: source/ubl-strings.h:65 -msgid "Minutes" +msgid "Hours" msgstr "" #: source/ubl-strings.h:66 +msgid "Minutes" +msgstr "" + +#: source/ubl-strings.h:67 msgid "Seconds" msgstr "" -#: source/ubl-strings.h:68 +#: source/ubl-strings.h:69 msgid "Active" msgstr "" -#: source/ubl-strings.h:69 +#: source/ubl-strings.h:70 msgid "Inactive" msgstr "" -#: source/ubl-strings.h:71 +#: source/ubl-strings.h:72 msgid "System units" msgstr "" -#: source/ubl-strings.h:72 +#: source/ubl-strings.h:73 msgid "User units" msgstr "" -#: source/ubl-strings.h:73 +#: source/ubl-strings.h:74 msgid "Config files" msgstr "" -#: source/ubl-strings.h:74 +#: source/ubl-strings.h:75 msgid "Sessions" msgstr "" -#: source/ubl-strings.h:75 +#: source/ubl-strings.h:76 msgid "Timers" msgstr "" -#: source/ubl-strings.h:77 +#: source/ubl-strings.h:78 msgid "System services status" msgstr "" -#: source/ubl-strings.h:78 +#: source/ubl-strings.h:79 msgid "User services status" msgstr "" -#: source/ubl-strings.h:79 +#: source/ubl-strings.h:80 msgid "Installed unit files" msgstr "" -#: source/ubl-strings.h:80 +#: source/ubl-strings.h:81 msgid "Units and status list" msgstr "" -#: source/ubl-strings.h:81 +#: source/ubl-strings.h:82 msgid "Sockets and status list" msgstr "" -#: source/ubl-strings.h:82 +#: source/ubl-strings.h:83 msgid "Timers and status list" msgstr "" -#: source/ubl-strings.h:84 +#: source/ubl-strings.h:85 msgid "Unit" msgstr "" -#: source/ubl-strings.h:86 +#: source/ubl-strings.h:87 msgid "Relaunch systemctl" msgstr "" -#: source/ubl-strings.h:87 +#: source/ubl-strings.h:88 msgid "Reexec systemctl" msgstr "" -#: source/ubl-strings.h:88 +#: source/ubl-strings.h:89 msgid "Show service information" msgstr "" -#: source/ubl-strings.h:89 +#: source/ubl-strings.h:90 msgid "Show service log" msgstr "" -#: source/ubl-strings.h:90 +#: source/ubl-strings.h:91 msgid "Show service source file" msgstr "" -#: source/ubl-strings.h:91 +#: source/ubl-strings.h:92 msgid "Show service properties" msgstr "" -#: source/ubl-strings.h:92 +#: source/ubl-strings.h:93 msgid "Show..." msgstr "" -#: source/ubl-strings.h:94 +#: source/ubl-strings.h:95 msgid "Show inactive" msgstr "" -#: source/ubl-strings.h:95 +#: source/ubl-strings.h:96 msgid "Show unloaded" msgstr "" -#: source/ubl-strings.h:97 +#: source/ubl-strings.h:98 msgid "File" msgstr "" -#: source/ubl-strings.h:98 +#: source/ubl-strings.h:99 msgid "Change date" msgstr "" -#: source/ubl-strings.h:99 +#: source/ubl-strings.h:100 msgid "Description" msgstr "" -#: source/ubl-strings.h:100 +#: source/ubl-strings.h:101 msgid "Edit" msgstr "" -#: source/ubl-strings.h:102 +#: source/ubl-strings.h:103 msgid "Session ID" msgstr "" -#: source/ubl-strings.h:103 +#: source/ubl-strings.h:104 msgid "User ID" msgstr "" -#: source/ubl-strings.h:104 +#: source/ubl-strings.h:105 msgid "User name" msgstr "" -#: source/ubl-strings.h:105 +#: source/ubl-strings.h:106 msgid "Seat ID" msgstr "" -#: source/ubl-strings.h:107 +#: source/ubl-strings.h:108 msgid "Start session" msgstr "" -#: source/ubl-strings.h:108 +#: source/ubl-strings.h:109 msgid "Stop session" msgstr "" -#: source/ubl-strings.h:109 +#: source/ubl-strings.h:110 msgid "Lock session" msgstr "" -#: source/ubl-strings.h:111 +#: source/ubl-strings.h:112 msgid "Timer" msgstr "" -#: source/ubl-strings.h:112 +#: source/ubl-strings.h:113 msgid "Next" msgstr "" -#: source/ubl-strings.h:113 +#: source/ubl-strings.h:114 msgid "Left" msgstr "" -#: source/ubl-strings.h:114 +#: source/ubl-strings.h:115 msgid "Last" msgstr "" -#: source/ubl-strings.h:115 +#: source/ubl-strings.h:116 msgid "Passed" msgstr "" -#: source/ubl-strings.h:116 +#: source/ubl-strings.h:117 msgid "Activates" msgstr "" -#: source/ubl-strings.h:118 +#: source/ubl-strings.h:119 msgid "active" msgstr "" -#: source/ubl-strings.h:119 +#: source/ubl-strings.h:120 msgid "dead" msgstr "" -#: source/ubl-strings.h:120 +#: source/ubl-strings.h:121 msgid "waiting" msgstr "" -#: source/ubl-strings.h:121 +#: source/ubl-strings.h:122 msgid "running" msgstr "" -#: source/ubl-strings.h:122 +#: source/ubl-strings.h:123 msgid "listening" msgstr "" -#: source/ubl-strings.h:123 +#: source/ubl-strings.h:124 msgid "exited" msgstr "" -#: source/ubl-strings.h:124 +#: source/ubl-strings.h:125 msgid "mounted" msgstr "" -#: source/ubl-strings.h:125 +#: source/ubl-strings.h:126 msgid "plugged" msgstr "" -#: source/ubl-strings.h:127 +#: source/ubl-strings.h:128 msgid "Upgrade to root" msgstr "" diff --git a/ubl-settings-services_ru.po b/ubl-settings-services_ru.po index 43b2602..e7c7a6b 100644 --- a/ubl-settings-services_ru.po +++ b/ubl-settings-services_ru.po @@ -199,225 +199,226 @@ msgid "Service were not stopped" msgstr "Сервис не был остановлен" #: source/ubl-strings.h:62 -msgid "Are you sure want to stop " -msgstr "Вы уверены что хотите остановить " +msgid "Are you sure want to restart " +msgstr "Вы уверены что хотите перезапустить " -#: source/ubl-strings.h:62 -msgid "" -"The stop will be forced.\n" -"The system may become unstable." +#: source/ubl-strings.h:62 source/ubl-strings.h:63 +msgid "The system may become unstable." msgstr "" -"Остановка будет произведена принудительно.\n" "Возможна нестабильная работа системы." #: source/ubl-strings.h:63 +msgid "Are you sure want to reload " +msgstr "Вы уверены что хотите пурузагрузить " + +#: source/ubl-strings.h:64 msgid "Days" msgstr "Дней" -#: source/ubl-strings.h:64 +#: source/ubl-strings.h:65 msgid "Hours" msgstr "Часов" -#: source/ubl-strings.h:65 +#: source/ubl-strings.h:66 msgid "Minutes" msgstr "Минут" -#: source/ubl-strings.h:66 +#: source/ubl-strings.h:67 msgid "Seconds" msgstr "Секунд" -#: source/ubl-strings.h:68 +#: source/ubl-strings.h:69 msgid "Active" msgstr "Активна" -#: source/ubl-strings.h:69 +#: source/ubl-strings.h:70 msgid "Inactive" msgstr "Неактивна" -#: source/ubl-strings.h:71 +#: source/ubl-strings.h:72 msgid "System units" msgstr "Системные юниты" -#: source/ubl-strings.h:72 +#: source/ubl-strings.h:73 msgid "User units" msgstr "Пользовательские юниты" -#: source/ubl-strings.h:73 +#: source/ubl-strings.h:74 msgid "Config files" msgstr "Конфигурационные файлы" -#: source/ubl-strings.h:74 +#: source/ubl-strings.h:75 msgid "Sessions" msgstr "Сессии" -#: source/ubl-strings.h:75 +#: source/ubl-strings.h:76 msgid "Timers" msgstr "Таймеры" -#: source/ubl-strings.h:77 +#: source/ubl-strings.h:78 msgid "System services status" msgstr "Статус сервисов системы" -#: source/ubl-strings.h:78 +#: source/ubl-strings.h:79 msgid "User services status" msgstr "Статус сервисов пользователя" -#: source/ubl-strings.h:79 +#: source/ubl-strings.h:80 msgid "Installed unit files" msgstr "Установленные юнит-файлы" -#: source/ubl-strings.h:80 +#: source/ubl-strings.h:81 msgid "Units and status list" msgstr "Список юнитов и состояния" -#: source/ubl-strings.h:81 +#: source/ubl-strings.h:82 msgid "Sockets and status list" msgstr "Список сокетов и состояния" -#: source/ubl-strings.h:82 +#: source/ubl-strings.h:83 msgid "Timers and status list" msgstr "Список таймеров и состояния" -#: source/ubl-strings.h:84 +#: source/ubl-strings.h:85 msgid "Unit" msgstr "Юнит" -#: source/ubl-strings.h:86 +#: source/ubl-strings.h:87 msgid "Relaunch systemctl" msgstr "Перезагрузить systemctl" -#: source/ubl-strings.h:87 +#: source/ubl-strings.h:88 msgid "Reexec systemctl" msgstr "Перезапустить systemctl" -#: source/ubl-strings.h:88 +#: source/ubl-strings.h:89 msgid "Show service information" msgstr "Показать информацию о сервисе" -#: source/ubl-strings.h:89 +#: source/ubl-strings.h:90 msgid "Show service log" msgstr "Открыть лог сервиса" -#: source/ubl-strings.h:90 +#: source/ubl-strings.h:91 msgid "Show service source file" msgstr "Показать конфигурационный файл сервиса" -#: source/ubl-strings.h:91 +#: source/ubl-strings.h:92 msgid "Show service properties" msgstr "Открыть свойства сервиса" -#: source/ubl-strings.h:92 +#: source/ubl-strings.h:93 msgid "Show..." msgstr "Показать..." -#: source/ubl-strings.h:94 +#: source/ubl-strings.h:95 msgid "Show inactive" msgstr "Показать неактивные" -#: source/ubl-strings.h:95 +#: source/ubl-strings.h:96 msgid "Show unloaded" msgstr "Показать незагруженные" -#: source/ubl-strings.h:97 +#: source/ubl-strings.h:98 msgid "File" msgstr "Файл" -#: source/ubl-strings.h:98 +#: source/ubl-strings.h:99 msgid "Change date" msgstr "Изменён" -#: source/ubl-strings.h:99 +#: source/ubl-strings.h:100 msgid "Description" msgstr "Описание" -#: source/ubl-strings.h:100 +#: source/ubl-strings.h:101 msgid "Edit" msgstr "Редактировать" -#: source/ubl-strings.h:102 +#: source/ubl-strings.h:103 msgid "Session ID" msgstr "ID сессии" -#: source/ubl-strings.h:103 +#: source/ubl-strings.h:104 msgid "User ID" msgstr "ID пользователя" -#: source/ubl-strings.h:104 +#: source/ubl-strings.h:105 msgid "User name" msgstr "Имя пользователя" -#: source/ubl-strings.h:105 +#: source/ubl-strings.h:106 msgid "Seat ID" msgstr "Seat ID" -#: source/ubl-strings.h:107 +#: source/ubl-strings.h:108 msgid "Start session" msgstr "Запустить сессию" -#: source/ubl-strings.h:108 +#: source/ubl-strings.h:109 msgid "Stop session" msgstr "Остановить сессию" -#: source/ubl-strings.h:109 +#: source/ubl-strings.h:110 msgid "Lock session" msgstr "Заблокировать сессию" -#: source/ubl-strings.h:111 +#: source/ubl-strings.h:112 msgid "Timer" msgstr "Таймер" -#: source/ubl-strings.h:112 +#: source/ubl-strings.h:113 msgid "Next" msgstr "Следующий" -#: source/ubl-strings.h:113 +#: source/ubl-strings.h:114 msgid "Left" msgstr "Осталось времени" -#: source/ubl-strings.h:114 +#: source/ubl-strings.h:115 msgid "Last" msgstr "Последний" -#: source/ubl-strings.h:115 +#: source/ubl-strings.h:116 msgid "Passed" msgstr "Пройденный" -#: source/ubl-strings.h:116 +#: source/ubl-strings.h:117 msgid "Activates" msgstr "Активируется" -#: source/ubl-strings.h:118 +#: source/ubl-strings.h:119 msgid "active" msgstr "актиен" -#: source/ubl-strings.h:119 +#: source/ubl-strings.h:120 msgid "dead" msgstr "" -#: source/ubl-strings.h:120 +#: source/ubl-strings.h:121 msgid "waiting" msgstr "ожидает" -#: source/ubl-strings.h:121 +#: source/ubl-strings.h:122 msgid "running" msgstr "работает" -#: source/ubl-strings.h:122 +#: source/ubl-strings.h:123 msgid "listening" msgstr "слушает" -#: source/ubl-strings.h:123 +#: source/ubl-strings.h:124 msgid "exited" msgstr "" -#: source/ubl-strings.h:124 +#: source/ubl-strings.h:125 msgid "mounted" msgstr "примонтирован" -#: source/ubl-strings.h:125 +#: source/ubl-strings.h:126 msgid "plugged" msgstr "подключен" -#: source/ubl-strings.h:127 +#: source/ubl-strings.h:128 msgid "Upgrade to root" msgstr "Повысить права до root" From 4461044edd52c9806e7ebdb30bc1d6046372905c Mon Sep 17 00:00:00 2001 From: Ivan Yarcev Date: Mon, 1 Apr 2024 17:07:45 +0600 Subject: [PATCH 20/31] Localisation fixes --- ubl-settings-services.glade | 4 ++-- ubl-settings-services_ru.po | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/ubl-settings-services.glade b/ubl-settings-services.glade index 31e0b21..d8fba84 100644 --- a/ubl-settings-services.glade +++ b/ubl-settings-services.glade @@ -662,10 +662,10 @@ - autosize + True + fixed 20 - True diff --git a/ubl-settings-services_ru.po b/ubl-settings-services_ru.po index e7c7a6b..6258c21 100644 --- a/ubl-settings-services_ru.po +++ b/ubl-settings-services_ru.po @@ -200,7 +200,7 @@ msgstr "Сервис не был остановлен" #: source/ubl-strings.h:62 msgid "Are you sure want to restart " -msgstr "Вы уверены что хотите перезапустить " +msgstr "Вы уверены, что хотите перезапустить " #: source/ubl-strings.h:62 source/ubl-strings.h:63 msgid "The system may become unstable." @@ -209,7 +209,7 @@ msgstr "" #: source/ubl-strings.h:63 msgid "Are you sure want to reload " -msgstr "Вы уверены что хотите пурузагрузить " +msgstr "Вы уверены, что хотите перезагрузить " #: source/ubl-strings.h:64 msgid "Days" From 0ec9f694b975778e5f14ec53dbd5cc2ccf9ac378 Mon Sep 17 00:00:00 2001 From: Ivan Yarcev Date: Tue, 2 Apr 2024 09:31:46 +0600 Subject: [PATCH 21/31] Russian localisation updates --- source/ubl-strings.h | 1 + ubl-settings-services.pot | 6 +++++- ubl-settings-services_ru.po | 17 ++++++++++------- 3 files changed, 16 insertions(+), 8 deletions(-) diff --git a/source/ubl-strings.h b/source/ubl-strings.h index ea30837..5abf24c 100644 --- a/source/ubl-strings.h +++ b/source/ubl-strings.h @@ -124,5 +124,6 @@ #define STATE_EXITED_LABEL _("exited") #define STATE_MOUNTED_LABEL _("mounted") #define STATE_PLUGGED_LABEL _("plugged") +#define STATE_ABANDONED_LABEL _("abandoned") #define ROOT_CHECK_LABEL _("Upgrade to root") \ No newline at end of file diff --git a/ubl-settings-services.pot b/ubl-settings-services.pot index 9c59b4e..a543519 100644 --- a/ubl-settings-services.pot +++ b/ubl-settings-services.pot @@ -417,6 +417,10 @@ msgstr "" msgid "plugged" msgstr "" -#: source/ubl-strings.h:128 +#: source/ubl-strings.h:127 +msgid "abandoned" +msgstr "" + +#: source/ubl-strings.h:129 msgid "Upgrade to root" msgstr "" diff --git a/ubl-settings-services_ru.po b/ubl-settings-services_ru.po index 6258c21..3d2955d 100644 --- a/ubl-settings-services_ru.po +++ b/ubl-settings-services_ru.po @@ -204,8 +204,7 @@ msgstr "Вы уверены, что хотите перезапустить " #: source/ubl-strings.h:62 source/ubl-strings.h:63 msgid "The system may become unstable." -msgstr "" -"Возможна нестабильная работа системы." +msgstr "Возможна нестабильная работа системы." #: source/ubl-strings.h:63 msgid "Are you sure want to reload " @@ -393,11 +392,11 @@ msgstr "актиен" #: source/ubl-strings.h:120 msgid "dead" -msgstr "" +msgstr "остановлен" #: source/ubl-strings.h:121 msgid "waiting" -msgstr "ожидает" +msgstr "ожидание" #: source/ubl-strings.h:122 msgid "running" @@ -405,11 +404,11 @@ msgstr "работает" #: source/ubl-strings.h:123 msgid "listening" -msgstr "слушает" +msgstr "прослушивание" #: source/ubl-strings.h:124 msgid "exited" -msgstr "" +msgstr "завершён" #: source/ubl-strings.h:125 msgid "mounted" @@ -419,6 +418,10 @@ msgstr "примонтирован" msgid "plugged" msgstr "подключен" -#: source/ubl-strings.h:128 +#: source/ubl-strings.h:127 +msgid "abandoned" +msgstr "заброшен" + +#: source/ubl-strings.h:129 msgid "Upgrade to root" msgstr "Повысить права до root" From 4dabe73524a188b32c52c9d0390a541c80a14a26 Mon Sep 17 00:00:00 2001 From: Ivan Yarcev Date: Tue, 2 Apr 2024 09:33:10 +0600 Subject: [PATCH 22/31] Russian localisation updates --- ubl-settings-services_ru.po | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ubl-settings-services_ru.po b/ubl-settings-services_ru.po index 3d2955d..6eca2fe 100644 --- a/ubl-settings-services_ru.po +++ b/ubl-settings-services_ru.po @@ -388,7 +388,7 @@ msgstr "Активируется" #: source/ubl-strings.h:119 msgid "active" -msgstr "актиен" +msgstr "активен" #: source/ubl-strings.h:120 msgid "dead" From f526c7a255236644a760d00f52069e1cad0ccde4 Mon Sep 17 00:00:00 2001 From: Ivan Yarcev Date: Wed, 3 Apr 2024 14:42:29 +0600 Subject: [PATCH 23/31] Fixed command for user services loading in separate window; Added tooltip at config file editing --- Makefile | 2 +- source/ubl-settings-services.c | 10 +++++----- source/ubl-settings-services.h | 2 +- ubl-settings-services-terminal.glade | 2 +- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/Makefile b/Makefile index 4c98d16..d8e7205 100644 --- a/Makefile +++ b/Makefile @@ -145,7 +145,7 @@ install: check uninstall @if [ -z ${DESTDIR} ]; then \ [ -d "${DESTDIR}/usr/share/icons/hicolor/" ] && gtk-update-icon-cache -fiq "${DESTDIR}/usr/share/icons/hicolor/" &>/dev/null || true; \ update-desktop-database --quiet &>/dev/null || true; \ - [ -d "${DESTDIR}$/usr/share/applications" ] && touch "${DESTDIR}/usr/share/applications" &>/dev/null || true; \ + [ -d "${DESTDIR}/usr/share/applications" ] && touch "${DESTDIR}/usr/share/applications" &>/dev/null || true; \ fi @echo "Install: OK" diff --git a/source/ubl-settings-services.c b/source/ubl-settings-services.c index a5d1aaa..7785791 100644 --- a/source/ubl-settings-services.c +++ b/source/ubl-settings-services.c @@ -1486,35 +1486,35 @@ void yon_main_window_complete(main_window *widgets){ g_signal_connect(G_OBJECT(widgets->UserInactiveShowCheck),"toggled",G_CALLBACK(yon_gtk_widget_set_sensitive_from_toggle_button),widgets->UserUnloadedShowCheck); // g_signal_connect(G_OBJECT(widgets->SystemUnitsTree),"button-press-event",G_CALLBACK(on_context_menu_open),widgets); for (unsigned int i=0;iUserUnitsTree)); for (unsigned int i=0;iConfigMainTree)); for (unsigned int i=0;iSessionMainTree)); for (unsigned int i=0;iTimersMainTree)); for (unsigned int i=0;i True True - Update + Save image2