changeset 74621:130738a27be7

(ignore_mouse_drag_p): New global var. (some_mouse_moved): Return 0 if it is non-zero. (make_lispy_event): Generate click event on mouse up if ignore_mouse_drag_p is non-zero, even if mouse moved. Clear ignore_mouse_drag_p on mouse down/up.
author Kim F. Storm <storm@cua.dk>
date Fri, 15 Dec 2006 00:22:57 +0000
parents 2d8b71da75df
children 1d33c1199b82
files src/keyboard.c
diffstat 1 files changed, 21 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/src/keyboard.c	Fri Dec 15 00:22:44 2006 +0000
+++ b/src/keyboard.c	Fri Dec 15 00:22:57 2006 +0000
@@ -1438,13 +1438,25 @@
 }
 
 /* If mouse has moved on some frame, return one of those frames.
-   Return 0 otherwise.  */
+
+   Return 0 otherwise.
+
+   If ignore_mouse_drag_p is non-zero, ignore (implicit) mouse movement
+   after resizing the tool-bar window.  */
+
+int ignore_mouse_drag_p;
 
 static FRAME_PTR
 some_mouse_moved ()
 {
   Lisp_Object tail, frame;
 
+  if (ignore_mouse_drag_p)
+    {
+      //ignore_mouse_drag_p = 0;
+      return 0;
+    }
+
   FOR_EACH_FRAME (tail, frame)
     {
       if (XFRAME (frame)->mouse_moved)
@@ -5592,6 +5604,7 @@
 	      double_click_count = 1;
 	    button_down_time = event->timestamp;
 	    *start_pos_ptr = Fcopy_alist (position);
+	    ignore_mouse_drag_p = 0;
 	  }
 
 	/* Now we're releasing a button - check the co-ordinates to
@@ -5627,8 +5640,13 @@
 		    ydiff = XINT (event->y) - XINT (XCDR (down));
 		  }
 
-		if (xdiff < double_click_fuzz && xdiff > - double_click_fuzz
-		    && ydiff < double_click_fuzz && ydiff > - double_click_fuzz
+		if (ignore_mouse_drag_p)
+		  {
+		    event->modifiers |= click_modifier;
+		    ignore_mouse_drag_p = 0;
+		  }
+		else if (xdiff < double_click_fuzz && xdiff > - double_click_fuzz
+			 && ydiff < double_click_fuzz && ydiff > - double_click_fuzz
 		  /* Maybe the mouse has moved a lot, caused scrolling, and
 		     eventually ended up at the same screen position (but
 		     not buffer position) in which case it is a drag, not