# HG changeset patch # User Jan Dj¸«£rv # Date 1260620955 0 # Node ID 3acd32c3e0ac5e027dd0e2bcf4532a4285ebee7f # Parent 4a940e6bbe88863b3ba12f70477a9d080fdc50f8 gtkutil.c: Scroll bar thumb not updated properly (bug #5177). (scroll_end_callback): New function (bug #5177) (xg_create_scroll_bar): Call scroll_end_callback on button release event (bug #5177). (xg_event_is_for_scrollbar): != replaced with ==. diff -r 4a940e6bbe88 -r 3acd32c3e0ac src/ChangeLog --- a/src/ChangeLog Sat Dec 12 11:53:27 2009 +0000 +++ b/src/ChangeLog Sat Dec 12 12:29:15 2009 +0000 @@ -1,3 +1,10 @@ +2009-12-12 Jan DjƤrv + + * gtkutil.c (scroll_end_callback): New function (bug #5177) + (xg_create_scroll_bar): Call scroll_end_callback on button release + event (bug #5177). + (xg_event_is_for_scrollbar): != replaced with ==. + 2009-12-12 Kenichi Handa * ftfont.c (struct ftfont_info): New member matrix. diff -r 4a940e6bbe88 -r 3acd32c3e0ac src/gtkutil.c --- a/src/gtkutil.c Sat Dec 12 11:53:27 2009 +0000 +++ b/src/gtkutil.c Sat Dec 12 12:29:15 2009 +0000 @@ -3093,6 +3093,18 @@ xg_remove_widget_from_map (id); } +/* Callback for button release. Sets dragging to Qnil when dragging is done. */ + +static gboolean +scroll_end_callback (GtkWidget *widget, + GdkEventButton *event, + gpointer user_data) +{ + struct scroll_bar *bar = (struct scroll_bar *) user_data; + bar->dragging = Qnil; + return FALSE; +} + /* Create a scroll bar widget for frame F. Store the scroll bar in BAR. SCROLL_CALLBACK is the callback to invoke when the value of the @@ -3134,6 +3146,11 @@ G_CALLBACK (xg_gtk_scroll_destroy), (gpointer) (EMACS_INT) scroll_id); + g_signal_connect (G_OBJECT (wscroll), + "button-release-event", + G_CALLBACK (scroll_end_callback), + (gpointer) bar); + /* 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 whenever the edit widget is cleared, the scroll bar needs to redraw @@ -3317,13 +3334,13 @@ retval = gdk_display_get_window_at_pointer (gdpy, NULL, NULL) != f->output_data.x->edit_widget->window; } - else if (f && (event->type != ButtonRelease || event->type != MotionNotify)) + else if (f && (event->type == ButtonRelease || event->type == MotionNotify)) { /* If we are releasing or moving the scroll bar, it has the grab. */ retval = gtk_grab_get_current () != 0 && gtk_grab_get_current () != f->output_data.x->edit_widget; } - + return retval; }