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)) {