From d4d2483161a7abeee04dfafbc341c8b3b809a409 Mon Sep 17 00:00:00 2001 From: deepend Date: Sun, 25 Jan 2026 15:16:37 -0700 Subject: [PATCH] Updated the GTK3 adjustment update path in gtk_xtext_buffer_show to explicitly set adjustment bounds/page sizing and emit value-changed, while keeping GTK2 behavior unchanged. --- src/fe-gtk/xtext.c | 31 ++++++++++++++++++++++++++++++- 1 file changed, 30 insertions(+), 1 deletion(-) diff --git a/src/fe-gtk/xtext.c b/src/fe-gtk/xtext.c index fd7d2d32..74317a1d 100644 --- a/src/fe-gtk/xtext.c +++ b/src/fe-gtk/xtext.c @@ -5289,7 +5289,36 @@ gtk_xtext_buffer_show (GtkXText *xtext, xtext_buffer *buf, int render) gtk_xtext_render_page (xtext); #if HAVE_GTK3 - gtk_xtext_adjustment_set (buf, TRUE); + { + GtkAllocation allocation; + gdouble lower = 0; + gdouble upper = buf->num_lines; + gdouble value = gtk_adjustment_get_value (xtext->adj); + gdouble page_size; + + if (upper == 0) + upper = 1; + + gtk_widget_get_allocation (GTK_WIDGET (xtext), &allocation); + page_size = allocation.height / xtext->fontsize; + + gtk_adjustment_set_lower (xtext->adj, lower); + gtk_adjustment_set_upper (xtext->adj, upper); + gtk_adjustment_set_page_size (xtext->adj, page_size); + gtk_adjustment_set_page_increment (xtext->adj, page_size); + + if (value > upper - page_size) + { + buf->scrollbar_down = TRUE; + value = upper - page_size; + } + + if (value < 0) + value = 0; + + gtk_adjustment_set_value (xtext->adj, value); + gtk_adjustment_value_changed (xtext->adj); + } #else gtk_adjustment_changed (xtext->adj); #endif