diff --git a/source/ubl-settings-video.c b/source/ubl-settings-video.c index 977e06a..90d331a 100644 --- a/source/ubl-settings-video.c +++ b/source/ubl-settings-video.c @@ -2,8 +2,8 @@ config main_config; -void on_terminal_done(GtkWidget *terminal, int , main_window *){ - gtk_widget_destroy(terminal); +void on_terminal_done(GtkWidget *, int , main_window *widgets){ + gtk_widget_destroy(widgets->TerminalRevealer); } void on_terminal_more(GtkWidget *, main_window *widgets){ @@ -32,22 +32,22 @@ void on_terminal_destroy(GtkWidget *, main_window *widgets){ } } yon_proprietary_get_thread(NULL,widgets); - yon_ubl_status_box_render(PROPRIETARY_OPETAION_DONE_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE); + yon_ubl_status_box_render(yon_char_unite(PROPRIETARY_OPETAION_DONE_LABEL,". ",PROPRIETARY_LOADING_LABEL,NULL),BACKGROUND_IMAGE_SUCCESS_TYPE); } -gboolean on_command_execute_success(GtkWidget *self,gint status,main_window *){ +gboolean on_command_execute_success(GtkWidget *self,gint status,main_window *widgets){ g_mutex_lock(&main_config.progress_mutex); main_config.progress_active=0; g_mutex_unlock(&main_config.progress_mutex); if (!status){ - yon_ubl_status_box_render(yon_char_get_localised_from_lib(SUCCESS_LABEL),BACKGROUND_IMAGE_SUCCESS_TYPE); + yon_ubl_status_box_render(yon_char_unite(yon_char_get_localised_from_lib(SUCCESS_LABEL),". ",PROPRIETARY_LOADING_LABEL,NULL),BACKGROUND_IMAGE_SUCCESS_TYPE); } else { yon_ubl_status_box_render(yon_char_get_localised_from_lib(FAIL_LABEL),BACKGROUND_IMAGE_FAIL_TYPE); } - on_terminal_done(self,0,NULL); + on_terminal_done(self,0,widgets); return G_SOURCE_REMOVE; } @@ -71,17 +71,17 @@ gboolean on_terminal_check_progress(main_window *widgets){ if (last_match) { yon_char_remove_last_symbol(last_match,'%'); - percentage = atof(last_match); + percentage = g_ascii_strtod(last_match,NULL); yon_debug_output("%s\n", text); yon_debug_output("%s\n", last_match); - g_free(text); gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(widgets->TerminalInfoLabel), percentage / 100); g_free(last_match); } + g_free(text); g_match_info_unref(match); g_mutex_lock(&main_config.progress_mutex); - if (percentage==100||!main_config.progress_active){ + if (percentage>99||!main_config.progress_active){ gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(widgets->TerminalInfoLabel),0); g_mutex_unlock(&main_config.progress_mutex); return G_SOURCE_REMOVE; @@ -125,6 +125,7 @@ void yon_terminal_start(main_window *widgets, char *usr_command){ vte_terminal_set_scroll_on_output(VTE_TERMINAL(widgets->terminal), TRUE); vte_terminal_set_scroll_on_keystroke(VTE_TERMINAL(widgets->terminal), TRUE); gtk_widget_show_all(widgets->TerminalRevealer); + gtk_widget_realize(widgets->terminal); g_mutex_lock(&main_config.progress_mutex); main_config.progress_active=1; g_mutex_unlock(&main_config.progress_mutex); @@ -146,23 +147,32 @@ void on_driver_pack_selection_change(GtkWidget *, main_window *widgets){ } } +gpointer yon_driver_info_launch(void *command){ + if (!system((char*)command)){ + yon_ubl_status_box_render_thread(yon_char_get_localised_from_lib(SUCCESS_LABEL),BACKGROUND_IMAGE_SUCCESS_TYPE); + } else { + yon_ubl_status_box_render_thread(yon_char_get_localised_from_lib(FAIL_LABEL),BACKGROUND_IMAGE_SUCCESS_TYPE); + } + return NULL; +} + void on_driver_pack_info(GtkWidget *, main_window *widgets){ GtkTreeIter iter; char *module, *package; GtkTreeModel *list_s=GTK_TREE_MODEL(main_config.list); GtkTreeSelection *selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->DriversTree)); if (gtk_tree_selection_get_selected(selection,&list_s,&iter)){ + yon_ubl_status_box_render(yon_char_get_localised_from_lib(INFO_PROCESS_LABEL),BACKGROUND_IMAGE_INFO_TYPE); gtk_tree_model_get(list_s,&iter,7,&module,8,&package,-1); char *command = get_info_proprietary_command(yon_char_is_empty(module)?package:module); - yon_launch_app_with_arguments(command,""); - yon_ubl_status_box_render(yon_char_get_localised_from_lib(SUCCESS_LABEL),BACKGROUND_IMAGE_INFO_TYPE); + g_thread_new("info_thread",yon_driver_info_launch,(void*)command); + // yon_launch_app_with_arguments(command,""); } else { yon_ubl_status_box_render(PROPRIETARY_NOTHING_SELECTED_LABEL,BACKGROUND_IMAGE_FAIL_TYPE); } } void on_pack_install_activate(GtkCellRendererToggle* ,gchar* path,main_window *widgets){ - GtkTreeModel *model = gtk_tree_view_get_model(GTK_TREE_VIEW(widgets->DriversTree)); GtkTreeIter iter; if (!GTK_IS_TREE_MODEL_FILTER(model)){ @@ -184,6 +194,7 @@ void on_pack_install_activate(GtkCellRendererToggle* ,gchar* path,main_window *w if (!yon_char_is_empty(package)){ char *command = install_proprietary_command(package); yon_terminal_start(widgets,command); + yon_ubl_status_box_render(PACKAGE_INSTALL_PROCESS_LABEL(package),BACKGROUND_IMAGE_INFO_TYPE); } } free(data); @@ -194,6 +205,7 @@ void on_pack_install_activate(GtkCellRendererToggle* ,gchar* path,main_window *w if (!yon_char_is_empty(package)){ char *command = delete_proprietary_command(package); yon_terminal_start(widgets,command); + yon_ubl_status_box_render(PACKAGE_REMOVE_PROCESS_LABEL(package),BACKGROUND_IMAGE_INFO_TYPE); } } free(data); @@ -220,6 +232,7 @@ void on_module_install_activate(GtkCellRendererToggle* ,gchar* path,main_window if (!yon_char_is_empty(package)){ char *command = install_proprietary_command(package); yon_terminal_start(widgets,command); + yon_ubl_status_box_render(MODULE_INSTALL_PROCESS_LABEL(package),BACKGROUND_IMAGE_INFO_TYPE); } } free(data); @@ -230,6 +243,7 @@ void on_module_install_activate(GtkCellRendererToggle* ,gchar* path,main_window if (!yon_char_is_empty(package)){ char *command = delete_proprietary_command(package); yon_terminal_start(widgets,command); + yon_ubl_status_box_render(MODULE_REMOVE_PROCESS_LABEL(package),BACKGROUND_IMAGE_INFO_TYPE); } } free(data); @@ -1001,8 +1015,11 @@ void yon_monitor_view_update(){ } gboolean yon_proprietary_clear(main_window *widgets){ + gtk_widget_set_sensitive(widgets->LoadDriversButton,0); gtk_list_store_clear(main_config.list); gtk_list_store_clear(main_config.list2); + gtk_spinner_start(GTK_SPINNER(widgets->DriversLoadingSpinner)); + gtk_widget_show(widgets->DriversLoadingSpinner); gtk_combo_box_text_remove_all(GTK_COMBO_BOX_TEXT(widgets->KernelsCombo)); gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(widgets->KernelsCombo),ALL_INSTALLED_KERNELS_LABEL); gtk_combo_box_set_active(GTK_COMBO_BOX(widgets->KernelsCombo),0); @@ -1033,11 +1050,12 @@ gboolean yon_proprietary_disconnect(main_window *widgets){ gboolean yon_proprietary_connect(main_window *widgets){ gtk_tree_view_set_model(GTK_TREE_VIEW(widgets->DriversTree),GTK_TREE_MODEL(main_config.list)); + gtk_spinner_stop(GTK_SPINNER(widgets->DriversLoadingSpinner)); + gtk_widget_hide(widgets->DriversLoadingSpinner); return G_SOURCE_REMOVE; } void *yon_proprietary_local_get(main_window *widgets){ - gtk_widget_set_sensitive(widgets->LoadDriversButton,0); g_idle_add((GSourceFunc)yon_proprietary_clear,widgets); int kernels_size; config_str kernels_installed=yon_config_load(yon_debug_output("%s\n",yon_get_kernels_installed),&kernels_size); @@ -1063,7 +1081,7 @@ void *yon_proprietary_local_get(main_window *widgets){ g_idle_add((GSourceFunc)yon_proprietary_disconnect,widgets); for (int dr_desc=1;dr_desc-1)){ @@ -1078,9 +1096,14 @@ void *yon_proprietary_local_get(main_window *widgets){ g_idle_add((GSourceFunc)yon_proprietary_append,cur); } } - yon_debug_output("%s\n","Driver end"); + yon_debug_output("%s\n","Driver end"); + if (dr_desc==size-1) { + g_idle_add((GSourceFunc)yon_proprietary_connect,widgets); + } + } + if (!size){ + g_idle_add((GSourceFunc)yon_proprietary_connect,widgets); } - g_idle_add((GSourceFunc)yon_proprietary_connect,widgets); char *status_text = yon_char_unite(yon_char_get_localised_from_lib(SUCCESS_LABEL),". ", !getuid()? main_config.load_mode==1?yon_char_get_localised_from_lib(LOCAL_LOAD_SUCCESS_LABEL):yon_char_get_localised_from_lib(GLOBAL_LOAD_SUCCESS_LABEL):yon_char_get_localised_from_lib(ROOT_WARNING_LABEL),NULL); yon_ubl_status_box_render_thread(status_text,!getuid()?BACKGROUND_IMAGE_SUCCESS_TYPE:BACKGROUND_IMAGE_FAIL_TYPE); free(status_text); @@ -1178,14 +1201,23 @@ void yon_monitor_set_resolutions(){ void on_app_chooser_open(GtkWidget *self, main_window *widgets){ yon_app_chooser_window *window = yon_app_chooser_window_new(1); + const char *prev_selection = gtk_entry_get_text(GTK_ENTRY(self==widgets->OptirunButton?widgets->OptirunEntry:widgets->PrimusrunEntry)); + if (!yon_char_is_empty(prev_selection)){ + int size; + config_str parsed = yon_char_parse((char*)prev_selection,&size,","); + yon_app_chooser_window_select(window,parsed,size); + yon_char_parsed_free(parsed,size); + } int size; config_str parsed = yon_app_chooser_window_run(window,&size); - char *string = yon_char_parsed_to_string(parsed,size,","); - if (self==widgets->OptirunButton){ - gtk_entry_set_text(GTK_ENTRY(widgets->OptirunEntry),string); - } else if (self == widgets->PrimusrunButton){ - gtk_entry_set_text(GTK_ENTRY(widgets->PrimusrunEntry),string); + if (parsed&&size){ + char *string = yon_char_parsed_to_string(parsed,size,","); + if (self==widgets->OptirunButton){ + gtk_entry_set_text(GTK_ENTRY(widgets->OptirunEntry),string); + } else if (self == widgets->PrimusrunButton){ + gtk_entry_set_text(GTK_ENTRY(widgets->PrimusrunEntry),string); + } } } @@ -1398,6 +1430,8 @@ template_main_window *yon_main_window_complete(main_window *widgets){ widgets->InformationCompanyLogoImage2 = GTK_WIDGET(gtk_builder_get_object(builder, "InformationCompanyLogoImage2")); widgets->InformationLabel = GTK_WIDGET(gtk_builder_get_object(builder, "InformationLabel")); widgets->InformationLabel2 = GTK_WIDGET(gtk_builder_get_object(builder, "InformationLabel2")); + widgets->DriversLoadingOverlay = GTK_WIDGET(gtk_builder_get_object(builder, "DriversLoadingOverlay")); + widgets->DriversLoadingSpinner = GTK_WIDGET(gtk_builder_get_object(builder, "DriversLoadingSpinner")); widgets->PackageRenderer = GTK_CELL_RENDERER(gtk_builder_get_object(builder, "PackageRenderer")); widgets->ModuleRenderer = GTK_CELL_RENDERER(gtk_builder_get_object(builder, "ModuleRenderer")); @@ -1405,6 +1439,8 @@ template_main_window *yon_main_window_complete(main_window *widgets){ main_config.list = GTK_LIST_STORE(gtk_builder_get_object(builder, "liststore6")); main_config.list2 = GTK_LIST_STORE(gtk_builder_get_object(builder, "liststore1")); + gtk_overlay_add_overlay(GTK_OVERLAY(widgets->DriversLoadingOverlay),widgets->DriversLoadingSpinner); + g_signal_connect(G_OBJECT(widgets->LoadDriversButton), "clicked", G_CALLBACK(yon_proprietary_get_thread), widgets); if (!getuid()){ @@ -1423,7 +1459,9 @@ template_main_window *yon_main_window_complete(main_window *widgets){ g_signal_connect(G_OBJECT(widgets->SaveGlobalMenuItem),"activate",G_CALLBACK(on_config_global_save),NULL); g_signal_connect(G_OBJECT(widgets->SaveCustomMenuItem),"activate",G_CALLBACK(on_config_custom_save),NULL); g_signal_connect(G_OBJECT(widgets->OptirunCombo),"changed",G_CALLBACK(yon_set_sensitive_from_combo_box),widgets->OptirunEntry); + g_signal_connect(G_OBJECT(widgets->OptirunCombo),"changed",G_CALLBACK(yon_set_sensitive_from_combo_box),widgets->OptirunButton); g_signal_connect(G_OBJECT(widgets->PrimusrunCombo),"changed",G_CALLBACK(yon_set_sensitive_from_combo_box),widgets->PrimusrunEntry); + g_signal_connect(G_OBJECT(widgets->PrimusrunCombo),"changed",G_CALLBACK(yon_set_sensitive_from_combo_box),widgets->PrimusrunButton); g_signal_connect(G_OBJECT(widgets->KernelsCombo),"changed",G_CALLBACK(on_kernel_filter_changed),widgets); g_signal_connect(G_OBJECT(widgets->FrameGapCombo),"changed",G_CALLBACK(on_gapfix_changed),widgets); g_signal_connect(G_OBJECT(widgets->OptirunButton),"clicked",G_CALLBACK(on_app_chooser_open),widgets); diff --git a/source/ubl-settings-video.h b/source/ubl-settings-video.h index 66d480f..f815c83 100644 --- a/source/ubl-settings-video.h +++ b/source/ubl-settings-video.h @@ -198,6 +198,8 @@ typedef struct GtkWidget *TerminalMoreButton; GtkWidget *TerminalScroll; GtkWidget *TerminalMoreRevieler; + GtkWidget *DriversLoadingOverlay; + GtkWidget *DriversLoadingSpinner; GtkWidget *MenusTab; GtkWidget *terminal; @@ -395,4 +397,5 @@ void on_gapfix_changed(GtkWidget*self, main_window *widgets); gboolean yon_proprietary_disconnect(main_window *widgets); gboolean yon_proprietary_connect(main_window *widgets); void on_app_chooser_open(GtkWidget *self, main_window *widgets); +gpointer yon_driver_info_launch(void *command); #endif \ No newline at end of file diff --git a/source/ubl-strings.h b/source/ubl-strings.h index f972bee..9ded0c0 100644 --- a/source/ubl-strings.h +++ b/source/ubl-strings.h @@ -59,8 +59,12 @@ #define INSTALLED_LOW_LABEL _("installed") #define PACKAGE_LABEL _("Package") #define SUPPORTED_LABEL _("Supported Devices") -#define DELETING_PROCESS_LABEL _("Driver deleting has started") -#define INSTALLING_PROCESS_LABEL _("Driver installing has started") + +#define MODULE_INSTALL_PROCESS_LABEL(target) yon_char_unite(_("Install module driver")," ",target,"...",NULL) +#define MODULE_REMOVE_PROCESS_LABEL(target) yon_char_unite(_("Remove module driver")," ",target,"...",NULL) +#define PACKAGE_INSTALL_PROCESS_LABEL(target) yon_char_unite(_("Install package driver")," ",target,"...",NULL) +#define PACKAGE_REMOVE_PROCESS_LABEL(target) yon_char_unite(_("Remove package driver")," ",target,"...",NULL) + #define INFO_PROCESS_LABEL _("Opening driver information") #define CANCEL_LABEL _("Cancel") #define ACCEPT_LABEL _("Accept") @@ -105,12 +109,12 @@ #define MONITOR_PORT_ERROR_LABEL _("Error: Port must be chosen to save") #define MONITOR_PORT_SUCCESS_LABEL _("Monitor configuration succeedeed") -#define GLOBAL_LOAD_SUCCESS _("Global configuration loading succseeded.") -#define LOCAL_LOAD_SUCCESS _("Local configuration loading succseeded.") +// #define GLOBAL_LOAD_SUCCESS _("Global configuration loading succseeded.") +// #define LOCAL_LOAD_SUCCESS _("Local configuration loading succseeded.") -#define GLOBAL_LOCAL_SAVE_SUCCESS _("Local and global configuration saving succseeded.") -#define GLOBAL_SAVE_SUCCESS _("Global configuration saving succseeded.") -#define LOCAL_SAVE_SUCCESS _("Local configuration saving succseeded.") +// #define GLOBAL_LOCAL_SAVE_SUCCESS _("Local and global configuration saving succseeded.") +// #define GLOBAL_SAVE_SUCCESS _("Global configuration saving succseeded.") +// #define LOCAL_SAVE_SUCCESS _("Local configuration saving succseeded.") #define YES_LABEL _("Yes") #define NO_LABEL _("No") diff --git a/ubl-settings-video-configuration.glade b/ubl-settings-video-configuration.glade index 1041f82..17237a1 100644 --- a/ubl-settings-video-configuration.glade +++ b/ubl-settings-video-configuration.glade @@ -1,5 +1,5 @@ - + @@ -62,6 +62,20 @@ + + False + True + 0 + + + + + Manual port + True + True + False + True + False True @@ -112,6 +126,16 @@ 1 + + + True + + + False + True + 2 + + Main display @@ -123,7 +147,7 @@ False True - 2 + 3 diff --git a/ubl-settings-video.glade b/ubl-settings-video.glade index 3b9652a..aa5e4da 100644 --- a/ubl-settings-video.glade +++ b/ubl-settings-video.glade @@ -1,8 +1,12 @@ - + + + True + False + True False @@ -17,98 +21,6 @@ start 64 - - True - False - False - - - True - False - Load from global configuration - True - - - - - - True - False - Load from local configuration - True - - - - - - True - False - False - - - True - False - Save to global an local configuration - True - - - - - - True - False - Save to global configuration - True - - - - - - True - False - Save to local configuration - True - - - - - - True - False - False - - - True - False - Documentation - True - - - - - - True - False - About - True - - - - True False @@ -708,6 +620,7 @@ True + False True True image1 @@ -774,6 +687,7 @@ True + False True True image2 @@ -980,144 +894,147 @@ - + True False - vertical - - - True - True - liststore1 - - - - - - fixed - 160 - Installed - - - - - - - - False - True - 0 - - - + True - True - external + False + vertical - + True True - liststore6 - 1 - both - True - 4 - - - + liststore1 fixed - 80 - Module - - - - 9 - 9 - 0 - - + 160 + Installed - - 80 - Package - descending - 0 - - - - 10 - 10 - 1 - - - + + + + False + True + 0 + + + + + True + True + external - - Kernel + + True + True + liststore6 + 1 + both + True + 4 - - - 2 - + + fixed + 80 + Module + + + + 9 + 9 + 0 + + + - - - - - Driver - - - 3 - + + 80 + Package + descending + 0 + + + + 10 + 10 + 1 + + + - - - - - Description - - word - 150 + + Kernel + + + + 2 + + + + + + + Driver + + + + 3 + + - - 4 - - - - - - autosize - Supported Devices - - word - 220 + + Description + + + word + 150 + + + 4 + + + + + + + autosize + Supported Devices + + + word + 220 + + + 5 + + - - 5 - + + + True + True + 1 + - - True - True - 1 + -1 diff --git a/ubl-settings-video.pot b/ubl-settings-video.pot index e338e0c..7f1e87b 100644 --- a/ubl-settings-video.pot +++ b/ubl-settings-video.pot @@ -297,12 +297,20 @@ msgstr "" msgid "Supported Devices" msgstr "" -#: source/ubl-strings.h:61 -msgid "Driver deleting has started" +#: source/ubl-strings.h:62 +msgid "Install module driver" +msgstr "" + +#: source/ubl-strings.h:62 +msgid "Remove module driver" +msgstr "" + +#: source/ubl-strings.h:62 +msgid "Install package driver" msgstr "" #: source/ubl-strings.h:62 -msgid "Driver installing has started" +msgid "Remove package driver" msgstr "" #: source/ubl-strings.h:63 diff --git a/ubl-settings-video_ru.po b/ubl-settings-video_ru.po index b229b13..14627b3 100644 --- a/ubl-settings-video_ru.po +++ b/ubl-settings-video_ru.po @@ -299,13 +299,21 @@ msgstr "Пакет" msgid "Supported Devices" msgstr "Устройства" -#: source/ubl-strings.h:61 -msgid "Driver deleting has started" -msgstr "Началось удаление драйвера" +#: source/ubl-strings.h:62 +msgid "Install module driver" +msgstr "Установка драйвера, модуль" + +#: source/ubl-strings.h:62 +msgid "Remove module driver" +msgstr "Удаление драйвера, модуль" + +#: source/ubl-strings.h:62 +msgid "Install package driver" +msgstr "Установка драйвера, пакет" #: source/ubl-strings.h:62 -msgid "Driver installing has started" -msgstr "Началась установка драйвера" +msgid "Remove package driver" +msgstr "Удаление драйвера, пакет" #: source/ubl-strings.h:63 msgid "Opening driver information" @@ -819,11 +827,11 @@ msgstr "Операция завершена с ошибкой" #: source/ubl-strings.h:205 msgid "Are you sure want to install driver " -msgstr "Вы уверены что хотите установить драйвер " +msgstr "Вы уверены, что хотите установить драйвер " #: source/ubl-strings.h:206 msgid "Are you sure want to remove driver " -msgstr "Вы уверены что хотите удалить драйвер " +msgstr "Вы уверены, что хотите удалить драйвер " #: source/ubl-strings.h:207 msgid "Attention!"