From e71d4c7eae02ff948845c1c660bb65ea94a5510f Mon Sep 17 00:00:00 2001 From: Ivan Yarcev Date: Wed, 28 May 2025 18:02:19 +0600 Subject: [PATCH] Initial scrolling changes --- source/ubl-settings-info.c | 27 ++++++++++++++++++++++++++- source/ubl-settings-info.h | 6 +++++- ubl-settings-info.glade | 1 - 3 files changed, 31 insertions(+), 3 deletions(-) diff --git a/source/ubl-settings-info.c b/source/ubl-settings-info.c index 5564db5..907fc49 100644 --- a/source/ubl-settings-info.c +++ b/source/ubl-settings-info.c @@ -22,6 +22,29 @@ void on_theme_changed(GSettings *, char *, main_window *widgets){ yon_terminal_style_update(NULL, widgets); } +gboolean yon_adjustment_set(GtkAdjustment *adj){ + + gtk_adjustment_set_value(adj,0); + return G_SOURCE_CONTINUE; + +} + +void on_child_exited(GtkWidget *, gint, GtkAdjustment *adj){ + g_idle_remove_by_data(adj); +} + +void terminal_integrated_start(GtkWidget *terminal,GtkAdjustment *adj, char* command){ + gchar *envv[] = { NULL }; + config_str parsed=NULL; + int size=0; + g_shell_parse_argv(command, &size,&parsed, NULL); + vte_terminal_spawn_async(VTE_TERMINAL(terminal),VTE_PTY_NO_HELPER,"/bin",parsed,envv,G_SPAWN_SEARCH_PATH,NULL,NULL,NULL,20,NULL,NULL,NULL); + vte_terminal_set_size(VTE_TERMINAL(terminal),10,15); + vte_terminal_set_scrollback_lines(VTE_TERMINAL(terminal), -1); + gtk_widget_show_all(terminal); + g_idle_add((GSourceFunc)yon_adjustment_set,adj); + } + /**yon_main_window_complete(main_window *widgets) * [EN] * @@ -37,9 +60,11 @@ void yon_main_window_complete(main_window *widgets){ widgets->InfoIcon = yon_gtk_builder_get_widget(builder,"InfoIcon"); widgets->InfoTerminal = yon_gtk_builder_get_widget(builder,"InfoTerminal"); widgets->TerminalTemplateLabel = yon_gtk_builder_get_widget(builder,"TerminalTemplateLabel"); + widgets->adjustment = GTK_ADJUSTMENT(gtk_builder_get_object(builder,"adjustment1")); } { - yon_terminal_integrated_start(widgets->InfoTerminal,main_command); + g_signal_connect(G_OBJECT(widgets->InfoTerminal),"eof",G_CALLBACK(on_child_exited),widgets->adjustment); + terminal_integrated_start(widgets->InfoTerminal,widgets->adjustment,main_command); yon_terminal_style_update(NULL, widgets); GSettings *settings = g_settings_new("org.gnome.desktop.interface"); diff --git a/source/ubl-settings-info.h b/source/ubl-settings-info.h index d7f5d2f..d450061 100644 --- a/source/ubl-settings-info.h +++ b/source/ubl-settings-info.h @@ -42,10 +42,14 @@ typedef struct { GtkWidget *InfoIcon; GtkWidget *InfoTerminal; GtkWidget *TerminalTemplateLabel; + GtkAdjustment *adjustment; } main_window; void yon_main_window_complete(main_window *widgets); void on_theme_changed(GSettings *, char *, main_window *widgets); -void yon_terminal_style_update(VteTerminal *, main_window *widgets); \ No newline at end of file +void yon_terminal_style_update(VteTerminal *, main_window *widgets); +void terminal_integrated_start(GtkWidget *terminal,GtkAdjustment *, char* command); +gboolean yon_adjustment_set(GtkAdjustment *adj); +void on_child_exited(GtkWidget *, gint, GtkAdjustment *adj); \ No newline at end of file diff --git a/ubl-settings-info.glade b/ubl-settings-info.glade index cf0f801..a239c05 100644 --- a/ubl-settings-info.glade +++ b/ubl-settings-info.glade @@ -51,7 +51,6 @@ adjustment1 natural UTF-8 - True False