diff --git a/gresource.xml b/gresource.xml index ad86631..19bc681 100644 --- a/gresource.xml +++ b/gresource.xml @@ -3,6 +3,7 @@ ubl-settings-video.glade ubl-settings-video-monitor.glade + ubl-settings-video-terminal.glade ubl-settings-video-configuration.glade diff --git a/source/CMakeLists.txt b/source/CMakeLists.txt index 9d47284..165cf28 100644 --- a/source/CMakeLists.txt +++ b/source/CMakeLists.txt @@ -37,6 +37,7 @@ add_custom_target(GLADE ubl-settings-video.glade) set(DEPENDFILES ../ubl-settings-video.glade + ../ubl-settings-video-terminal.glade ../ubl-settings-video-monitor.glade ../ubl-settings-video-configuration.glade ../gresource.xml diff --git a/source/ubl-settings-video.c b/source/ubl-settings-video.c index 098e2a8..2ce4df0 100644 --- a/source/ubl-settings-video.c +++ b/source/ubl-settings-video.c @@ -35,11 +35,19 @@ void on_terminal_destroy(GtkWidget *, main_window *widgets){ yon_ubl_status_box_render(PROPRIETARY_OPETAION_DONE_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE); } -static void child_ready(VteTerminal *terminal, GPid pid, GError *, gpointer user_data) -{ - if (!terminal) return; - if (pid == -1) printf("Error\n\n\n"); - else vte_terminal_feed_child(VTE_TERMINAL(terminal),(char*)user_data,strlen((char*)user_data)); + +gboolean on_command_execute_success(GtkWidget *,gint status,main_window *){ + + 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); + } else { + yon_ubl_status_box_render(yon_char_get_localised_from_lib(FAIL_LABEL),BACKGROUND_IMAGE_FAIL_TYPE); + + } + return G_SOURCE_REMOVE; } gboolean on_terminal_check_progress(main_window *widgets){ @@ -72,7 +80,7 @@ gboolean on_terminal_check_progress(main_window *widgets){ g_match_info_unref(match); g_mutex_lock(&main_config.progress_mutex); - if (!main_config.progress_active){ + if (percentage==100){ gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(widgets->TerminalInfoLabel),0); g_mutex_unlock(&main_config.progress_mutex); return G_SOURCE_REMOVE; @@ -90,7 +98,7 @@ void yon_terminal_start(main_window *widgets, char *usr_command){ env[0]=""; env[1]=NULL; - GtkBuilder *builder=gtk_builder_new_from_resource(glade_path); + GtkBuilder *builder=gtk_builder_new_from_resource(glade_terminal_path); widgets->TerminalBox = yon_gtk_builder_get_widget(builder, "TerminalBox"); widgets->TerminalRevealer = yon_gtk_builder_get_widget(builder, "TerminalRevealer"); widgets->TerminalMoreRevieler = yon_gtk_builder_get_widget(builder, "TerminalMoreRevieler"); @@ -99,48 +107,28 @@ void yon_terminal_start(main_window *widgets, char *usr_command){ widgets->TerminalInfoLabel = yon_gtk_builder_get_widget(builder, "TerminalInfoLabel"); widgets->terminal = yon_gtk_builder_get_widget(builder, "TerminalTerminal"); + g_signal_connect(G_OBJECT(widgets->terminal),"child-exited",G_CALLBACK(on_command_execute_success),widgets); + gtk_button_set_label(GTK_BUTTON(widgets->TerminalMoreButton),MORE_LABEL); vte_terminal_set_size(VTE_TERMINAL(widgets->terminal),10,15); gtk_widget_set_app_paintable(widgets->terminal,1); gtk_style_context_add_class(gtk_widget_get_style_context(widgets->terminal),"opacited"); gtk_style_context_add_class(gtk_widget_get_style_context(widgets->terminal),"workingbg"); gtk_overlay_add_overlay(GTK_OVERLAY(widgets->TerminalOverlay),widgets->TerminalRevealer); - g_signal_connect(G_OBJECT(widgets->terminal), "child-exited", G_CALLBACK(on_terminal_done), widgets); + // g_signal_connect(G_OBJECT(widgets->terminal), "child-exited", G_CALLBACK(on_terminal_done), widgets); // g_signal_connect(G_OBJECT(widgets->terminal), "contents-changed", G_CALLBACK(on_terminal_check_progress), widgets); g_signal_connect(G_OBJECT(widgets->TerminalMoreButton), "clicked", G_CALLBACK(on_terminal_more), widgets); g_signal_connect(G_OBJECT(widgets->terminal), "destroy", G_CALLBACK(on_terminal_destroy), widgets); gtk_revealer_set_reveal_child(GTK_REVEALER(widgets->TerminalRevealer),1); - VtePty *pty = vte_pty_new_sync(VTE_PTY_DEFAULT,NULL,NULL); - vte_terminal_set_pty(VTE_TERMINAL(widgets->terminal),pty); - char *install_command=yon_char_unite("tput cup 0 0 && tput ed; ",usr_command," ; sleep 5;exit 0","\n",NULL); - vte_terminal_spawn_async(VTE_TERMINAL(widgets->terminal), - VTE_PTY_DEFAULT, - NULL, - command, - NULL, - 0, - NULL, NULL, - NULL, - -1, - NULL, - child_ready, - install_command); - vte_pty_spawn_async(pty, - NULL, - command, - NULL, - 0, - NULL, NULL, - NULL, - -1, - NULL, - NULL, - NULL); + vte_terminal_reset(VTE_TERMINAL(widgets->terminal),0,1); + yon_terminal_integrated_start_shell(widgets->terminal,usr_command,on_terminal_done,widgets); vte_terminal_set_scrollback_lines(VTE_TERMINAL(widgets->terminal), 100); 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); + g_mutex_lock(&main_config.progress_mutex); main_config.progress_active=1; + g_mutex_unlock(&main_config.progress_mutex); g_idle_add((GSourceFunc)on_terminal_check_progress,widgets); } @@ -1374,7 +1362,7 @@ template_main_window *yon_main_window_complete(main_window *widgets){ } g_signal_connect(G_OBJECT(widgets->InfoButton), "clicked", G_CALLBACK(on_driver_pack_info), widgets); g_signal_connect(G_OBJECT(widgets->DriversTree), "cursor-changed", G_CALLBACK(on_driver_pack_selection_change), 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); g_signal_connect(G_OBJECT(widgets->LoadCustomMenuItem),"activate",G_CALLBACK(on_config_custom_load),widgets); diff --git a/source/ubl-settings-video.h b/source/ubl-settings-video.h index 7f1c19c..a080180 100644 --- a/source/ubl-settings-video.h +++ b/source/ubl-settings-video.h @@ -30,6 +30,7 @@ #define banner_path "/com/ublinux/images/ubl-settings-video-banner.png" #define glade_path "/com/ublinux/ui/ubl-settings-video.glade" +#define glade_terminal_path "/com/ublinux/ui/ubl-settings-video-terminal.glade" #define glade_path_monitor "/com/ublinux/ui/ubl-settings-video-monitor.glade" #define glade_path_configuration "/com/ublinux/ui/ubl-settings-video-configuration.glade" @@ -387,4 +388,5 @@ void *yon_proprietary_local_get(main_window *widgets); gboolean yon_proprietary_append_kernels(struct proprietary_kernel_append_struct *append); gboolean yon_proprietary_append(struct proprietary_struct *target); gboolean yon_proprietary_clear(main_window *widgets); +gboolean on_command_execute_success(GtkWidget *,gint status,main_window *widgets); #endif \ No newline at end of file diff --git a/source/ubl-strings.h b/source/ubl-strings.h index 824341d..a600ed2 100644 --- a/source/ubl-strings.h +++ b/source/ubl-strings.h @@ -199,6 +199,7 @@ #define KERNELS_SUPPORTED_UNFOUND_LABEL _("Warning: Couldn't find any supported kernel version") #define ALL_INSTALLED_KERNELS_LABEL _("Default (All installed)") +#define FAIL_LABEL _("Driver installation has failed") #define INSTALL_CONFIRMATION_LABEL(target) yon_char_unite(_("Are you sure want to install driver "),"",target,"?",NULL) #define REMOVE_CONFIRMATION_LABEL(target) yon_char_unite(_("Are you sure want to remove driver "),"",target,"?",NULL) diff --git a/ubl-settings-video-terminal.glade b/ubl-settings-video-terminal.glade new file mode 100644 index 0000000..d76c8b6 --- /dev/null +++ b/ubl-settings-video-terminal.glade @@ -0,0 +1,163 @@ + + + + + + + + True + True + False + end + True + + + True + False + 0 + in + + + True + False + + + True + False + 5 + 5 + vertical + + + True + False + 5 + 5 + 5 + 5 + 5 + 5 + + + True + True + False + center + + + True + True + 0 + + + + + More + True + True + True + True + + + False + True + 1 + + + + + False + True + 0 + + + + + True + False + + + True + False + + + True + False + vertical + + + True + False + True + adjustment1 + UTF-8 + True + True + False + + + True + True + 0 + + + + + True + True + 0 + + + + + True + False + vertical + adjustment1 + True + False + 1 + 2 + + + False + True + 1 + + + + + + + False + True + 1 + + + + + + + + + True + False + + + + + + + + + 300 + 1 + 10 + + diff --git a/ubl-settings-video.glade b/ubl-settings-video.glade index b36ee71..8e8026d 100644 --- a/ubl-settings-video.glade +++ b/ubl-settings-video.glade @@ -2,7 +2,6 @@ - True @@ -110,166 +109,6 @@ - - 300 - 0.7299999937415127 - 1 - 10 - - - True - True - False - end - True - - - True - False - 0 - in - - - True - False - - - True - False - 5 - 5 - 5 - 5 - vertical - - - True - False - 5 - 5 - 5 - 5 - 5 - 5 - - - True - True - False - center - - - True - True - 0 - - - - - More - True - True - True - True - - - False - True - 1 - - - - - False - True - 0 - - - - - True - False - - - True - False - - - True - False - vertical - - - True - False - True - natural - adjustment1 - natural - UTF-8 - True - False - - - True - True - 0 - - - - - True - True - 0 - - - - - True - False - vertical - adjustment1 - True - False - 1 - 2 - - - False - True - 1 - - - - - - - False - True - 1 - - - - - - - - - True - False - - - - - - - True False