Update button rework

pull/12/head
parent 8f5aa4a04a
commit 64ed79ce0a

@ -17,7 +17,7 @@ void on_config_local_load(GtkWidget *self,main_window *widgets){
if (self){};
yon_load_proceed(YON_CONFIG_LOCAL);
yon_ubl_status_box_render(LIST_LOAD_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE);
g_thread_new("",(GThreadFunc)yon_interface_update,widgets);
gdk_threads_add_idle((GSourceFunc)((gboolean*)(void*)yon_interface_update),widgets);
main_config.load_mode=1;
}
}
@ -28,7 +28,7 @@ void on_config_global_load(GtkWidget *self,main_window *widgets){
if (self){};
yon_load_proceed(YON_CONFIG_GLOBAL);
yon_ubl_status_box_render(LIST_LOAD_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE);
g_thread_new("",(GThreadFunc)yon_interface_update,widgets);
gdk_threads_add_idle((GSourceFunc)((gboolean*)(void*)yon_interface_update),widgets);
main_config.load_mode=0;
}
@ -243,12 +243,6 @@ gboolean yon_service_source_check(GtkTreeModel *model, GtkTreeIter *iter,void *d
return 1;
}
void on_source_changed(GtkWidget *self, main_window *widgets){
if (self){};
GtkTreePath *path = gtk_tree_path_new();
GtkTreeModel *model = gtk_tree_model_filter_new(GTK_TREE_MODEL(widgets->liststore2),path);
gtk_tree_model_filter_set_visible_func(GTK_TREE_MODEL_FILTER(model),(GtkTreeModelFilterVisibleFunc)yon_service_source_check,NULL,NULL);
}
gboolean on_service_filter(GtkTreeModel *model, GtkTreeIter *iter,void *data){
if (data){};
@ -295,6 +289,26 @@ gboolean on_blocked_filter(GtkTreeModel *model, GtkTreeIter *iter,void *data){
return 0;
}
gboolean on_source_user_filter(GtkTreeModel *model, GtkTreeIter *iter,void *data){
if (data){};
gboolean type;
gtk_tree_model_get(model,iter,8,&type,-1);
if (type)
return 1;
return 0;
}
gboolean on_source_system_filter(GtkTreeModel *model, GtkTreeIter *iter,void *data){
if (data){};
gboolean type;
gtk_tree_model_get(model,iter,8,&type,-1);
if (!type)
return 1;
return 0;
}
void on_type_changed(GtkWidget *self, main_window *widgets){
if (self){};
switch (gtk_combo_box_get_active(GTK_COMBO_BOX(widgets->ServiceTypeCombo))){
@ -322,6 +336,21 @@ void on_type_changed(GtkWidget *self, main_window *widgets){
gtk_tree_model_filter_refilter(GTK_TREE_MODEL_FILTER(main_config.BlockedFilter));
break;
}
if (main_config.SourceFilter){
g_object_unref(main_config.SourceFilter);
main_config.SourceFilter=NULL;
}
main_config.SourceFilter = gtk_tree_model_filter_new(gtk_tree_view_get_model(GTK_TREE_VIEW(widgets->MainTree)),NULL);
int active = gtk_combo_box_get_active(GTK_COMBO_BOX(widgets->ServiceSourceCombo));
if (active==1){
gtk_tree_model_filter_set_visible_func(GTK_TREE_MODEL_FILTER(main_config.SourceFilter),(GtkTreeModelFilterVisibleFunc)on_source_system_filter,NULL,NULL);
gtk_tree_view_set_model(GTK_TREE_VIEW(widgets->MainTree),main_config.SourceFilter);
} else if (active==2){
gtk_tree_model_filter_set_visible_func(GTK_TREE_MODEL_FILTER(main_config.SourceFilter),(GtkTreeModelFilterVisibleFunc)on_source_user_filter,NULL,NULL);
gtk_tree_view_set_model(GTK_TREE_VIEW(widgets->MainTree),main_config.SourceFilter);
}
gtk_tree_model_filter_refilter(GTK_TREE_MODEL_FILTER(main_config.SourceFilter));
}
void on_service_update(GtkWidget *self, terminal_window* window){
@ -389,7 +418,6 @@ void on_update(GtkWidget *self,main_window *widgets){
}
void *update_delay(main_window *widgets){
sleep(1);
main_config.update_thread_active=0;
switch (gtk_combo_box_get_active(GTK_COMBO_BOX(widgets->ServiceTypeCombo))){
case 0: gtk_tree_view_set_model(GTK_TREE_VIEW(widgets->MainTree),GTK_TREE_MODEL(widgets->liststore2));
@ -410,6 +438,17 @@ void *update_delay(main_window *widgets){
gtk_tree_view_set_model(GTK_TREE_VIEW(widgets->MainTree),main_config.BlockedFilter);
break;
}
if (main_config.SourceFilter){
g_object_unref(main_config.SourceFilter);
main_config.SourceFilter=NULL;
}
main_config.SourceFilter = gtk_tree_model_filter_new(gtk_tree_view_get_model(GTK_TREE_VIEW(widgets->MainTree)),NULL);
int source_mode = gtk_combo_box_get_active(GTK_COMBO_BOX(widgets->ServiceSourceCombo));
if (source_mode==1){
gtk_tree_model_filter_set_visible_func(GTK_TREE_MODEL_FILTER(main_config.ServiceFilter),(GtkTreeModelFilterVisibleFunc)on_source_system_filter,NULL,NULL);
} else if (source_mode==2){
gtk_tree_model_filter_set_visible_func(GTK_TREE_MODEL_FILTER(main_config.ServiceFilter),(GtkTreeModelFilterVisibleFunc)on_source_user_filter,NULL,NULL);
}
textdomain(template_ui_LocaleName);
if (main_config.load_mode){
yon_ubl_status_box_render(LOCAL_LOAD_SUCCESS_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE);
@ -420,12 +459,16 @@ void *update_delay(main_window *widgets){
return NULL;
}
void *yon_interface_update(main_window *widgets){
gboolean yon_interface_update(main_window *widgets){
gtk_widget_set_sensitive(widgets->UpdateButton,0);
int size;
int size_users;
GtkTreeIter iter;
gtk_tree_view_set_model(GTK_TREE_VIEW(widgets->MainTree),NULL);
config_str services = yon_config_load(load_services_command,&size);
config_str users_services = yon_config_load(load_user_services_command,&size_users);
for (int i=0;i<size;i++){
while(gtk_events_pending()) gtk_main_iteration();
int parsed_size;
if (services[i][strlen(services[i])-1]=='\n') services[i][strlen(services[i])-1]='\0';
config_str parsed = yon_char_parse(services[i],&parsed_size,";");
@ -435,7 +478,11 @@ void *yon_interface_update(main_window *widgets){
if (strstr(parsed[0],".socket"))
type = 2;
else type = 1;
gtk_list_store_set(widgets->liststore2,&iter,5,parsed[0],6,description,7,type,-1);
int user_service=0;
if (yon_char_parsed_check_exist(users_services,size_users,parsed[0])!=-1){
user_service=1;
}
gtk_list_store_set(widgets->liststore2,&iter,5,parsed[0],6,description,7,type,8,user_service,-1);
}
int launched_size;
config_str launched_parsed = yon_config_load(load_launched_command,&launched_size);
@ -490,15 +537,11 @@ void *yon_interface_update(main_window *widgets){
gtk_list_store_set(widgets->liststore2,&iter,3,0,-1);
}
free(name_parsed);
while(gtk_events_pending()) gtk_main_iteration();
}
g_thread_new("",(GThreadFunc)update_delay,widgets);
// int type_active=0;
// if (!(type_active=gtk_combo_box_get_active(GTK_COMBO_BOX(widgets->ServiceTypeCombo)))){
// gtk_combo_box_set_active(GTK_COMBO_BOX(widgets->ServiceTypeCombo),type_active);
// } if (!(type_active=gtk_combo_box_get_active(GTK_COMBO_BOX(widgets->ServiceTypeCombo)))){
// gtk_combo_box_set_active(GTK_COMBO_BOX(widgets->ServiceTypeCombo),type_active);
// }
return NULL;
update_delay(widgets);
gtk_widget_set_sensitive(widgets->UpdateButton,1);
return 0;
}
void on_column_resize(GtkTreeViewColumn *self,GParamSpec *pspec,main_window *widgets){
@ -694,6 +737,7 @@ void yon_main_window_complete(main_window *widgets){
g_signal_connect(G_OBJECT(g_list_nth_data(list,4)),"notify::width",G_CALLBACK(on_column_resize),widgets);
g_signal_connect(G_OBJECT(widgets->MainTree),"cursor-changed",G_CALLBACK(on_activate),widgets);
g_signal_connect(G_OBJECT(widgets->ServiceTypeCombo),"changed",G_CALLBACK(on_type_changed),widgets);
g_signal_connect(G_OBJECT(widgets->ServiceSourceCombo),"changed",G_CALLBACK(on_type_changed),widgets);
g_signal_connect(G_OBJECT(widgets->LoadLocalMenuItem),"activate",G_CALLBACK(on_config_local_load),widgets);
g_signal_connect(G_OBJECT(widgets->LoadGlobalMenuItem),"activate",G_CALLBACK(on_config_global_load),widgets);
@ -718,7 +762,7 @@ void yon_main_window_complete(main_window *widgets){
yon_ubl_status_box_render(LIST_LOAD_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE);
if (!main_config.update_thread_active){
main_config.update_thread_active=1;
g_thread_new("",(GThreadFunc)yon_interface_update,widgets);
gdk_threads_add_idle((GSourceFunc)((gboolean*)(void*)yon_interface_update),widgets);
}
}

@ -33,6 +33,8 @@
#define LocaleName "ubl-settings-services"
#define load_services_command "systemctl list-units --type=service --type=socket --no-pager --all |grep -E \"^ \" |grep -v \"UNIT\" |sed -e 's/ */;/g' -e 's/^;//g' -e 's/running /running;/g' -e 's/inactive /inactive;/g'"
#define load_user_services_command yon_char_unite("su -l ",yon_ubl_root_user_get()," -c \"systemctl --user list-units --type=service --type=socket --no-pager --all |grep -E \"^ \" |grep -v \"UNIT\" |sed -e 's/ */;/g' -e 's/^;//g' |cut -f1 -d';'\"",NULL)
#define load_system_services_command "systemctl --system list-units --type=service --type=socket --no-pager --all |grep -E \"^ \" |grep -v \"UNIT\" |sed -e 's/ */;/g' -e 's/^;//g' |cut -f1 -d';'"
#define load_enabled_command "systemctl list-unit-files --type=service --type=socket --no-pager --state=enabled --all |sed -e 's/ */:/g' -e 's/ *: */:/g'|cut -f1 -d:"
#define load_launched_command "systemctl list-units --type=service --type=socket --no-pager --state=active --all --no-legend|sed -e 's/^ //g' -e 's/ */:/g' |cut -f1 -d:"
#define service_start_command(target) yon_char_append("systemctl start --no-pager ",target)
@ -68,6 +70,8 @@ typedef struct {
GtkTreeModel *AutolaunchFilter;
GtkTreeModel *StoppedFilter;
GtkTreeModel *BlockedFilter;
GtkTreeModel *SourceFilter;
int update_thread_active;
} config;
@ -183,7 +187,7 @@ void on_config_local_save();
void on_config_global_save();
void *yon_interface_update(main_window *widgets);
gboolean yon_interface_update(main_window *widgets);
GtkWidget *yon_menu_button_create(char *icon_name, char *text);
@ -207,8 +211,6 @@ void on_system_launch_clicked();
gboolean yon_service_source_check(GtkTreeModel *model, GtkTreeIter *iter, void *data);
void on_source_changed(GtkWidget *self, main_window *widgets);
gboolean yon_service_type_check(GtkTreeModel *model, GtkTreeIter *iter,void *data);
void on_type_changed(GtkWidget *self, main_window *widgets);
@ -245,6 +247,10 @@ gboolean on_stopped_filter(GtkTreeModel *model, GtkTreeIter *iter,void *data);
gboolean on_blocked_filter(GtkTreeModel *model, GtkTreeIter *iter,void *data);
gboolean on_source_user_filter(GtkTreeModel *model, GtkTreeIter *iter,void *data);
gboolean on_source_system_filter(GtkTreeModel *model, GtkTreeIter *iter,void *data);
terminal_window *yon_terminal_window_new();
void on_service_update(GtkWidget *self, terminal_window* window);
Loading…
Cancel
Save