changeset 8430:356e5509efda

(construct_mouse_click, construct_menu_click): Don't update x_mouse_grabbed, Vmouse_depressed, last_mouse_frame here. (XTread_socket): Update them here, so we do it without fail. (XTmouse_position, XTread_socket case MotionNotify): Check last_mouse_frame is nonzero before using it.
author Richard M. Stallman <rms@gnu.org>
date Wed, 03 Aug 1994 07:35:50 +0000
parents f4138f5dc0d3
children b4138573c00f
files src/xterm.c
diffstat 1 files changed, 17 insertions(+), 32 deletions(-) [+]
line wrap: on
line diff
--- a/src/xterm.c	Wed Aug 03 04:39:08 1994 +0000
+++ b/src/xterm.c	Wed Aug 03 07:35:50 1994 +0000
@@ -2011,21 +2011,6 @@
 			  ? up_modifier 
 			  : down_modifier));
 
-  /* Notice if the mouse is still grabbed.  */
-  if (event->type == ButtonPress)
-    {
-      if (! x_mouse_grabbed)
-	Vmouse_depressed = Qt;
-      x_mouse_grabbed |= (1 << event->button);
-      last_mouse_frame = f;
-    }
-  else if (event->type == ButtonRelease)
-    {
-      x_mouse_grabbed &= ~(1 << event->button);
-      if (!x_mouse_grabbed)
-	Vmouse_depressed = Qnil;
-    }
-
   {
     int row, column;
 
@@ -2061,15 +2046,6 @@
   XSET (result->x, Lisp_Int, event->x);
   XSET (result->y, Lisp_Int, -1);
   XSET (result->frame_or_window, Lisp_Frame, f);
-
-  /* Notice if the mouse is still grabbed.  */
-  if (event->type == ButtonPress)
-    {
-      if (! x_mouse_grabbed)
-	Vmouse_depressed = Qt;
-      x_mouse_grabbed |= (1 << event->button);
-      last_mouse_frame = f;
-    }
 }
 
 /* Function to report a mouse movement to the mainstream Emacs code.
@@ -2538,7 +2514,8 @@
 
 	win = root;
 
-	if (x_mouse_grabbed && FRAME_LIVE_P (last_mouse_frame))
+	if (x_mouse_grabbed && last_mouse_frame
+	    && FRAME_LIVE_P (last_mouse_frame))
 	  {
 	    /* If mouse was grabbed on a frame, give coords for that frame
 	       even if the mouse is now outside it.  */
@@ -4128,7 +4105,8 @@
 #ifdef HAVE_X11
 	case MotionNotify:
 	  {
-	    if (x_mouse_grabbed && FRAME_LIVE_P (last_mouse_frame))
+	    if (x_mouse_grabbed && last_mouse_frame
+		&& FRAME_LIVE_P (last_mouse_frame))
 	      f = last_mouse_frame;
 	    else
 	      f = x_window_to_frame (event.xmotion.window);
@@ -4304,16 +4282,23 @@
 		    if (f && event.type == ButtonPress)
 		      construct_menu_click (&emacs_event,
 					    &event, f);
-		    else if (f)
-		      {
-			x_mouse_grabbed &= ~(1 << event.xbutton.button);
-			if (!x_mouse_grabbed)
-			  Vmouse_depressed = Qnil;
-		      }
 		  }
 #endif /* USE_X_TOOLKIT */
 	      }
 
+	    if (event.type == ButtonPress)
+	      {
+		x_mouse_grabbed |= (1 << event.xbutton.button);
+		Vmouse_depressed = Qt;
+		last_mouse_frame = f;
+	      }
+	    else
+	      {
+		x_mouse_grabbed &= ~(1 << event.xbutton.button);
+		if (!x_mouse_grabbed)
+		  Vmouse_depressed = Qnil;
+	      }
+
 	    if (numchars >= 1 && emacs_event.kind != no_event)
 	      {
 		bcopy (&emacs_event, bufp, sizeof (struct input_event));