From e4f2d8948765ac283fabb2c0f3fa03446cc9bc5f Mon Sep 17 00:00:00 2001 From: Helmut Eller Date: Sun, 2 Nov 2025 17:00:30 +0100 Subject: [PATCH] Fix PGTK scrollbars * src/gtkutil.c (free_gc_handle_callback): New. (xg_finish_scroll_bar_creation): Use it instead of free_glib_gc_handle. * src/pgtkterm.c (xg_scroll_callback, xg_end_scroll_callback): Adapt to gc_handles. --- src/gtkutil.c | 26 +++++++++++++------------- src/pgtkterm.c | 16 ++++------------ 2 files changed, 17 insertions(+), 25 deletions(-) diff --git a/src/gtkutil.c b/src/gtkutil.c index b6fd4958609..51565bae5d7 100644 --- a/src/gtkutil.c +++ b/src/gtkutil.c @@ -154,6 +154,13 @@ free_glib_gc_handle (gpointer data, GClosure *closure) free_gc_handle (data); } +static void +free_gc_handle_callback (GtkWidget *widget, gpointer user_data) +{ + gc_handle gch = user_data; + free_gc_handle (gch); +} + #ifdef HAVE_GTK3 static void emacs_menu_bar_init (EmacsMenuBar *menu_bar) @@ -4597,19 +4604,12 @@ xg_finish_scroll_bar_creation (struct frame *f, #endif gc_handle bar_gch = gc_handle_for_pvec (&bar->header); - g_signal_connect (G_OBJECT (wscroll), - "change-value", - scroll_callback, - bar_gch); - g_signal_connect (G_OBJECT (wscroll), - "button-release-event", - end_callback, - bar_gch); - - g_signal_connect (G_OBJECT (wscroll), - "destroy", - G_CALLBACK (free_glib_gc_handle), - (gpointer) bar_gch); + g_signal_connect (G_OBJECT (wscroll), "change-value", + scroll_callback, bar_gch); + g_signal_connect (G_OBJECT (wscroll), "button-release-event", + end_callback, bar_gch); + g_signal_connect (G_OBJECT (wscroll), "destroy", + G_CALLBACK (free_gc_handle_callback), bar_gch); /* The scroll bar widget does not draw on a window of its own. Instead it draws on the parent window, in this case the edit widget. So diff --git a/src/pgtkterm.c b/src/pgtkterm.c index 25782d386a7..73df1fda8ac 100644 --- a/src/pgtkterm.c +++ b/src/pgtkterm.c @@ -3992,12 +3992,8 @@ xg_scroll_callback (GtkRange * range, GtkScrollType scroll, gdouble value, gpointer user_data) { int whole = 0, portion = 0; -#ifdef HAVE_MPS - struct scroll_bar **bar_cell = user_data; - struct scroll_bar *bar = *bar_cell; -#else - struct scroll_bar *bar = user_data; -#endif + gc_handle bar_gch = user_data; + struct scroll_bar *bar = XSCROLL_BAR (gc_handle_value (bar_gch)); enum scroll_bar_part part = scroll_bar_nowhere; GtkAdjustment *adj = GTK_ADJUSTMENT (gtk_range_get_adjustment (range)); @@ -4063,12 +4059,8 @@ static gboolean xg_end_scroll_callback (GtkWidget *widget, GdkEventButton *event, gpointer user_data) { -#ifdef HAVE_MPS - struct scroll_bar **bar_cell = user_data; - struct scroll_bar *bar = *bar_cell; -#else - struct scroll_bar *bar = user_data; -#endif + gc_handle bar_gch = user_data; + struct scroll_bar *bar = XSCROLL_BAR (gc_handle_value (bar_gch)); bar->dragging = -1; if (WINDOWP (window_being_scrolled)) {