diff --git a/source/ubl-settings-services.c b/source/ubl-settings-services.c index 212cb50..f49fcf1 100644 --- a/source/ubl-settings-services.c +++ b/source/ubl-settings-services.c @@ -166,20 +166,24 @@ void on_activate(GtkTreeView *self, main_window *widgets){ void on_config_autostart_clicked(GtkCellRenderer *, char *path, main_window *widgets){ GtkTreeIter filter_iter; - GtkTreeIter iter; + GtkTreeIter iter,itor; GtkTreeModel *model; GtkTreeModel *filter; + GtkTreeModel *sort; if (gtk_notebook_get_current_page(GTK_NOTEBOOK(widgets->MainNotebook))==0){ model = GTK_TREE_MODEL(widgets->SystemList); filter = GTK_TREE_MODEL(widgets->SystemFilter); + sort = GTK_TREE_MODEL(widgets->SystemSort); } else { model = GTK_TREE_MODEL(widgets->UserList); filter = GTK_TREE_MODEL(widgets->UserFilter); + sort = GTK_TREE_MODEL(widgets->UserSort); } GtkTreePath *path_converted = gtk_tree_path_new_from_string(path); - gtk_tree_model_get_iter(filter,&filter_iter,path_converted); + gtk_tree_model_get_iter(sort,&filter_iter,path_converted); { - gtk_tree_model_filter_convert_iter_to_child_iter(GTK_TREE_MODEL_FILTER(filter),&iter,&filter_iter); + gtk_tree_model_sort_convert_iter_to_child_iter(GTK_TREE_MODEL_SORT(sort),&itor,&filter_iter); + gtk_tree_model_filter_convert_iter_to_child_iter(GTK_TREE_MODEL_FILTER(filter),&iter,&itor); gboolean status = 0; char *name; gtk_tree_model_get(model,&iter,0,&status,5,&name,-1); @@ -224,20 +228,24 @@ void on_config_autostart_clicked(GtkCellRenderer *, char *path, main_window *wid void on_config_autostop_clicked(GtkCellRenderer *, char *path, main_window *widgets){ GtkTreeIter filter_iter; - GtkTreeIter iter; + GtkTreeIter iter,itor; GtkTreeModel *model; GtkTreeModel *filter; + GtkTreeModel *sort; if (gtk_notebook_get_current_page(GTK_NOTEBOOK(widgets->MainNotebook))==0){ model = GTK_TREE_MODEL(widgets->SystemList); filter = GTK_TREE_MODEL(widgets->SystemFilter); + sort = GTK_TREE_MODEL(widgets->SystemSort); } else { model = GTK_TREE_MODEL(widgets->UserList); filter = GTK_TREE_MODEL(widgets->UserFilter); + sort = GTK_TREE_MODEL(widgets->UserSort); } GtkTreePath *path_converted = gtk_tree_path_new_from_string(path); - gtk_tree_model_get_iter(filter,&filter_iter,path_converted); + gtk_tree_model_get_iter(sort,&filter_iter,path_converted); { - gtk_tree_model_filter_convert_iter_to_child_iter(GTK_TREE_MODEL_FILTER(filter),&iter,&filter_iter); + gtk_tree_model_sort_convert_iter_to_child_iter(GTK_TREE_MODEL_SORT(sort),&itor,&filter_iter); + gtk_tree_model_filter_convert_iter_to_child_iter(GTK_TREE_MODEL_FILTER(filter),&iter,&itor); gboolean status = 0; char *name; gtk_tree_model_get(model,&iter,1,&status,5,&name,-1); @@ -283,20 +291,24 @@ void on_config_autostop_clicked(GtkCellRenderer *, char *path, main_window *widg void on_config_block_clicked(GtkCellRenderer *, char *path, main_window *widgets){ GtkTreeIter filter_iter; - GtkTreeIter iter; + GtkTreeIter iter,itor; GtkTreeModel *model; GtkTreeModel *filter; + GtkTreeModel *sort; if (gtk_notebook_get_current_page(GTK_NOTEBOOK(widgets->MainNotebook))==0){ model = GTK_TREE_MODEL(widgets->SystemList); filter = GTK_TREE_MODEL(widgets->SystemFilter); + sort = GTK_TREE_MODEL(widgets->SystemSort); } else { model = GTK_TREE_MODEL(widgets->UserList); filter = GTK_TREE_MODEL(widgets->UserFilter); + sort = GTK_TREE_MODEL(widgets->UserSort); } GtkTreePath *path_converted = gtk_tree_path_new_from_string(path); - gtk_tree_model_get_iter(filter,&filter_iter,path_converted); + gtk_tree_model_get_iter(sort,&filter_iter,path_converted); { - gtk_tree_model_filter_convert_iter_to_child_iter(GTK_TREE_MODEL_FILTER(filter),&iter,&filter_iter); + gtk_tree_model_sort_convert_iter_to_child_iter(GTK_TREE_MODEL_SORT(sort),&itor,&filter_iter); + gtk_tree_model_filter_convert_iter_to_child_iter(GTK_TREE_MODEL_FILTER(filter),&iter,&itor); gboolean status = 0; char *name; gtk_tree_model_get(model,&iter,2,&status,5,&name,-1); @@ -346,20 +358,24 @@ void on_system_autostart_confirmed(GtkWidget *,char *service_command){ void on_system_autostart_clicked(GtkCellRenderer *, char *path, main_window *widgets){ GtkTreeIter filter_iter; - GtkTreeIter iter; + GtkTreeIter iter,itor; GtkTreeModel *model; GtkTreeModel *filter; + GtkTreeModel *sort; if (gtk_notebook_get_current_page(GTK_NOTEBOOK(widgets->MainNotebook))==0){ model = GTK_TREE_MODEL(widgets->SystemList); filter = GTK_TREE_MODEL(widgets->SystemFilter); + sort = GTK_TREE_MODEL(widgets->SystemSort); } else { model = GTK_TREE_MODEL(widgets->UserList); filter = GTK_TREE_MODEL(widgets->UserFilter); + sort = GTK_TREE_MODEL(widgets->UserSort); } GtkTreePath *path_converted = gtk_tree_path_new_from_string(path); - gtk_tree_model_get_iter(filter,&filter_iter,path_converted); + gtk_tree_model_get_iter(sort,&filter_iter,path_converted); { - gtk_tree_model_filter_convert_iter_to_child_iter(GTK_TREE_MODEL_FILTER(filter),&iter,&filter_iter); + gtk_tree_model_sort_convert_iter_to_child_iter(GTK_TREE_MODEL_SORT(sort),&itor,&filter_iter); + gtk_tree_model_filter_convert_iter_to_child_iter(GTK_TREE_MODEL_FILTER(filter),&iter,&itor); gboolean status = 0; char *service_name; gtk_tree_model_get(model,&iter,3,&status,5,&service_name,-1); @@ -439,11 +455,11 @@ void on_filter_changed(GtkWidget *, main_window *widgets){ 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)); + gtk_tree_view_set_model(GTK_TREE_VIEW(widgets->SystemUnitsTree),GTK_TREE_MODEL(widgets->SystemSort)); } 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)); + gtk_tree_view_set_model(GTK_TREE_VIEW(widgets->UserUnitsTree),GTK_TREE_MODEL(widgets->UserSort)); } } @@ -452,20 +468,24 @@ void on_system_kill_confirmed(GtkWidget *,char *service_name){ } void on_system_launch_clicked(GtkWidget *, char *path, main_window *widgets){ - GtkTreeIter iter, filter_iter; + GtkTreeIter iter, itor, filter_iter; GtkTreeModel *model; GtkTreeModel *filter; + GtkTreeModel *sort; if (gtk_notebook_get_current_page(GTK_NOTEBOOK(widgets->MainNotebook))==0){ model = GTK_TREE_MODEL(widgets->SystemList); filter = GTK_TREE_MODEL(widgets->SystemFilter); + sort = GTK_TREE_MODEL(widgets->SystemSort); } else { model = GTK_TREE_MODEL(widgets->UserList); filter = GTK_TREE_MODEL(widgets->UserFilter); + sort = GTK_TREE_MODEL(widgets->UserSort); } GtkTreePath *path_converted = gtk_tree_path_new_from_string(path); - gtk_tree_model_get_iter(filter,&filter_iter,path_converted); + gtk_tree_model_get_iter(sort,&filter_iter,path_converted); { - gtk_tree_model_filter_convert_iter_to_child_iter(GTK_TREE_MODEL_FILTER(filter),&iter,&filter_iter); + gtk_tree_model_sort_convert_iter_to_child_iter(GTK_TREE_MODEL_SORT(sort),&itor,&filter_iter); + gtk_tree_model_filter_convert_iter_to_child_iter(GTK_TREE_MODEL_FILTER(filter),&iter,&itor); gboolean status = 0; char *service_name; gtk_tree_model_get(model,&iter,4,&status,5,&service_name,-1); @@ -1094,9 +1114,17 @@ gboolean yon_interface_list_models_disconnect(main_window *widgets){ return G_SOURCE_REMOVE; } +void on_sort_activate(GtkTreeViewColumn *self, main_window *widgets){ + if (self == gtk_tree_view_get_column(GTK_TREE_VIEW(widgets->SystemUpperTree),2)){ + gtk_tree_view_column_clicked(gtk_tree_view_get_column(GTK_TREE_VIEW(widgets->SystemUnitsTree),6)); + } else { + gtk_tree_view_column_clicked(gtk_tree_view_get_column(GTK_TREE_VIEW(widgets->UserUnitsTree),6)); + } +} + gboolean yon_interface_list_models_connect(main_window *widgets){ - 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->SystemUnitsTree),GTK_TREE_MODEL(widgets->SystemSort)); + gtk_tree_view_set_model(GTK_TREE_VIEW(widgets->UserUnitsTree),GTK_TREE_MODEL(widgets->UserSort)); 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)); @@ -1786,7 +1814,9 @@ void yon_main_window_complete(main_window *widgets){ 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->SystemSort = GTK_TREE_MODEL_SORT(gtk_builder_get_object(builder,"SystemSort")); widgets->UserFilter = GTK_TREE_MODEL_FILTER(gtk_builder_get_object(builder,"UserFilter")); + widgets->UserSort = GTK_TREE_MODEL_SORT(gtk_builder_get_object(builder,"UserSort")); 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")); @@ -1929,6 +1959,9 @@ void yon_main_window_complete(main_window *widgets){ g_signal_connect(G_OBJECT(widgets->TimersUpdateButton),"clicked",G_CALLBACK(on_interface_update),widgets); + g_signal_connect(G_OBJECT(gtk_tree_view_get_column(GTK_TREE_VIEW(widgets->SystemUpperTree),2)),"clicked",G_CALLBACK(on_sort_activate),widgets); + g_signal_connect(G_OBJECT(gtk_tree_view_get_column(GTK_TREE_VIEW(widgets->UsersUpperTree),2)),"clicked",G_CALLBACK(on_sort_activate),widgets); + if (getuid()==0){ gtk_widget_set_sensitive(widgets->UserServiceUpdateButton,0); gtk_widget_set_sensitive(widgets->UserPrevButton,0); diff --git a/source/ubl-settings-services.h b/source/ubl-settings-services.h index 619021e..3be80eb 100644 --- a/source/ubl-settings-services.h +++ b/source/ubl-settings-services.h @@ -260,7 +260,9 @@ typedef struct { GtkWidget *DeactivateLabel; GtkTreeModelFilter *SystemFilter; + GtkTreeModelSort *SystemSort; GtkTreeModelFilter *UserFilter; + GtkTreeModelSort *UserSort; GtkCellRenderer *ConfigAutostartCell; GtkCellRenderer *ConfigAutostopCell; @@ -538,4 +540,5 @@ gboolean yon_user_set(struct system_user_data *data); gboolean yon_system_set(struct system_services_data *data); gboolean yon_interface_list_models_connect(main_window *widgets); gboolean yon_interface_list_models_disconnect(main_window *widgets); +void on_sort_activate(GtkTreeViewColumn *self, main_window *widgets); #endif \ No newline at end of file diff --git a/ubl-settings-services.glade b/ubl-settings-services.glade index 9ff5ef2..36282bc 100644 --- a/ubl-settings-services.glade +++ b/ubl-settings-services.glade @@ -1,5 +1,5 @@ - + @@ -64,6 +64,9 @@ SystemList + + SystemFilter + @@ -361,6 +364,9 @@ UserList + + UserFilter + True False @@ -926,6 +932,7 @@ autosize Service + True @@ -956,6 +963,8 @@ fixed 20 Autostart + True + 0 @@ -970,6 +979,8 @@ fixed 20 Autostop + True + 1 @@ -984,6 +995,8 @@ fixed 20 Block + True + 2 @@ -998,6 +1011,8 @@ fixed 20 Autostart + True + 3 @@ -1012,6 +1027,8 @@ fixed 20 Launched + True + 4 @@ -1026,6 +1043,8 @@ 10 20 Unit + True + 5 @@ -1040,6 +1059,8 @@ fixed 20 + True + 6 @@ -1527,6 +1548,7 @@ Service + True @@ -1557,6 +1579,8 @@ fixed 20 Autostart + True + 0 @@ -1571,6 +1595,8 @@ fixed 20 Autostop + True + 1 @@ -1585,6 +1611,8 @@ fixed 20 Block + True + 2 @@ -1599,6 +1627,7 @@ fixed 20 Autostart + True @@ -1613,6 +1642,8 @@ fixed 20 Launched + True + 4 @@ -1627,6 +1658,8 @@ 10 20 Unit + True + 5 @@ -1641,6 +1674,8 @@ 20 True + True + 6