changeset 44301:1892db006468

(autoselect_window_p): Renamed from `x_autoselect_window_p'. (last_window): New variable. (XTread_socket): Generate SELECT_WINDOW_EVENTs. (note_mouse_movement): Remove reimplemented code in #if 0.
author Pavel Janík <Pavel@Janik.cz>
date Mon, 01 Apr 2002 13:43:58 +0000
parents 21286349d285
children bc30b29aead6
files src/xterm.c
diffstat 1 files changed, 35 insertions(+), 27 deletions(-) [+]
line wrap: on
line diff
--- a/src/xterm.c	Mon Apr 01 13:42:32 2002 +0000
+++ b/src/xterm.c	Mon Apr 01 13:43:58 2002 +0000
@@ -255,7 +255,10 @@
 
 /* Non-zero means autoselect window with the mouse cursor.  */
 
-int x_autoselect_window_p;
+int autoselect_window_p;
+
+/* Last window where we saw the mouse.  Used by autoselect-window.  */
+static Lisp_Object last_window;
 
 /* Non-zero means draw block and hollow cursor as wide as the glyph
    under it.  For example, if a block cursor is over a tab, it will be
@@ -6653,29 +6656,6 @@
   last_mouse_motion_event = *event;
   XSETFRAME (last_mouse_motion_frame, frame);
 
-#if 0 /* Lisp must not be called asynchronously, so this must
-	 not be done.  */
-  if (x_autoselect_window_p)
-    {
-      int area;
-      Lisp_Object window;
-      static Lisp_Object last_window;
-
-      window = window_from_coordinates (frame, XINT (event->x), XINT (event->y), &area, 0);
-
-      /* Window will be selected only when it is not selected now and
-	 last mouse movement event was not in it.  Minibuffer window
-	 will be selected iff it is active.  */
-      if (!EQ (window, last_window)
-	  && !EQ (window, selected_window)
-	  && (!MINI_WINDOW_P (XWINDOW (window))
-	      || (EQ (window, minibuf_window) && minibuf_level > 0)))
-	Fselect_window (window);
-
-      last_window=window;
-    }
-#endif
-
   if (event->window != FRAME_X_WINDOW (frame))
     {
       frame->mouse_moved = 1;
@@ -10895,7 +10875,35 @@
 		  }
 
 		if (f)
-		  note_mouse_movement (f, &event.xmotion);
+		  {
+
+		    /* Generate SELECT_WINDOW_EVENTs when needed.  */
+		    if (autoselect_window_p)
+		      {
+			Lisp_Object window;
+			int area;
+
+			window = window_from_coordinates (f,
+							  XINT (event.xmotion.x), XINT (event.xmotion.y),
+							  &area, 0);
+
+			/* Window will be selected only when it is not selected now and
+			   last mouse movement event was not in it.  Minibuffer window
+			   will be selected iff it is active.  */
+			if (!EQ (window, last_window)
+			    && !EQ (window, selected_window)
+			    && numchars > 0)
+			  {
+			    bufp->kind = SELECT_WINDOW_EVENT;
+			    bufp->frame_or_window = window;
+			    bufp->arg = Qnil;
+			    ++bufp, ++count, --numchars;
+			  }
+
+			last_window=window;
+		      }
+		    note_mouse_movement (f, &event.xmotion);
+		  }
 		else
 		  {
 #ifndef USE_TOOLKIT_SCROLL_BARS
@@ -15108,9 +15116,9 @@
   staticpro (&previous_help_echo);
   help_echo_pos = -1;
 
-  DEFVAR_BOOL ("x-autoselect-window", &x_autoselect_window_p,
+  DEFVAR_BOOL ("autoselect-window", &autoselect_window_p,
     doc: /* *Non-nil means autoselect window with mouse pointer.  */);
-  x_autoselect_window_p = 0;
+  autoselect_window_p = 0;
 
   DEFVAR_BOOL ("x-stretch-cursor", &x_stretch_cursor_p,
     doc: /* *Non-nil means draw block cursor as wide as the glyph under it.