changeset 106549:3acd32c3e0ac

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 ==.
author Jan Djärv <jan.h.d@swipnet.se>
date Sat, 12 Dec 2009 12:29:15 +0000
parents 4a940e6bbe88
children 562676f8dfb2
files src/ChangeLog src/gtkutil.c
diffstat 2 files changed, 26 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- 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  <jan.h.d@swipnet.se>
+
+	* 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  <handa@m17n.org>
 
 	* ftfont.c (struct ftfont_info): New member matrix.
--- 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;
 }