emacs-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: PATCH: focus follows mouse in C


From: Pavel Janík
Subject: Re: PATCH: focus follows mouse in C
Date: Sat, 09 Feb 2002 12:53:12 +0100
User-agent: Gnus/5.090006 (Oort Gnus v0.06) Emacs/21.2.50 (i386-suse-linux-gnu)

   From: "Eli Zaretskii" <address@hidden>
   Date: Sat, 09 Feb 2002 12:01:46 +0200

   > > Of course, because "focus follows mouse".
   > 
   > That sounds like a misfeature to me: it's very easy to make small
   > mouse movements just by tapping on the table or on the keyboard.  Some
   > users might become annoyed enough to not use the feature, just because
   > of this.
   > 
   > How about if window reselection will only be done if the mouse is in a
   > window different from the one it was the last time, at least as a user
   > option?

Yes, now I finally understand your and RMS' point. I agree and I think that
it should default to behaviour described by you. I think that when I have
two windows and point is in the bottom one and I do C-x o, small mouse
movement (still in bottom window) should not (by default, but user should
be able to change it) select the bottom window again. This should be it
(module cus-start.el etc. changes):

--- xterm.c.~1.703.~    Sun Jan 27 17:15:53 2002
+++ xterm.c     Sat Feb  9 12:45:39 2002
@@ -253,6 +253,15 @@
 
 static int any_help_event_p;
 
+/* Non-zero means autoselect window with the mouse cursor.  */
+
+int x_autoselect_window_p;
+
+/* Non-zero means always autoselect window even if user switched to
+   the different window.  */
+
+int x_autoselect_always_p;
+
 /* 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
    drawn as wide as that tab on the display.  */
@@ -6605,6 +6614,26 @@
   last_mouse_motion_event = *event;
   XSETFRAME (last_mouse_motion_frame, frame);
 
+  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.  Minubuffer window
+        will be selected iff it is active.  */
+      if ( (x_autoselect_always_p || !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;
+    }
+
   if (event->window != FRAME_X_WINDOW (frame))
     {
       frame->mouse_moved = 1;
@@ -15002,6 +15031,15 @@
   previous_help_echo = Qnil;
   staticpro (&previous_help_echo);
   help_echo_pos = -1;
+
+  DEFVAR_BOOL ("x-autoselect-window", &x_autoselect_window_p,
+    doc: /* *Non-nil means autoselect window with mouse pointer.  */);
+  x_autoselect_window_p = 0;
+
+  DEFVAR_BOOL ("x-autoselect-always", &x_autoselect_always_p,
+    doc: /* *Non-nil means always autoselect window with mouse pointer
+even if user switched to different window.  */);
+  x_autoselect_always_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.

-- 
Pavel Janík

panic("IRQ, you lose...");
                  -- 2.2.16 arch/mips/sgi/kernel/indy_int.c



reply via email to

[Prev in Thread] Current Thread [Next in Thread]