From 8ff0340154056d7b522fd18d6288b78b655c78d7 Mon Sep 17 00:00:00 2001 From: Ivan Dmitrievich Yartsev Date: Thu, 19 Feb 2026 11:49:04 +0600 Subject: [PATCH] Fixed main window position and size loading --- source/ubl-settings-video.c | 186 +++++++++++++++++++----------------- source/ubl-settings-video.h | 8 ++ 2 files changed, 107 insertions(+), 87 deletions(-) diff --git a/source/ubl-settings-video.c b/source/ubl-settings-video.c index 208f732..a38880a 100644 --- a/source/ubl-settings-video.c +++ b/source/ubl-settings-video.c @@ -452,71 +452,39 @@ void on_app_chooser_open(GtkWidget *self, main_window *widgets){ } } -void yon_adapter_window_setup(main_window *widgets){ - int size=0; - gtk_overlay_add_overlay(GTK_OVERLAY(widgets->InformationOverlay),widgets->InformationCompanyLogoImage); - config_str rtn = yon_config_load(get_adapter_info_json,&size); - struct json_object *jsobject = json_tokener_parse(yon_char_parsed_to_string(rtn,size,""));{ - struct json_object *item_obj = json_object_array_get_idx(jsobject, 0); - struct json_object *unit_obj; - const char *desc=""; - if (json_object_object_get_ex(item_obj, "description", &unit_obj)) { - desc = json_object_get_string(unit_obj); - } - const char *product =""; - if (json_object_object_get_ex(item_obj, "product", &unit_obj)) { - product = json_object_get_string(unit_obj); - } - const char *vendor=""; - if (json_object_object_get_ex(item_obj, "vendor", &unit_obj)) { - vendor = json_object_get_string(unit_obj); - } - const char *driver_use=""; - if (json_object_object_get_ex(item_obj, "configuration", &unit_obj)) { - if (json_object_object_get_ex(unit_obj, "driver", &unit_obj)) - driver_use = json_object_get_string(unit_obj); - } - const char *driver_all=""; - int loaded_size; - config_str loaded = yon_config_load(get_drivers_for_card_command,&loaded_size); - for (int i=0;i",DESCRIPTION_LABEL,": ",_(desc), - "\n",VENDOR_LABEL,": ",vendor, - "\n",MODEL_LABEL,": ",product, - "\n",USED_KERNEL_DRIVER_LABEL,": ",driver_use, - "\n",AVALIABLE_KERNEL_DRIVERS_LABEL,": ",driver_all,"",NULL); - gtk_label_set_markup(GTK_LABEL(widgets->InformationLabel),final_text); - if (strstr(vendor,"Intel")){ - GtkIconTheme *icthm=gtk_icon_theme_get_default(); - gtk_image_set_from_pixbuf(GTK_IMAGE(widgets->InformationCompanyLogoImage),gtk_icon_info_load_icon(gtk_icon_theme_lookup_icon_for_scale(icthm, "com.ublinux.ubl-settings-video.intel-logo",64,1,GTK_ICON_LOOKUP_FORCE_SVG),NULL)); +void yon_adapter_update(struct adapter_struct *adapter){ + if (!adapter->vendor){ + gtk_widget_hide(adapter->widgets->InformationOverlay2); + return; + } + gtk_label_set_markup(GTK_LABEL(adapter->widgets->InformationLabel),adapter->adapter_text); + if (strstr(adapter->vendor,"Intel")){ + gtk_image_set_from_icon_name(GTK_IMAGE(adapter->widgets->InformationCompanyLogoImage),"com.ublinux.ubl-settings-video.intel-logo",GTK_ICON_SIZE_BUTTON); + gtk_image_set_pixel_size(GTK_IMAGE(adapter->widgets->InformationCompanyLogoImage),64); } - else if (strstr(vendor,"NVIDIA")){ - GtkIconTheme *icthm=gtk_icon_theme_get_default(); - gtk_image_set_from_pixbuf(GTK_IMAGE(widgets->InformationCompanyLogoImage),gtk_icon_info_load_icon(gtk_icon_theme_lookup_icon_for_scale(icthm, "com.ublinux.ubl-settings-video.nvidia-logo",64,1,GTK_ICON_LOOKUP_FORCE_SVG),NULL)); + else if (strstr(adapter->vendor,"NVIDIA")){ + gtk_image_set_from_icon_name(GTK_IMAGE(adapter->widgets->InformationCompanyLogoImage),"com.ublinux.ubl-settings-video.nvidia-logo",GTK_ICON_SIZE_BUTTON); + gtk_image_set_pixel_size(GTK_IMAGE(adapter->widgets->InformationCompanyLogoImage),64); } - else if (strstr(vendor,"AMD")||strstr(vendor,"Advanced Micro Devices")){ - GtkIconTheme *icthm=gtk_icon_theme_get_default(); - gtk_image_set_from_pixbuf(GTK_IMAGE(widgets->InformationCompanyLogoImage),gtk_icon_info_load_icon(gtk_icon_theme_lookup_icon_for_scale(icthm, "com.ublinux.ubl-settings-video.amd-logo",64,1,GTK_ICON_LOOKUP_FORCE_SVG),NULL)); + else if (strstr(adapter->vendor,"AMD")||strstr(adapter->vendor,"Advanced Micro Devices")){ + gtk_image_set_from_icon_name(GTK_IMAGE(adapter->widgets->InformationCompanyLogoImage),"com.ublinux.ubl-settings-video.amd-logo",GTK_ICON_SIZE_BUTTON); + gtk_image_set_pixel_size(GTK_IMAGE(adapter->widgets->InformationCompanyLogoImage),64); } - else if (strstr(vendor,"VMware")){ - GtkIconTheme *icthm=gtk_icon_theme_get_default(); - gtk_image_set_from_pixbuf(GTK_IMAGE(widgets->InformationCompanyLogoImage),gtk_icon_info_load_icon(gtk_icon_theme_lookup_icon_for_scale(icthm, "com.ublinux.ubl-settings-video.vmware-logo",64,1,GTK_ICON_LOOKUP_FORCE_SVG),NULL)); + else if (strstr(adapter->vendor,"VMware")){ + gtk_image_set_from_icon_name(GTK_IMAGE(adapter->widgets->InformationCompanyLogoImage),"com.ublinux.ubl-settings-video.vmware-logo",GTK_ICON_SIZE_BUTTON); + gtk_image_set_pixel_size(GTK_IMAGE(adapter->widgets->InformationCompanyLogoImage),64); } else { - gtk_widget_destroy(widgets->InformationCompanyLogoImage); + gtk_widget_destroy(adapter->widgets->InformationCompanyLogoImage); } - } - gtk_overlay_add_overlay(GTK_OVERLAY(widgets->InformationOverlay2),widgets->InformationCompanyLogoImage2); - struct json_object *item_obj = json_object_array_get_idx(jsobject, 1); - if (item_obj){ +} + +void *yon_load_adapter(main_window *widgets){ + int size=0; + config_str rtn = yon_config_load(get_adapter_info_json,&size); + struct json_object *jsobject = json_tokener_parse(yon_char_parsed_to_string(rtn,size,"")); + { + struct json_object *item_obj = json_object_array_get_idx(jsobject, 0); struct json_object *unit_obj; const char *desc=""; if (json_object_object_get_ex(item_obj, "description", &unit_obj)) { @@ -543,8 +511,8 @@ void yon_adapter_window_setup(main_window *widgets){ yon_char_remove_last_symbol(loaded[i],'\n'); } int pos = yon_char_parsed_check_exist(loaded,loaded_size,(char*)driver_use); - if (pos>-1){ - driver_all=yon_char_new(loaded[pos+1]); + if (pos!=-1){ + driver_all=yon_char_new(loaded[pos]); } yon_char_parsed_free(loaded,loaded_size); char *final_text = yon_char_unite("",DESCRIPTION_LABEL,": ",_(desc), @@ -552,29 +520,73 @@ void yon_adapter_window_setup(main_window *widgets){ "\n",MODEL_LABEL,": ",product, "\n",USED_KERNEL_DRIVER_LABEL,": ",driver_use, "\n",AVALIABLE_KERNEL_DRIVERS_LABEL,": ",driver_all,"",NULL); - gtk_label_set_markup(GTK_LABEL(widgets->InformationLabel2),final_text); - if (strstr(vendor,"Intel")){ - GtkIconTheme *icthm=gtk_icon_theme_get_default(); - gtk_image_set_from_pixbuf(GTK_IMAGE(widgets->InformationCompanyLogoImage2),gtk_icon_info_load_icon(gtk_icon_theme_lookup_icon_for_scale(icthm, "com.ublinux.ubl-settings-video.intel-logo",64,1,GTK_ICON_LOOKUP_FORCE_SVG),NULL)); - } - else if (strstr(vendor,"NVIDIA")){ - GtkIconTheme *icthm=gtk_icon_theme_get_default(); - gtk_image_set_from_pixbuf(GTK_IMAGE(widgets->InformationCompanyLogoImage2),gtk_icon_info_load_icon(gtk_icon_theme_lookup_icon_for_scale(icthm, "com.ublinux.ubl-settings-video.nvidia-logo",64,1,GTK_ICON_LOOKUP_FORCE_SVG),NULL)); - } - else if (strstr(vendor,"AMD")&&strstr(vendor,"Advanced Micro Devices")){ - GtkIconTheme *icthm=gtk_icon_theme_get_default(); - gtk_image_set_from_pixbuf(GTK_IMAGE(widgets->InformationCompanyLogoImage2),gtk_icon_info_load_icon(gtk_icon_theme_lookup_icon_for_scale(icthm, "com.ublinux.ubl-settings-video.amd-logo",64,1,GTK_ICON_LOOKUP_FORCE_SVG),NULL)); - } - else if (strstr(vendor,"VMware")){ - GtkIconTheme *icthm=gtk_icon_theme_get_default(); - gtk_image_set_from_pixbuf(GTK_IMAGE(widgets->InformationCompanyLogoImage2),gtk_icon_info_load_icon(gtk_icon_theme_lookup_icon_for_scale(icthm, "com.ublinux.ubl-settings-video.vmware-logo",64,1,GTK_ICON_LOOKUP_FORCE_SVG),NULL)); - } - else { - gtk_widget_destroy(widgets->InformationCompanyLogoImage2); + struct adapter_struct *adapter_info = malloc(sizeof(struct adapter_struct)); + memset(adapter_info,0,sizeof(struct adapter_struct)); + adapter_info->widgets = widgets; + adapter_info->vendor=yon_char_new(vendor); + adapter_info->adapter_text = yon_char_new(final_text); + g_idle_add_once((GSourceOnceFunc)yon_adapter_update,adapter_info); + } + { + struct json_object *item_obj = json_object_array_get_idx(jsobject, 1); + if (item_obj){ + struct json_object *unit_obj; + const char *desc=""; + if (json_object_object_get_ex(item_obj, "description", &unit_obj)) { + desc = json_object_get_string(unit_obj); + } + const char *product =""; + if (json_object_object_get_ex(item_obj, "product", &unit_obj)) { + product = json_object_get_string(unit_obj); + } + const char *vendor=""; + if (json_object_object_get_ex(item_obj, "vendor", &unit_obj)) { + vendor = json_object_get_string(unit_obj); + } + const char *driver_use=""; + if (json_object_object_get_ex(item_obj, "configuration", &unit_obj)) { + if (json_object_object_get_ex(unit_obj, "driver", &unit_obj)) + driver_use = json_object_get_string(unit_obj); + } + const char *driver_all=""; + int loaded_size; + config_str loaded = yon_config_load(get_drivers_for_card_command,&loaded_size); + for (int i=0;i",DESCRIPTION_LABEL,": ",_(desc), + "\n",VENDOR_LABEL,": ",vendor, + "\n",MODEL_LABEL,": ",product, + "\n",USED_KERNEL_DRIVER_LABEL,": ",driver_use, + "\n",AVALIABLE_KERNEL_DRIVERS_LABEL,": ",driver_all,"",NULL); + + struct adapter_struct *adapter_info = malloc(sizeof(struct adapter_struct)); + memset(adapter_info,0,sizeof(struct adapter_struct)); + adapter_info->widgets = widgets; + adapter_info->vendor=yon_char_new(vendor); + adapter_info->adapter_text = yon_char_new(final_text); + g_idle_add_once((GSourceOnceFunc)yon_adapter_update,adapter_info); + } else { + struct adapter_struct *adapter_info = malloc(sizeof(struct adapter_struct)); + memset(adapter_info,0,sizeof(struct adapter_struct)); + adapter_info->widgets = widgets; + + g_idle_add_once((GSourceOnceFunc)yon_adapter_update,adapter_info); } - } else { - gtk_widget_hide(widgets->InformationOverlay2); } + g_thread_exit(NULL); +} + +void yon_adapter_window_setup(main_window *widgets){ + gtk_overlay_add_overlay(GTK_OVERLAY(widgets->InformationOverlay),widgets->InformationCompanyLogoImage); + g_thread_new("adapter_thread",(GThreadFunc)yon_load_adapter,widgets); + gtk_overlay_add_overlay(GTK_OVERLAY(widgets->InformationOverlay2),widgets->InformationCompanyLogoImage2); } void yon_set_sensitive_from_combo_box(GtkComboBox *toggle, GtkWidget *target){ @@ -967,8 +979,12 @@ int main(int argc, char *argv[]){ template_main_window *widgets = yon_ubl_window_setup(); config_init(); widgets = yon_main_window_complete((main_window*)widgets); - yon_packages_init(); + yon_window_config_setup(GTK_WINDOW(widgets->Window)); + + char *path = yon_char_unite(yon_ubl_user_get_home_directory(),"/.config/",LocaleName,"/",LocaleName,".conf",NULL); + yon_window_config_load(path); yon_root_button_setup(widgets,argv,argc); + yon_packages_init(); if (system(yon_check_database_command)){ dialog_confirmation_data *data = yon_confirmation_dialog_data_new(); @@ -982,10 +998,6 @@ int main(int argc, char *argv[]){ } else { yon_proprietary_get_thread(NULL,(main_window*)widgets); } - yon_window_config_setup(GTK_WINDOW(widgets->Window)); - - char *path = yon_char_unite(yon_ubl_user_get_home_directory(),"/.config/",LocaleName,"/",LocaleName,".conf",NULL); - yon_window_config_load(path); gtk_main(); yon_packages_finish(); return 0; diff --git a/source/ubl-settings-video.h b/source/ubl-settings-video.h index 05b02f5..2c0b8e1 100644 --- a/source/ubl-settings-video.h +++ b/source/ubl-settings-video.h @@ -392,6 +392,12 @@ struct proprietary_kernel_append_struct { char *kernel; }; +struct adapter_struct { + main_window *widgets; + char *adapter_text; + char *vendor; +}; + monitor_data *yon_monitor_new(main_window *widgets,int dull); void yon_launch_with_output(char *command); void yon_monitor_view_update(); @@ -476,5 +482,7 @@ char *yon_char_extend(char *target, char symbol, size_t length); void on_driver_child_ready(VteTerminal *terminal, GPid pid, GError *, gpointer ); void on_paned_position_changed(GtkWidget *, GdkEvent*,main_window *widgets); gboolean on_db_update_done(GtkWidget *,gint ,main_window *widgets); +void yon_adapter_update(struct adapter_struct *adapter); +void *yon_load_adapter(main_window *widgets); #endif \ No newline at end of file