#include "ubl-settings-services.h" config main_config; //saving & loading void on_save_done(main_window *widgets, config_str output, int size){ if (widgets) {}; char *final_output = yon_char_parsed_to_string(output,size,""); printf("%s\n",final_output); free(final_output); yon_char_parsed_free(output,size); textdomain(template_ui_LocaleName); switch (main_config.save_config){ case 0: yon_ubl_status_box_render(GLOBAL_SAVE_SUCCESS_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE); break; case 1: yon_ubl_status_box_render(LOCAL_SAVE_SUCCESS_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE); break; case 3: yon_ubl_status_box_render(GLOBAL_LOCAL_SAVE_SUCCESS_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE); break; } textdomain(LocaleName); } void yon_load_proceed(YON_CONFIG_TYPE type){ 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); } else if (type==YON_CONFIG_LOCAL){ yon_config_load_config(type,config_get_local_command,NULL); } else if (type==YON_CONFIG_CUSTOM){ char *path=""; 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"); 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; 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); main_config.load_mode=1; } } void on_config_global_load(GtkWidget *self,main_window *widgets){ if (self){} if (!main_config.update_thread_active){ main_config.update_thread_active=1; 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); main_config.load_mode=0; } } 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); } void on_service_constant_update(){ } void on_config_global_local_save(){ main_config.save_config=3; yon_save_proceed(NULL,YON_CONFIG_BOTH,config_get_global_command,NULL); } void on_config_local_save(){ main_config.save_config=1; yon_save_proceed("system",YON_CONFIG_LOCAL,config_get_local_command,NULL); } void on_config_global_save(){ main_config.save_config=0; yon_save_proceed("global",YON_CONFIG_GLOBAL,config_get_global_command,NULL); } void on_config_custom_save(GtkWidget *self, main_window *widgets){ if (self&&widgets){} main_config.save_config=1; template_saving_window *window = yon_save_proceed(NULL,YON_CONFIG_CUSTOM,yon_config_get_custom_command("system"),NULL); 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(GtkCellRenderer *self, char *path, main_window *widgets){ if (self){}; GtkTreeIter filter_iter; GtkTreeIter iter; GtkTreeModel *model; GtkTreeModel *filter; if (gtk_notebook_get_current_page(GTK_NOTEBOOK(widgets->MainNotebook))==0){ model = GTK_TREE_MODEL(widgets->SystemList); filter = GTK_TREE_MODEL(widgets->SystemFilter); } else { model = GTK_TREE_MODEL(widgets->UserList); filter = GTK_TREE_MODEL(widgets->UserFilter); } 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; gtk_tree_model_get(model,&iter,0,&status,5,&name,-1); char *unit = yon_char_new(name); char *parsed_name = yon_char_divide(unit, yon_char_find_last(name,'.')); free(unit); unit=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_char_parsed_check_exist(parsed,size,unit)==-1){ if (!yon_config_append("SERVICES_ENABLE",name,",")){ yon_config_register("SERVICES_ENABLE",SERVICES_ENABLE_get_command,name); } } else { 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"); } } } 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(GtkCellRenderer *self, char *path, main_window *widgets){ if (self){}; GtkTreeIter filter_iter; GtkTreeIter iter; GtkTreeModel *model; GtkTreeModel *filter; if (gtk_notebook_get_current_page(GTK_NOTEBOOK(widgets->MainNotebook))==0){ model = GTK_TREE_MODEL(widgets->SystemList); filter = GTK_TREE_MODEL(widgets->SystemFilter); } else { model = GTK_TREE_MODEL(widgets->UserList); filter = GTK_TREE_MODEL(widgets->UserFilter); } 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; gtk_tree_model_get(model,&iter,1,&status,5,&name,-1); char *unit = yon_char_new(name); char *parsed_name = yon_char_divide(unit, yon_char_find_last(name,'.')); free(unit); unit=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_char_parsed_check_exist(parsed,size,unit)==-1){ if (!yon_config_append("SERVICES_DISABLE",name,",")){ yon_config_register("SERVICES_DISABLE",SERVICES_DISABLE_get_command,name); } } else { 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"); } } } 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(GtkCellRenderer *self, char *path, main_window *widgets){ if (self){}; GtkTreeIter filter_iter; GtkTreeIter iter; GtkTreeModel *model; GtkTreeModel *filter; if (gtk_notebook_get_current_page(GTK_NOTEBOOK(widgets->MainNotebook))==0){ model = GTK_TREE_MODEL(widgets->SystemList); filter = GTK_TREE_MODEL(widgets->SystemFilter); } else { model = GTK_TREE_MODEL(widgets->UserList); filter = GTK_TREE_MODEL(widgets->UserFilter); } 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; gtk_tree_model_get(model,&iter,2,&status,5,&name,-1); char *unit = yon_char_new(name); char *parsed_name = yon_char_divide(unit, yon_char_find_last(name,'.')); free(unit); unit=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_char_parsed_check_exist(parsed,size,unit)==-1){ if (!yon_config_append("SERVICES_MASK",name,",")){ yon_config_register("SERVICES_MASK",SERVICES_MASK_get_command,name); } } else { 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"); } } } 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_confirmed(GtkWidget *self,char *service_command){ if (self){}; yon_launch_app_with_arguments(service_command,""); } void on_system_autostart_clicked(GtkCellRenderer *self, char *path, main_window *widgets){ if (self){}; GtkTreeIter filter_iter; GtkTreeIter iter; GtkTreeModel *model; GtkTreeModel *filter; if (gtk_notebook_get_current_page(GTK_NOTEBOOK(widgets->MainNotebook))==0){ model = GTK_TREE_MODEL(widgets->SystemList); filter = GTK_TREE_MODEL(widgets->SystemFilter); } else { model = GTK_TREE_MODEL(widgets->UserList); filter = GTK_TREE_MODEL(widgets->UserFilter); } 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,3,&status,5,&service_name,-1); dialog_confirmation_data *data = malloc(sizeof(dialog_confirmation_data)); data->action_text=(!status)==0 ?SERVICE_DISABLE_WARNING_LABEL(service_name):SERVICE_ENABLE_WARNING_LABEL(service_name); data->data=(!status)==1 ? service_enable_command(service_name) : \ service_disable_command(service_name); data->function=(void*)(void*)on_system_autostart_confirmed; int responce = yon_confirmation_dialog_call(widgets->Window,data); if (responce == GTK_RESPONSE_ACCEPT){ gtk_list_store_set(GTK_LIST_STORE(model),&iter,3,!status,-1); } } } gboolean yon_filter(GtkTreeModel* model, GtkTreeIter *iter, main_window *widgets){ gboolean autostart,autostop,masked,type,loaded,inactive; 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 name_filter = 1; 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; } 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; } 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){}; yon_launch_app_with_arguments(service_name,""); } void on_system_launch_clicked(GtkWidget *self, char *path, main_window *widgets){ if (self){}; GtkTreeIter iter, filter_iter; GtkTreeModel *model; GtkTreeModel *filter; if (gtk_notebook_get_current_page(GTK_NOTEBOOK(widgets->MainNotebook))==0){ model = GTK_TREE_MODEL(widgets->SystemList); filter = GTK_TREE_MODEL(widgets->SystemFilter); } else { model = GTK_TREE_MODEL(widgets->UserList); filter = GTK_TREE_MODEL(widgets->UserFilter); } 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); if (status){ dialog_confirmation_data *data = malloc(sizeof(dialog_confirmation_data)); data->action_text=SERVICE_STOP_WARNING_LABEL(service_name); data->data=service_stop_command(service_name); data->function=(void*)(void*)on_system_kill_confirmed; 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&&!strcmp(result[0],"active")){ int responce = yon_confirmation_dialog_call(widgets->Window,data); if (responce == GTK_RESPONSE_ACCEPT){ result = yon_config_load(service_check_active_command(service_name),&size); yon_char_remove_last_symbol(result[0],'\n'); if (strcmp(result[0],"active")){ gtk_list_store_set(GTK_LIST_STORE(model),&iter,4,0,-1); } else { yon_ubl_status_box_render(SERVICE_STOP_FAILED_LABEL,BACKGROUND_IMAGE_FAIL_TYPE); } } } yon_char_parsed_free(result,size); } else { dialog_confirmation_data *data = malloc(sizeof(dialog_confirmation_data)); data->action_text=SERVICE_START_WARNING_LABEL(service_name); data->data=service_start_command(service_name); data->function=(void*)(void*)on_system_kill_confirmed; 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&&!strcmp(result[0],"active")){ int responce = yon_confirmation_dialog_call(widgets->Window,data); if (responce == GTK_RESPONSE_ACCEPT){ gtk_list_store_set(GTK_LIST_STORE(model),&iter,4,1,-1); } } // yon_char_parsed_free(result,size); // yon_launch(service_start_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&&!strcmp(result[0],"active")){ // gtk_list_store_set(GTK_LIST_STORE(model),&iter,4,1,-1); // } else { // yon_ubl_status_box_render(SERVICE_START_FAILED_LABEL,BACKGROUND_IMAGE_FAIL_TYPE); // } } } } void on_service_restart_confirmed(GtkWidget *self,char *service_name){ if (self){}; char *command = restart_command(service_name); yon_launch_app_with_arguments(command,""); } void on_system_restart_clicked(GtkWidget *self, main_window *widgets){ if (self&&widgets){}; GtkWidget *target_tree; switch(gtk_notebook_get_current_page(GTK_NOTEBOOK(widgets->MainNotebook))){ case 0:target_tree=widgets->SystemUnitsTree; break; case 1: target_tree = widgets->UserUnitsTree; break; default: return; } GtkTreeModel *model = gtk_tree_view_get_model(GTK_TREE_VIEW(target_tree)); GtkTreeIter iter; if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(target_tree)),&model,&iter)){ char *target; gtk_tree_model_get(model,&iter,5,&target,-1); dialog_confirmation_data *data = malloc(sizeof(dialog_confirmation_data)); data->action_text=REEXEC_SERVICE_WARMING_LABEL(target); data->data=target; data->function=(void*)(void*)on_service_restart_confirmed; int responce = yon_confirmation_dialog_call(widgets->Window,data); if (responce == GTK_RESPONSE_ACCEPT){ yon_ubl_status_box_render(SERVICE_RELOAD_SUCCESS_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE); } } } void yon_sessions_update(main_window *widgets){ gtk_tree_view_set_model(GTK_TREE_VIEW(widgets->SessionMainTree),NULL); gtk_list_store_clear(widgets->SessionsList); int sessions_size; config_str sessions = yon_config_load(list_of_session_command,&sessions_size); for (int i=0;i4){ gtk_list_store_append(widgets->SessionsList,&iter); 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); } } gtk_tree_view_set_model(GTK_TREE_VIEW(widgets->SessionMainTree),GTK_TREE_MODEL(widgets->SessionsList)); } void on_session_activate(GtkWidget *self, main_window *widgets){ if (self){}; GtkTreeModel *model = GTK_TREE_MODEL(widgets->SessionsList); GtkTreeIter iter; if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->SessionMainTree)),&model,&iter)){ int id; gtk_tree_model_get(model,&iter,0,&id,-1); char *convert = yon_char_from_int(id); yon_launch(session_activate_session(convert)); free(convert); yon_sessions_update(widgets); } } void on_session_end(GtkWidget *self, main_window *widgets){ if (self){}; GtkTreeModel *model = GTK_TREE_MODEL(widgets->SessionsList); GtkTreeIter iter; if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->SessionMainTree)),&model,&iter)){ int id; gtk_tree_model_get(model,&iter,0,&id,-1); char *convert = yon_char_from_int(id); yon_launch(session_terminate_session(convert)); free(convert); yon_sessions_update(widgets); } } void on_session_block(GtkWidget *self, main_window *widgets){ if (self){}; GtkTreeModel *model = GTK_TREE_MODEL(widgets->SessionsList); GtkTreeIter iter; if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->SessionMainTree)),&model,&iter)){ int id; gtk_tree_model_get(model,&iter,0,&id,-1); char *convert = yon_char_from_int(id); yon_launch(session_lock_session(convert)); free(convert); yon_sessions_update(widgets); } } 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->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)); gtk_window_set_icon_name(GTK_WINDOW(window->Window),"com.ublinux.ubl-settings-services"); 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; } void yon_system_systemd_restart(GtkWidget *self, main_window *widgets){ if (self){}; if (widgets){ if (!getuid()&>k_notebook_get_current_page(GTK_NOTEBOOK(widgets->MainNotebook))==0){ if (system(reload_systemd_root_command)){ yon_ubl_status_box_render(SYSTEMD_RELAUNCH_ERROR_LABEL,BACKGROUND_IMAGE_FAIL_TYPE); } else { yon_ubl_status_box_render(SYSTEMD_RELAUNCH_SUCCESS_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE); } } else { if (system(reload_systemd_user_command)){ yon_ubl_status_box_render(SYSTEMD_RELAUNCH_ERROR_LABEL,BACKGROUND_IMAGE_FAIL_TYPE); } else { yon_ubl_status_box_render(SYSTEMD_RELAUNCH_SUCCESS_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE); } } } } 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(SYSTEMD_REEXEC_ERROR_LABEL,BACKGROUND_IMAGE_FAIL_TYPE); } else { yon_ubl_status_box_render(SYSTEMD_REEXEC_SUCCESS_LABEL,BACKGROUND_IMAGE_FAIL_TYPE); } } else { if (system(reexec_systemd_user_command)){ yon_ubl_status_box_render(SYSTEMD_REEXEC_ERROR_LABEL,BACKGROUND_IMAGE_FAIL_TYPE); } else { yon_ubl_status_box_render(SYSTEMD_REEXEC_SUCCESS_LABEL,BACKGROUND_IMAGE_FAIL_TYPE); } } } } 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 = RELOAD_SERVICE_WARMING_LABEL("systemd"); 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){ dialog_confirmation_data *data = malloc(sizeof(dialog_confirmation_data)); 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); } } void on_system_info_clicked(GtkWidget *self, main_window *widgets){ if (self){} if (widgets){ 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_label_set_text(GTK_LABEL(window->webHeaderNameLabel),SERVICE_STATE_TITLE_LABEL(name)); gtk_window_set_title(GTK_WINDOW(window->Window),SERVICE_STATE_TITLE_LABEL(name)); window->target = service_info_command(name); yon_terminal_integrated_start(window->SystemTerminal,window->target); gtk_widget_show(window->Window); } } } void on_system_log_clicked(GtkWidget *self, main_window *widgets){ if (self){} if (widgets){ 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_label_set_text(GTK_LABEL(window->webHeaderNameLabel),SERVICE_LOG_TITLE_LABEL(name)); gtk_window_set_title(GTK_WINDOW(window->Window),SERVICE_LOG_TITLE_LABEL(name)); window->target = get_log_command(name); yon_terminal_integrated_start(window->SystemTerminal,window->target); 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); 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); 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); } void on_system_edit_clicked(GtkWidget *self, main_window *widgets){ if (self){} if (widgets){ 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_label_set_text(GTK_LABEL(window->webHeaderNameLabel),SERVICE_UNIT_EDIT_TITLE_LABEL); gtk_window_set_title(GTK_WINDOW(window->Window),SERVICE_UNIT_EDIT_TITLE_LABEL); gtk_widget_show(window->SaveButton); window->target=show_source_command(name); yon_terminal_integrated_start(window->SystemTerminal,window->target); 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); } } } void on_system_status_clicked(GtkWidget *self, main_window *widgets){ if (self){} if (widgets){ 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_label_set_text(GTK_LABEL(window->webHeaderNameLabel),PROPERTIES_LABEL); gtk_window_set_title(GTK_WINDOW(window->Window),PROPERTIES_LABEL); window->target = properties_command(name); yon_terminal_integrated_start(window->SystemTerminal,window->target); gtk_widget_show(window->Window); } } } 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 = REEXEC_SERVICE_WARMING_LABEL("systemd"); 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){ dialog_confirmation_data *data = malloc(sizeof(dialog_confirmation_data)); 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); } } void on_user_info_clicked(GtkWidget *self, main_window *widgets){ if (self){} if (widgets){ 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_label_set_text(GTK_LABEL(window->webHeaderNameLabel),SERVICE_STATE_TITLE_LABEL(name)); gtk_window_set_title(GTK_WINDOW(window->Window),SERVICE_STATE_TITLE_LABEL(name)); window->target = user_service_info_command(name); yon_terminal_integrated_start(window->SystemTerminal,window->target); gtk_widget_show(window->Window); } } } void on_user_log_clicked(GtkWidget *self, main_window *widgets){ if (self){} if (widgets){ 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_label_set_text(GTK_LABEL(window->webHeaderNameLabel),SERVICE_LOG_TITLE_LABEL(name)); gtk_window_set_title(GTK_WINDOW(window->Window),SERVICE_LOG_TITLE_LABEL(name)); window->target = user_get_log_command(name); yon_terminal_integrated_start(window->SystemTerminal,window->target); gtk_widget_show(window->Window); } } } void on_user_edit_clicked(GtkWidget *self, main_window *widgets){ if (self){} if (widgets){ 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_label_set_text(GTK_LABEL(window->webHeaderNameLabel),SERVICE_UNIT_EDIT_TITLE_LABEL); gtk_window_set_title(GTK_WINDOW(window->Window),SERVICE_UNIT_EDIT_TITLE_LABEL); gtk_widget_show(window->SaveButton); window->target=user_show_source_command(name); yon_terminal_integrated_start(window->SystemTerminal,window->target); 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); } } } void on_user_status_clicked(GtkWidget *self, main_window *widgets){ if (self){} if (widgets){ 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_label_set_text(GTK_LABEL(window->webHeaderNameLabel),PROPERTIES_LABEL); gtk_window_set_title(GTK_WINDOW(window->Window),PROPERTIES_LABEL); window->target = user_properties_command(name); yon_terminal_integrated_start(window->SystemTerminal,window->target); gtk_widget_show(window->Window); } } } 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){ 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(); if (getuid()) gtk_widget_set_sensitive(window->SaveButton,0); gtk_label_set_text(GTK_LABEL(window->webHeaderNameLabel),EDIT_CONFIG_LABEL); gtk_window_set_title(GTK_WINDOW(window->Window),EDIT_CONFIG_LABEL); 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); } } } void on_system_services_status(GtkWidget *self, main_window *widgets){ if (self){} if (widgets){ log_window *window = yon_log_window_new(); gtk_label_set_text(GTK_LABEL(window->webHeaderNameLabel),SYSTEM_STATUS_LABEL); gtk_window_set_title(GTK_WINDOW(window->Window),SYSTEM_STATUS_LABEL); window->target = system_services_status_command; yon_terminal_integrated_start(window->SystemTerminal,window->target); 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(); gtk_label_set_text(GTK_LABEL(window->webHeaderNameLabel),USER_STATUS_LABEL); gtk_window_set_title(GTK_WINDOW(window->Window),USER_STATUS_LABEL); window->target = user_services_status_command; yon_terminal_integrated_start(window->SystemTerminal,window->target); 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(); gtk_label_set_text(GTK_LABEL(window->webHeaderNameLabel),INSTALLED_UNIT_LABEL); gtk_window_set_title(GTK_WINDOW(window->Window),INSTALLED_UNIT_LABEL); window->target = !gtk_notebook_get_current_page(GTK_NOTEBOOK(widgets->MainNotebook))?installed_units_states_command:user_installed_units_states_command; yon_terminal_integrated_start(window->SystemTerminal,window->target); 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(); gtk_label_set_text(GTK_LABEL(window->webHeaderNameLabel),UNITS_LIST_LABEL); gtk_window_set_title(GTK_WINDOW(window->Window),UNITS_LIST_LABEL); window->target = !gtk_notebook_get_current_page(GTK_NOTEBOOK(widgets->MainNotebook))?list_of_units_states_command:user_list_of_units_states_command; yon_terminal_integrated_start(window->SystemTerminal,window->target); 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(); gtk_label_set_text(GTK_LABEL(window->webHeaderNameLabel),SOCKETS_LIST_LABEL); gtk_window_set_title(GTK_WINDOW(window->Window),SOCKETS_LIST_LABEL); window->target = !gtk_notebook_get_current_page(GTK_NOTEBOOK(widgets->MainNotebook))?list_of_sockets_states_command:user_list_of_sockets_states_command; yon_terminal_integrated_start(window->SystemTerminal,window->target); 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(); gtk_label_set_text(GTK_LABEL(window->webHeaderNameLabel),TIMERS_LIST_LABEL); gtk_window_set_title(GTK_WINDOW(window->Window),TIMERS_LIST_LABEL); window->target = !gtk_notebook_get_current_page(GTK_NOTEBOOK(widgets->MainNotebook))?list_of_timers_states_command:user_list_of_timers_states_command; yon_terminal_integrated_start(window->SystemTerminal,window->target); gtk_widget_show(window->Window); } } 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->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->TimersList); 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 timers_size; config_str timers = yon_config_load(get_timers_command,&timers_size); struct json_object *jsobject = json_tokener_parse(timers[0]); int launched_size; config_str launched = yon_config_load(load_launched_command,&launched_size); for (int i=0;iSystemList,&iter); gtk_list_store_set(widgets->SystemList,&iter,3,yon_char_parsed_check_exist(launched,launched_size,parsed[0])>-1,4,strcmp(parsed[2],"active")?0:1,5,parsed[0],6,parsed[4],7,type,8,loaded,9,active,11,_(parsed[3]),-1); } } for (int i=0; iUserList,&iter); gtk_list_store_set(widgets->UserList,&iter,3,yon_char_parsed_check_exist(launched,launched_size,parsed[0])>-1,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); } } 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); } } yon_sessions_update(widgets); for (size_t i=0;iTimersList,&iter); GDateTime *datetime=NULL; if (!yon_char_is_empty(next)&&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 (!yon_char_is_empty(left)&&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 (!yon_char_is_empty(last)&&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 (!yon_char_is_empty(passed)&&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->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->SystemList,&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;iSystemList,&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->SystemList,&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;iSystemList,&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->SystemList,&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;iSystemList,&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->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->TimersMainTree),GTK_TREE_MODEL(widgets->TimersList)); main_config.update_thread_active=0; return 0; } void on_interface_update(GtkWidget *self, main_window *widgets){ if (self){}; if (!main_config.update_thread_active){ main_config.update_thread_active=1; pthread_t tid; pthread_create(&tid,NULL,(void*)(void*)((yon_interface_update)),widgets); } } 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->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))+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->SystemUpperTree),0),width_configuration); gtk_tree_view_column_set_fixed_width(gtk_tree_view_get_column(GTK_TREE_VIEW(widgets->SystemUpperTree),1),width_system); 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() * [EN] * * [RU] * Функция инициализации всех параметров конфигурации */ void config_init(){ main_config.always_open_documentation=0; main_config.socket_id=-1; main_config.save_socket_id=-1; main_config.load_socket_id=-1; main_config.lock_help=0; main_config.lock_help=0; main_config.lock_load_global=0; main_config.lock_save_global=0; main_config.lock_save_local=0; main_config.load_mode=1; main_config.update_thread_active=0; main_config.launch_arguments=NULL; main_config.launch_size=0; } void on_tree_selection_changed(GtkWidget *self, main_window *widgets){ if (self){}; GtkTreeModel *model; GtkWidget *Tree; GtkTreeIter iter; 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)){ char *name, *descr; 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->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->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); Tree = widgets->UserUnitsTree; if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(Tree)),&model,&iter)){ char *name, *descr; 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->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); gtk_widget_set_sensitive(widgets->UserServiceUpdateButton,1); } } else { gtk_label_set_text(GTK_LABEL(widgets->UserServiceLabel),""); gtk_label_set_text(GTK_LABEL(widgets->UserDescriptionLabel),""); 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); gtk_widget_set_sensitive(widgets->UserServiceUpdateButton,0); } } } if (getuid()==0){ } } /**yon_main_window_complete(main_window *widgets) * [EN] * * [RU] * Функция настройки основного окна приложения. [widgets] - структура со стандартным интерфейсом. */ void yon_main_window_complete(main_window *widgets){ widgets = yon_remalloc(widgets,sizeof(main_window)); 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->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->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->SystemServicesStatusMenuItem=yon_gtk_builder_get_widget(builder,"SystemServicesStatusMenuItem"); 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->UserServicesStatusMenuItem=yon_gtk_builder_get_widget(builder,"UserServicesStatusMenuItem"); widgets->UserInstalledUnitsStatusMenuItem=yon_gtk_builder_get_widget(builder,"UserInstalledUnitsStatusMenuItem"); widgets->UserUnitsStatusListMenuItem=yon_gtk_builder_get_widget(builder,"UserUnitsStatusListMenuItem"); widgets->UserSocketsStatusListMenuItem=yon_gtk_builder_get_widget(builder,"UserSocketsStatusListMenuItem"); widgets->UserTimersStatusListMenuItem=yon_gtk_builder_get_widget(builder,"UserTimersStatusListMenuItem"); 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->SystemServiceUpdateButton=yon_gtk_builder_get_widget(builder,"SystemServiceUpdateButton"); 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->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, RESTART_LABEL,update_icon_path,G_CALLBACK(on_system_restart_clicked),widgets, RELAUNCH_SYSTEMCTL_LABEL,relaunch_icon_path,G_CALLBACK(yon_system_systemd_restart),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"); 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->UserServiceUpdateButton=yon_gtk_builder_get_widget(builder,"UserServiceUpdateButton"); 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, RESTART_LABEL,update_icon_path,G_CALLBACK(on_system_restart_clicked),widgets, RELAUNCH_SYSTEMCTL_LABEL,relaunch_icon_path,G_CALLBACK(yon_system_systemd_restart),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"); 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,G_CALLBACK(on_session_activate),widgets, END_SESSION_LABEL,stop_icon_path,G_CALLBACK(on_session_end),widgets, BLOCK_SESSION_LABEL,block_icon_path,G_CALLBACK(on_session_block),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,1)),"separatorTop"); gtk_style_context_add_class(gtk_widget_get_style_context(g_list_nth_data(list,1)),"separatorBottom"); 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"); gtk_style_context_add_class(gtk_widget_get_style_context(g_list_nth_data(list,1)),"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"); 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_interface_update),widgets); g_signal_connect(G_OBJECT(widgets->SystemServiceUpdateButton),"clicked",G_CALLBACK(on_system_restart_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_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_interface_update),widgets); g_signal_connect(G_OBJECT(widgets->UserServiceUpdateButton),"clicked",G_CALLBACK(on_system_restart_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_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); g_signal_connect(G_OBJECT(widgets->SessionStartButton),"clicked",G_CALLBACK(on_session_activate),widgets); g_signal_connect(G_OBJECT(widgets->SessionStopButton),"clicked",G_CALLBACK(on_session_end),widgets); g_signal_connect(G_OBJECT(widgets->SessionBlockButton),"clicked",G_CALLBACK(on_session_block),widgets); g_signal_connect(G_OBJECT(widgets->SystemServicesStatusMenuItem),"activate",G_CALLBACK(on_system_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->UserServicesStatusMenuItem),"activate",G_CALLBACK(on_user_services_status),widgets); g_signal_connect(G_OBJECT(widgets->UserInstalledUnitsStatusMenuItem),"activate",G_CALLBACK(on_units_status),widgets); g_signal_connect(G_OBJECT(widgets->UserUnitsStatusListMenuItem),"activate",G_CALLBACK(on_units_list_status),widgets); g_signal_connect(G_OBJECT(widgets->UserSocketsStatusListMenuItem),"activate",G_CALLBACK(on_sockets_list_status),widgets); g_signal_connect(G_OBJECT(widgets->UserTimersStatusListMenuItem),"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->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); if (getuid()==0){ gtk_widget_set_sensitive(widgets->UserUpdateButton,0); gtk_widget_set_sensitive(widgets->UserPrevButton,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->SystemPrevButton,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)); yon_gtk_tree_view_minimal_fixed_size_set_full(GTK_TREE_VIEW(widgets->SessionMainTree)); yon_gtk_tree_view_minimal_fixed_size_set_full(GTK_TREE_VIEW(widgets->TimersMainTree)); 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); 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;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); g_signal_connect(G_OBJECT(widgets->UserUnitsTree),"cursor-changed",G_CALLBACK(on_tree_selection_changed),widgets); yon_root_button_setup((template_main_window*)widgets,main_config.launch_arguments,main_config.launch_size); 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); 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; pthread_t tid; pthread_create(&tid,NULL,(void*)(void*)((yon_interface_update)),widgets); } yon_save_window_set_postsave_function(on_save_done,widgets); } int main(int argc, char *argv[]){ local=setlocale(LC_ALL, ""); textdomain (LocaleName); config_init(); yon_ubl_connect_config((_template_config*)&main_config); yon_ubl_window_init(TITLE_LABEL,TITLE_INFO_LABEL,LocaleName,CssPath,LocaleName,version_application,WIKI_LINK); config_str unfound = NULL; int size=0; yon_ubl_setup_arguments(argc,argv,&unfound,&size,NULL); 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){ textdomain(template_ui_LocaleName); yon_ubl_status_box_render(ROOT_WARNING_LABEL,BACKGROUND_IMAGE_FAIL_TYPE); textdomain(LocaleName); } main_config.launch_arguments=yon_char_parsed_copy(argv,argc); main_config.launch_size=argc; gtk_main(); return 0; }