From c7a4cf0f0e8e2c0fa1a84af45ca5c4f7763fe0d0 Mon Sep 17 00:00:00 2001 From: Ivan Yarcev Date: Tue, 1 Apr 2025 18:22:08 +0600 Subject: [PATCH] Loading changes --- source/ubl-settings-system.c | 184 ++++++--------------------- source/ubl-settings-system.h | 6 +- ubl-settings-system-connection.glade | 2 +- ubl-settings-system-domain.glade | 2 +- 4 files changed, 45 insertions(+), 149 deletions(-) diff --git a/source/ubl-settings-system.c b/source/ubl-settings-system.c index 6c1468e..35cfb55 100644 --- a/source/ubl-settings-system.c +++ b/source/ubl-settings-system.c @@ -72,81 +72,45 @@ int yon_load_proceed(YON_CONFIG_TYPE type){ } void yon_config_local_load(GtkWidget *self, main_window *widgets){ - g_signal_handlers_block_by_func(G_OBJECT(widgets->IDEntry),G_CALLBACK(on_id_changed),widgets); - gtk_entry_set_text(GTK_ENTRY(widgets->HostnameEntry),""); - gtk_entry_set_text(GTK_ENTRY(widgets->IDEntry),""); - gtk_entry_set_text(GTK_ENTRY(widgets->LocaleEntry),DEFAULT_LABEL); - int size; - GtkTreeIter iter; - config_str rtn = yon_file_open(get_id_command,&size); - rtn[0]=yon_char_divide_search(rtn[0],"\n",-1); - gtk_entry_set_text(GTK_ENTRY(widgets->IDEntry),*rtn); - gtk_combo_box_set_active(GTK_COMBO_BOX(widgets->ConsoleFontCombo),0); - gtk_combo_box_set_active(GTK_COMBO_BOX(widgets->LanguageCombo),0); yon_load_proceed(YON_CONFIG_LOCAL); - char *hostname = yon_config_get_by_key(hostname_parameter); - if (!yon_char_is_empty(hostname)){ - gtk_entry_set_text(GTK_ENTRY(widgets->HostnameEntry),hostname); - } - int valid = gtk_tree_model_get_iter_first(GTK_TREE_MODEL(widgets->languagelist),&iter); - for(;valid;valid=gtk_tree_model_iter_next(GTK_TREE_MODEL(widgets->languagelist),&iter)){ - gtk_list_store_set(widgets->languagelist,&iter,2,0,-1); - } - char *id = yon_config_get_by_key(id_parameter); - if (id&&!strcmp(id,"random")) - gtk_combo_box_set_active(GTK_COMBO_BOX(widgets->IDCombo),1); - else if (id&&!strcmp(id,"hardware")) - gtk_combo_box_set_active(GTK_COMBO_BOX(widgets->IDCombo),2); - else if (id){ - gtk_entry_set_text(GTK_ENTRY(widgets->IDEntry),id); - gtk_combo_box_set_active(GTK_COMBO_BOX(widgets->IDCombo),3); - } else { - gtk_combo_box_set_active(GTK_COMBO_BOX(widgets->IDCombo),0); - gtk_widget_set_sensitive(widgets->IDEntry,0); + if (getuid()==0){ + textdomain(template_ui_LocaleName); + yon_ubl_status_box_render(LOCAL_LOAD_SUCCESS_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE); + textdomain(LocaleName); } + main_config.load_mode=1; + yon_interface_update(widgets); +} - char *code; - char *cons_font = yon_config_get_by_key(console_font_parameter); - if (cons_font){ - int valid = gtk_tree_model_get_iter_first(GTK_TREE_MODEL(widgets->fontlist),&iter); - for(;valid;valid=gtk_tree_model_iter_next(GTK_TREE_MODEL(widgets->fontlist),&iter)){ - gtk_tree_model_get(GTK_TREE_MODEL(widgets->fontlist),&iter,0,&code,-1); - if (code&&!strcmp(code,cons_font)) gtk_combo_box_set_active_iter(GTK_COMBO_BOX(widgets->ConsoleFontCombo),&iter); - } - } - char *lang = yon_config_get_by_key(language_parameter); - char *avlocale = yon_config_get_by_key(locale_parameter); - int locsize; - if (avlocale); - config_str locale_parsed = yon_char_parse(avlocale,&locsize,","); - gboolean is_active; - char *locale_string=""; - char *loc_name; - if (lang){ - int valid = gtk_tree_model_get_iter_first(GTK_TREE_MODEL(widgets->languagelist),&iter); - for(;valid;valid=gtk_tree_model_iter_next(GTK_TREE_MODEL(widgets->languagelist),&iter)){ - gtk_tree_model_get(GTK_TREE_MODEL(widgets->languagelist),&iter,0,&loc_name,1,&code,2,&is_active,-1); - if (code&&!strcmp(code,lang)) gtk_combo_box_set_active_iter(GTK_COMBO_BOX(widgets->LanguageCombo),&iter); - if (avlocale) - for (int i=0;ilanguagelist,&iter,2,1,-1); - locale_string = yon_char_unite(strcmp(locale_string,"") ? yon_char_append(locale_string,"; ") : locale_string, loc_name,NULL); - } - } - if (strcmp(locale_string,"")) gtk_entry_set_text(GTK_ENTRY(widgets->LocaleEntry),locale_string); +void yon_config_global_load(GtkWidget *self, main_window *widgets){ + yon_load_proceed(YON_CONFIG_GLOBAL); + if (getuid()==0){ + textdomain(template_ui_LocaleName); + yon_ubl_status_box_render(GLOBAL_LOAD_SUCCESS_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE); + textdomain(LocaleName); } - g_signal_handlers_unblock_by_func(G_OBJECT(widgets->IDEntry),G_CALLBACK(on_id_changed),widgets); + main_config.load_mode=0; + yon_interface_update(widgets); +} + +void yon_config_custom_load(GtkWidget *self, main_window *widgets){ + if (!yon_load_proceed(YON_CONFIG_CUSTOM)) + return; if (getuid()==0){ textdomain(template_ui_LocaleName); yon_ubl_status_box_render(LOCAL_LOAD_SUCCESS_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE); textdomain(LocaleName); } main_config.load_mode=1; + yon_interface_update(widgets); } -void yon_config_global_load(GtkWidget *self, main_window *widgets){ +void yon_interface_update(main_window *widgets){ + g_signal_handlers_block_by_func(G_OBJECT(widgets->IDEntry),G_CALLBACK(on_id_changed),widgets); + g_signal_handlers_block_by_func(G_OBJECT(widgets->HostnameEntry),G_CALLBACK(on_hostname_changed),widgets); + g_signal_handlers_block_by_func(G_OBJECT(widgets->ConsoleFontCombo),G_CALLBACK(on_console_font_changed),widgets); + g_signal_handlers_block_by_func(G_OBJECT(widgets->LanguageCombo),G_CALLBACK(on_language_changed),widgets); gtk_entry_set_text(GTK_ENTRY(widgets->HostnameEntry),""); gtk_entry_set_text(GTK_ENTRY(widgets->IDEntry),""); gtk_entry_set_text(GTK_ENTRY(widgets->LocaleEntry),DEFAULT_LABEL); @@ -157,7 +121,6 @@ void yon_config_global_load(GtkWidget *self, main_window *widgets){ gtk_entry_set_text(GTK_ENTRY(widgets->IDEntry),*rtn); gtk_combo_box_set_active(GTK_COMBO_BOX(widgets->ConsoleFontCombo),0); gtk_combo_box_set_active(GTK_COMBO_BOX(widgets->LanguageCombo),0); - yon_load_proceed(YON_CONFIG_GLOBAL); char *hostname = yon_config_get_by_key(hostname_parameter); if (!yon_char_is_empty(hostname)){ gtk_entry_set_text(GTK_ENTRY(widgets->HostnameEntry),hostname); @@ -211,12 +174,9 @@ void yon_config_global_load(GtkWidget *self, main_window *widgets){ if (strcmp(locale_string,"")) gtk_entry_set_text(GTK_ENTRY(widgets->LocaleEntry),locale_string); } g_signal_handlers_unblock_by_func(G_OBJECT(widgets->IDEntry),G_CALLBACK(on_id_changed),widgets); - if (getuid()==0){ - textdomain(template_ui_LocaleName); - yon_ubl_status_box_render(GLOBAL_LOAD_SUCCESS_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE); - textdomain(LocaleName); - } - main_config.load_mode=0; + g_signal_handlers_unblock_by_func(G_OBJECT(widgets->HostnameEntry),G_CALLBACK(on_hostname_changed),widgets); + g_signal_handlers_unblock_by_func(G_OBJECT(widgets->ConsoleFontCombo),G_CALLBACK(on_console_font_changed),widgets); + g_signal_handlers_unblock_by_func(G_OBJECT(widgets->LanguageCombo),G_CALLBACK(on_language_changed),widgets); } void yon_config_global_local_save(){ @@ -231,81 +191,6 @@ void yon_config_global_local_save(){ } -void yon_config_custom_load(GtkWidget *self, main_window *widgets){ - if (!yon_load_proceed(YON_CONFIG_CUSTOM)) - return; - g_signal_handlers_block_by_func(G_OBJECT(widgets->IDEntry),G_CALLBACK(on_id_changed),widgets); - gtk_entry_set_text(GTK_ENTRY(widgets->HostnameEntry),""); - gtk_entry_set_text(GTK_ENTRY(widgets->IDEntry),""); - gtk_entry_set_text(GTK_ENTRY(widgets->LocaleEntry),DEFAULT_LABEL); - int size; - GtkTreeIter iter; - config_str rtn = yon_file_open(get_id_command,&size); - rtn[0]=yon_char_divide_search(rtn[0],"\n",-1); - gtk_entry_set_text(GTK_ENTRY(widgets->IDEntry),*rtn); - gtk_combo_box_set_active(GTK_COMBO_BOX(widgets->ConsoleFontCombo),0); - gtk_combo_box_set_active(GTK_COMBO_BOX(widgets->LanguageCombo),0); - char *hostname = yon_config_get_by_key(hostname_parameter); - if (!yon_char_is_empty(hostname)){ - gtk_entry_set_text(GTK_ENTRY(widgets->HostnameEntry),hostname); - } - int valid = gtk_tree_model_get_iter_first(GTK_TREE_MODEL(widgets->languagelist),&iter); - for(;valid;valid=gtk_tree_model_iter_next(GTK_TREE_MODEL(widgets->languagelist),&iter)){ - gtk_list_store_set(widgets->languagelist,&iter,2,0,-1); - } - char *id = yon_config_get_by_key(id_parameter); - if (id&&!strcmp(id,"random")) - gtk_combo_box_set_active(GTK_COMBO_BOX(widgets->IDCombo),1); - else if (id&&!strcmp(id,"hardware")) - gtk_combo_box_set_active(GTK_COMBO_BOX(widgets->IDCombo),2); - else if (id){ - gtk_entry_set_text(GTK_ENTRY(widgets->IDEntry),id); - gtk_combo_box_set_active(GTK_COMBO_BOX(widgets->IDCombo),3); - } else { - gtk_combo_box_set_active(GTK_COMBO_BOX(widgets->IDCombo),0); - gtk_widget_set_sensitive(widgets->IDEntry,0); - } - - char *code; - char *cons_font = yon_config_get_by_key(console_font_parameter); - if (cons_font){ - int valid = gtk_tree_model_get_iter_first(GTK_TREE_MODEL(widgets->fontlist),&iter); - for(;valid;valid=gtk_tree_model_iter_next(GTK_TREE_MODEL(widgets->fontlist),&iter)){ - gtk_tree_model_get(GTK_TREE_MODEL(widgets->fontlist),&iter,0,&code,-1); - if (code&&!strcmp(code,cons_font)) gtk_combo_box_set_active_iter(GTK_COMBO_BOX(widgets->ConsoleFontCombo),&iter); - } - } - char *lang = yon_config_get_by_key(language_parameter); - char *avlocale = yon_config_get_by_key(locale_parameter); - int locsize; - if (avlocale); - config_str locale_parsed = yon_char_parse(avlocale,&locsize,","); - gboolean is_active; - char *locale_string=""; - char *loc_name; - if (lang){ - int valid = gtk_tree_model_get_iter_first(GTK_TREE_MODEL(widgets->languagelist),&iter); - for(;valid;valid=gtk_tree_model_iter_next(GTK_TREE_MODEL(widgets->languagelist),&iter)){ - gtk_tree_model_get(GTK_TREE_MODEL(widgets->languagelist),&iter,0,&loc_name,1,&code,2,&is_active,-1); - if (code&&!strcmp(code,lang)) gtk_combo_box_set_active_iter(GTK_COMBO_BOX(widgets->LanguageCombo),&iter); - if (avlocale) - for (int i=0;ilanguagelist,&iter,2,1,-1); - locale_string = yon_char_unite(strcmp(locale_string,"") ? yon_char_append(locale_string,"; ") : locale_string, loc_name,NULL); - } - } - if (strcmp(locale_string,"")) gtk_entry_set_text(GTK_ENTRY(widgets->LocaleEntry),locale_string); - } - g_signal_handlers_unblock_by_func(G_OBJECT(widgets->IDEntry),G_CALLBACK(on_id_changed),widgets); - if (getuid()==0){ - textdomain(template_ui_LocaleName); - yon_ubl_status_box_render(LOCAL_LOAD_SUCCESS_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE); - textdomain(LocaleName); - } - main_config.load_mode=1; -} - void yon_config_local_save(){ main_config.save_config=1; int changed = yon_config_get_status(id_parameter)==1; @@ -546,6 +431,7 @@ void on_domain_connect(GtkWidget *self, dictionary *dict){ gtk_window_set_transient_for(GTK_WINDOW(dialog->Window),GTK_WINDOW(window->Window)); gtk_widget_show(dialog->Window); gtk_entry_set_text(GTK_ENTRY(widgets->DomainEntry),adress); + } void on_status_clicked(GtkWidget *self, connection_window *window){ @@ -596,16 +482,22 @@ gboolean on_main_window_domain_status_update(connection_window *window){ } else { gtk_entry_set_icon_from_icon_name(GTK_ENTRY(window->AdressEntry),GTK_ENTRY_ICON_SECONDARY,domain_disconnected_icon); } + g_mutex_lock(&main_config.ThreadMutex); update_thread_buzy = 0; - return GDK_EVENT_PROPAGATE; + g_mutex_unlock(&main_config.ThreadMutex); + return G_SOURCE_REMOVE; } // gboolean yon_update_thread(GtkWidget *self, GdkEvent *event, connection_window *window){ gboolean yon_update_thread(GtkWidget *self, connection_window *window){ + g_mutex_lock(&main_config.ThreadMutex); if (!update_thread_buzy){ update_thread_buzy=1; + g_mutex_unlock(&main_config.ThreadMutex); pthread_t thread_id; - pthread_create(&thread_id, NULL, (void *)on_main_window_domain_status_update,window); + g_idle_add((GSourceFunc)on_main_window_domain_status_update,window); + } else { + g_mutex_unlock(&main_config.ThreadMutex); } return 1; } diff --git a/source/ubl-settings-system.h b/source/ubl-settings-system.h index 6b08fb2..f885afe 100644 --- a/source/ubl-settings-system.h +++ b/source/ubl-settings-system.h @@ -100,6 +100,7 @@ typedef struct { GtkListStore *localeslist; int save_config; int domain_connected; + GMutex ThreadMutex; } config; typedef struct { @@ -197,4 +198,7 @@ typedef struct { main_window *setup_window(); void on_id_changed(GtkEntry *self, main_window *widgets); -void on_check_domain_connected(GtkWidget *self, main_window *widgets); \ No newline at end of file +void on_check_domain_connected(GtkWidget *self, main_window *widgets); +void yon_interface_update(main_window *widgets); + +void on_hostname_changed(GtkEntry *self, main_window *widgets); \ No newline at end of file diff --git a/ubl-settings-system-connection.glade b/ubl-settings-system-connection.glade index 5207201..9c3576d 100644 --- a/ubl-settings-system-connection.glade +++ b/ubl-settings-system-connection.glade @@ -515,7 +515,7 @@ True False - System configuration + Connect to domain diff --git a/ubl-settings-system-domain.glade b/ubl-settings-system-domain.glade index 9f1303a..f3f5d17 100644 --- a/ubl-settings-system-domain.glade +++ b/ubl-settings-system-domain.glade @@ -215,7 +215,7 @@ True False - System configuration + Disconnect from domain