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 +