diff --git a/source/ubl-settings-services.c b/source/ubl-settings-services.c
index 7453663..616535e 100644
--- a/source/ubl-settings-services.c
+++ b/source/ubl-settings-services.c
@@ -393,6 +393,38 @@ void on_system_autostart_clicked(GtkCellRenderer *, char *path, main_window *wid
}
+gboolean sort_bool(GtkTreeModel *model, GtkTreeIter *a, GtkTreeIter *b,gpointer col){
+ int val_a,val_b;
+ char *name_a="", *name_b="";
+ gtk_tree_model_get(model,a,GPOINTER_TO_INT(col),&val_a,6,&name_a,-1);
+ gtk_tree_model_get(model,b,GPOINTER_TO_INT(col),&val_b,6,&name_b,-1);
+ if (val_a==val_b){
+ gchar *key_a = g_utf8_collate_key(name_a, -1);
+ gchar *key_b = g_utf8_collate_key(name_b, -1);
+ gint result = strcmp(key_a, key_b);
+ g_free(key_a);
+ g_free(key_b);
+
+ return result;
+ }
+ return val_a ? -1 : 1;
+}
+
+gboolean sort_string(GtkTreeModel *model, GtkTreeIter *a, GtkTreeIter *b,gpointer col){
+ char *name_a="", *name_b="";
+ gtk_tree_model_get(model,a,GPOINTER_TO_INT(col),&name_a,-1);
+ gtk_tree_model_get(model,b,GPOINTER_TO_INT(col),&name_b,-1);
+ if (!name_a) name_a="";
+ if (!name_b) name_b="";
+ gchar *key_a = g_utf8_collate_key(name_a, -1);
+ gchar *key_b = g_utf8_collate_key(name_b, -1);
+ gint result = strcmp(key_a, key_b);
+ g_free(key_a);
+ g_free(key_b);
+
+ return result;
+}
+
gboolean yon_filter(GtkTreeModel* model, GtkTreeIter *iter, main_window *widgets){
gboolean autostart,autostop,masked,type,loaded,active;
char *name;
@@ -1149,14 +1181,14 @@ gboolean yon_interface_list_models_connect(main_window *widgets){
gboolean yon_system_set(struct system_services_data *data){
GtkTreeIter iter;
gtk_list_store_append(data->widgets->SystemList,&iter);
- gtk_list_store_set(data->widgets->SystemList,&iter,3,data->SystemAutostart,4,data->SystemLaunched,5,data->Name,6,data->Descr,7,data->Type,8,data->Loaded,9,data->Active,11,data->State,-1);
+ gtk_list_store_set(data->widgets->SystemList,&iter,3,data->SystemAutostart,4,data->SystemLaunched,5,data->Name,6,data->Descr,7,data->Type,8,data->Loaded,9,data->Active,11,_(data->State),13,data->State,-1);
return G_SOURCE_REMOVE;
}
gboolean yon_user_set(struct system_user_data *data){
GtkTreeIter iter;
gtk_list_store_append(data->widgets->UserList,&iter);
- gtk_list_store_set(data->widgets->UserList,&iter,3,data->SystemAutostart,4,data->SystemLaunched,5,data->Name,6,data->Descr,5,data->Name,6,data->Descr,7,data->Type,8,data->Loaded,9,data->Active,11,data->State,-1);
+ gtk_list_store_set(data->widgets->UserList,&iter,3,data->SystemAutostart,4,data->SystemLaunched,5,data->Name,6,data->Descr,5,data->Name,6,data->Descr,7,data->Type,8,data->Loaded,9,data->Active,11,_(data->State),13,data->State,-1);
return G_SOURCE_REMOVE;
}
@@ -1366,7 +1398,7 @@ void* yon_interface_update(main_window *widgets){
int active = !strcmp(parsed[2],"active");
enum YON_UNIT_TYPE type = yon_get_unit_type(parsed[0]);
gtk_list_store_append(widgets->SystemList,&iter);
- gtk_list_store_set(widgets->SystemList,&iter,3,loaded,4,active,5,parsed[0],6,parsed[4],7,type,8,active,9,1,11,_(parsed[3]),-1);
+ gtk_list_store_set(widgets->SystemList,&iter,3,loaded,4,active,5,parsed[0],6,parsed[4],7,type,8,active,9,1,11,_(parsed[3]),13,parsed[3],-1);
}
}
@@ -1376,7 +1408,7 @@ void* yon_interface_update(main_window *widgets){
GtkTreeIter iter;
gtk_list_store_append(widgets->SystemList,&iter);
enum YON_UNIT_TYPE type = yon_get_unit_type(system_units[i]);
- gtk_list_store_set(widgets->SystemList,&iter,0,0,1,0,2,0,3,0,4,0,5,system_units[i],6,"",7,type,8,0,9,0,10,0,11,_("disabled"),-1);
+ gtk_list_store_set(widgets->SystemList,&iter,0,0,1,0,2,0,3,0,4,0,5,system_units[i],6,"",7,type,8,0,9,0,10,0,11,_("disabled"),13,"disabled",-1);
}
}
@@ -1416,7 +1448,7 @@ void* yon_interface_update(main_window *widgets){
int active = !strcmp(parsed[2],"active");
enum YON_UNIT_TYPE type = yon_get_unit_type(parsed[0]);
gtk_list_store_append(widgets->UserList,&iter);
- gtk_list_store_set(widgets->UserList,&iter,3,loaded,4,active,5,parsed[0],6,parsed[4],7,type,8,active,9,1,11,_(parsed[3]),-1);
+ gtk_list_store_set(widgets->UserList,&iter,3,loaded,4,active,5,parsed[0],6,parsed[4],7,type,8,active,9,1,11,_(parsed[3]),13,parsed[3],-1);
}
}
@@ -1426,7 +1458,7 @@ void* yon_interface_update(main_window *widgets){
GtkTreeIter iter;
gtk_list_store_append(widgets->UserList,&iter);
enum YON_UNIT_TYPE type = yon_get_unit_type(user_units[i]);
- gtk_list_store_set(widgets->UserList,&iter,0,0,1,0,2,0,3,0,4,0,5,user_units[i],6,"",7,type,8,0,9,0,10,0,11,_("disabled"),-1);
+ gtk_list_store_set(widgets->UserList,&iter,0,0,1,0,2,0,3,0,4,0,5,user_units[i],6,"",7,type,8,0,9,0,10,0,11,_("disabled"),13,"disabled",-1);
}
}
@@ -2042,6 +2074,11 @@ void yon_main_window_complete(main_window *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);
+ for (int i=0;i<5;i++){
+ gtk_tree_sortable_set_sort_func(GTK_TREE_SORTABLE(widgets->SystemSort),i,(GtkTreeIterCompareFunc)sort_bool,GINT_TO_POINTER(i),NULL);
+ }
+ gtk_tree_sortable_set_sort_func(GTK_TREE_SORTABLE(widgets->SystemSort),5,(GtkTreeIterCompareFunc)sort_string,GINT_TO_POINTER(13),NULL);
+ gtk_tree_sortable_set_sort_func(GTK_TREE_SORTABLE(widgets->SystemSort),6,(GtkTreeIterCompareFunc)sort_string,GINT_TO_POINTER(6),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);
diff --git a/source/ubl-settings-services.h b/source/ubl-settings-services.h
index 5ec7338..0aaeafb 100644
--- a/source/ubl-settings-services.h
+++ b/source/ubl-settings-services.h
@@ -544,4 +544,6 @@ 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);
+gboolean sort_bool(GtkTreeModel *model, GtkTreeIter *a, GtkTreeIter *b,gpointer col);
+gboolean sort_string(GtkTreeModel *model, GtkTreeIter *a, GtkTreeIter *b,gpointer col);
#endif
\ No newline at end of file
diff --git a/ubl-settings-services.glade b/ubl-settings-services.glade
index 36282bc..c124c37 100644
--- a/ubl-settings-services.glade
+++ b/ubl-settings-services.glade
@@ -59,6 +59,8 @@
+
+