diff --git a/source/ubl-settings-services.c b/source/ubl-settings-services.c index 3d1fc8a..cfe313f 100644 --- a/source/ubl-settings-services.c +++ b/source/ubl-settings-services.c @@ -71,7 +71,7 @@ void on_config_local_load(GtkWidget *,main_window *widgets){ main_config.update_thread_active=1; yon_load_proceed(YON_CONFIG_LOCAL); yon_ubl_status_box_render(LIST_LOAD_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE); - g_idle_add((GSourceFunc)yon_interface_update,widgets); + g_thread_new("update",(GThreadFunc)yon_interface_update,widgets); main_config.load_mode=1; } } @@ -81,7 +81,7 @@ void on_config_global_load(GtkWidget *,main_window *widgets){ main_config.update_thread_active=1; yon_load_proceed(YON_CONFIG_GLOBAL); yon_ubl_status_box_render(LIST_LOAD_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE); - g_idle_add((GSourceFunc)yon_interface_update,widgets); + g_thread_new("update",(GThreadFunc)yon_interface_update,widgets); main_config.load_mode=0; } @@ -93,7 +93,7 @@ void on_config_custom_load(GtkWidget *,main_window *widgets){ yon_ubl_status_box_render(GLOBAL_LOAD_SUCCESS_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE); textdomain(LocaleName); main_config.load_mode=3; - g_idle_add((GSourceFunc)yon_interface_update,widgets); + g_thread_new("update",(GThreadFunc)yon_interface_update,widgets); } void on_service_constant_update(){ @@ -124,20 +124,6 @@ void on_config_custom_save(GtkWidget *, main_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){ @@ -391,9 +377,9 @@ void on_system_autostart_clicked(GtkCellRenderer *, char *path, main_window *wid } gboolean yon_filter(GtkTreeModel* model, GtkTreeIter *iter, main_window *widgets){ - gboolean autostart,autostop,masked,type,loaded,inactive; + gboolean autostart,autostop,masked,type,loaded,active; char *name; - gtk_tree_model_get(model,iter,0,&autostart,1,&autostop,2,&masked,5,&name,7,&type,8,&loaded,9,&inactive,-1); + gtk_tree_model_get(model,iter,0,&autostart,1,&autostop,2,&masked,5,&name,7,&type,8,&loaded,9,&active,-1); GtkWidget *combo=NULL; GtkWidget *loaded_check=NULL; GtkWidget *active_check=NULL; @@ -442,7 +428,7 @@ gboolean yon_filter(GtkTreeModel* model, GtkTreeIter *iter, main_window *widgets 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){ + if (type_filter&&(active_filter||active)&&(loaded_filter||loaded)&&name_filter){ return 1; } return 0; @@ -1045,8 +1031,8 @@ void on_timers_list_status(GtkWidget *, main_window *widgets){ } -gboolean yon_interface_update(main_window *widgets){ - if (widgets){ +gboolean yon_interface_list_models_disconnect(main_window *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); @@ -1055,7 +1041,191 @@ gboolean yon_interface_update(main_window *widgets){ gtk_list_store_clear(widgets->UserList); gtk_list_store_clear(widgets->ConfigList); gtk_list_store_clear(widgets->TimersList); + + g_signal_handlers_block_by_func(G_OBJECT(widgets->UserFiltersCombo),G_CALLBACK(on_filter_changed),widgets); + g_signal_handlers_block_by_func(G_OBJECT(widgets->UserSearchEntry),G_CALLBACK(on_filter_changed),widgets); + g_signal_handlers_block_by_func(G_OBJECT(widgets->UserInactiveShowCheck),G_CALLBACK(on_filter_changed),widgets); + g_signal_handlers_block_by_func(G_OBJECT(widgets->UserUnloadedShowCheck),G_CALLBACK(on_filter_changed),widgets); + return G_SOURCE_REMOVE; +} + +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->ConfigMainTree),GTK_TREE_MODEL(widgets->ConfigList)); + gtk_tree_view_set_model(GTK_TREE_VIEW(widgets->TimersMainTree),GTK_TREE_MODEL(widgets->TimersList)); + + g_signal_handlers_unblock_by_func(G_OBJECT(widgets->UserFiltersCombo),G_CALLBACK(on_filter_changed),widgets); + g_signal_handlers_unblock_by_func(G_OBJECT(widgets->UserSearchEntry),G_CALLBACK(on_filter_changed),widgets); + g_signal_handlers_unblock_by_func(G_OBJECT(widgets->UserInactiveShowCheck),G_CALLBACK(on_filter_changed),widgets); + g_signal_handlers_unblock_by_func(G_OBJECT(widgets->UserUnloadedShowCheck),G_CALLBACK(on_filter_changed),widgets); + return G_SOURCE_REMOVE; +} + +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); + 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); + return G_SOURCE_REMOVE; +} + +gboolean yon_system_config_set(struct system_config_data *data){ + GtkTreeIter iter; + gtk_list_store_append(data->widgets->ConfigList,&iter); + gtk_list_store_set(data->widgets->ConfigList,&iter,0,data->Name,1,data->Date,2,data->Descr,-1); + return G_SOURCE_REMOVE; +} + +gboolean yon_timers_set(struct system_timers_data *data){ + GtkTreeIter iter; + gtk_list_store_append(data->widgets->TimersList,&iter); + gtk_list_store_set(data->widgets->TimersList,&iter,0,data->unit,1,data->next,2,data->left,3,data->last,4,data->passed,5,data->activates,-1); + return G_SOURCE_REMOVE; +} + +gboolean yon_interface_update_finish(main_window *widgets){ + { + 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); + while(gtk_events_pending()) gtk_main_iteration(); + 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); + + while(gtk_events_pending()) gtk_main_iteration(); + 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); + } + } + } + while(gtk_events_pending()) gtk_main_iteration(); + { + + 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); + + while(gtk_events_pending()) gtk_main_iteration(); + 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); + + while(gtk_events_pending()) gtk_main_iteration(); + 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); + } + } + } + main_config.update_thread_active=0; + return G_SOURCE_REMOVE; +} + +void* yon_interface_update(main_window *widgets){ + if (widgets){ + g_idle_add((GSourceFunc)yon_interface_list_models_disconnect,widgets); int system_size; config_str system_services = yon_config_load(load_services_command,&system_size); int user_size; @@ -1071,8 +1241,7 @@ gboolean yon_interface_update(main_window *widgets){ yon_char_remove_last_symbol(launched[i],'\n'); } 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); + struct system_services_data *data = malloc(sizeof(struct system_services_data)); + { + data->widgets=widgets; + data->SystemAutostart=loaded; + data->SystemLaunched=active; + data->Name=parsed[0]; + data->Descr=parsed[4]; + data->Type = type; + data->Loaded=strcmp(parsed[1],"loaded")?0:1; + data->Active=strcmp(parsed[2],"active")?0:1; + data->State=_(parsed[3]); + } + g_idle_add((GSourceFunc)yon_system_set,data); } } - while(gtk_events_pending()) gtk_main_iteration(); + 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); + int loaded = !system(check_enabled_command(parsed[0])); + int active = !system(service_check_active_command(parsed[0])); + enum YON_UNIT_TYPE type = yon_get_unit_type(parsed[0]); + struct system_user_data *data = malloc(sizeof(struct system_user_data)); + { + data->widgets=widgets; + data->SystemAutostart=yon_char_parsed_check_exist(launched,launched_size,parsed[0])>-1; + data->SystemLaunched=strcmp(parsed[2],"active")?0:1; + data->Name=parsed[0]; + data->Descr=parsed[4]; + data->Type = type; + data->Loaded=loaded; + data->Active=active; + data->State=_(parsed[3]); + } + g_idle_add((GSourceFunc)yon_user_set,data); } } - while(gtk_events_pending()) gtk_main_iteration(); + int descr_size; config_str config_descr = yon_resource_open_file(systemd_config_path,&descr_size); for (int i=0; i2){ - GtkTreeIter iter; char *description = ""; { for (int k=0;kConfigList,&iter); - gtk_list_store_set(widgets->ConfigList,&iter,0,parsed[2],1,parsed[1],2,description,-1); + struct system_config_data *data = malloc(sizeof(struct system_config_data)); + { + data->widgets=widgets; + data->Name=parsed[2]; + data->Descr=parsed[1]; + data->Date = description; + } + g_idle_add((GSourceFunc)yon_system_config_set,data); } } yon_sessions_update(widgets); - while(gtk_events_pending()) gtk_main_iteration(); + 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); @@ -1214,145 +1407,23 @@ gboolean yon_interface_update(main_window *widgets){ } else { passed=""; } - gtk_list_store_set(widgets->TimersList,&iter,0,unit,1,next,2,left,3,last,4,passed,5,activates,-1); - } - } - while(gtk_events_pending()) gtk_main_iteration(); - { - 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;iwidgets=widgets; + data->unit=unit; + data->next=next; + data->left=left; + data->last=last; + data->passed=passed; + data->activates=activates; } - if (!strcmp(name,parsed[i])) - gtk_list_store_set(widgets->SystemList,&iter,0,1,-1); - } - } - yon_char_parsed_free(parsed,parsed_size); - - while(gtk_events_pending()) gtk_main_iteration(); - 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); - - while(gtk_events_pending()) gtk_main_iteration(); - 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); - } + g_idle_add((GSourceFunc)yon_timers_set,data); } } - while(gtk_events_pending()) gtk_main_iteration(); - { - - 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); - while(gtk_events_pending()) gtk_main_iteration(); - 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); - - while(gtk_events_pending()) gtk_main_iteration(); - 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); - } - } - } - while(gtk_events_pending()) gtk_main_iteration(); - 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 G_SOURCE_REMOVE; + g_idle_add((GSourceFunc)yon_interface_update_finish,widgets); + g_idle_add((GSourceFunc)yon_interface_list_models_connect,widgets); + return NULL; } void on_interface_update(GtkWidget *, main_window *widgets){ @@ -1360,7 +1431,7 @@ void on_interface_update(GtkWidget *, main_window *widgets){ gtk_tree_selection_unselect_all(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->SystemUnitsTree))); gtk_tree_selection_unselect_all(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->UserUnitsTree))); main_config.update_thread_active=1; - g_idle_add((GSourceFunc)yon_interface_update,widgets); + g_thread_new("update",(GThreadFunc)yon_interface_update,widgets); } } @@ -1825,7 +1896,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_idle_add((GSourceFunc)yon_interface_update,widgets); + g_thread_new("update",(GThreadFunc)yon_interface_update,widgets); } yon_save_window_set_postsave_function(on_save_done,widgets); diff --git a/source/ubl-settings-services.h b/source/ubl-settings-services.h index f5ab444..735e49b 100644 --- a/source/ubl-settings-services.h +++ b/source/ubl-settings-services.h @@ -46,6 +46,7 @@ #define service_disable_command(target) yon_char_append("systemctl disable ",target) #define service_kill_command(target) yon_char_append("systemctl kill ",target) #define service_check_active_command(target) yon_char_append("systemctl is-active ",target) +#define check_enabled_command(target) yon_char_append("systemctl is-enabled ",target) #define service_info_command(target) yon_char_append("systemctl status -l --no-pager ",target) #define get_log_command(target) yon_char_append("journalctl --all --no-pager --unit ",target) @@ -318,7 +319,7 @@ void on_sockets_list_status(GtkWidget *self, main_window *widgets); void on_timers_list_status(GtkWidget *self, main_window *widgets); -gboolean yon_interface_update(main_window *widgets); +void* yon_interface_update(main_window *widgets); void on_interface_update(GtkWidget *self, main_window *widgets); @@ -446,4 +447,71 @@ gboolean on_source_system_filter(GtkTreeModel *model, GtkTreeIter *iter,void *da void on_root_get_root(char *argline); void on_root_access(GtkWidget *self, main_window *widgets); -void on_save_done(main_window *widgets, config_str output, int size); \ No newline at end of file +void on_save_done(main_window *widgets, config_str output, int size); + +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 +}; + +struct system_services_data{ + main_window *widgets; + int SystemAutostart; + int SystemLaunched; + char *Name; + char *Descr; + enum YON_UNIT_TYPE Type; + int Loaded; + int Active; + char *State; + +}; + +struct system_user_data{ + main_window *widgets; + int SystemAutostart; + int SystemLaunched; + char *Name; + char *Descr; + enum YON_UNIT_TYPE Type; + int Loaded; + int Active; + char *State; + +}; + +struct system_config_data{ + main_window *widgets; + char *Name; + char *Descr; + char *Date; + +}; + +struct system_timers_data{ + main_window *widgets; + const char *unit; + const char *next; + const char *left; + const char *last; + const char *passed; + const char *activates; + +}; + +gboolean yon_interface_update_finish(main_window *widgets); +gboolean yon_timers_set(struct system_timers_data *data); +gboolean yon_system_config_set(struct system_config_data *data); +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); \ No newline at end of file