]> git.eshelyaron.com Git - emacs.git/commitdiff
Fix mouse events on tab bar or tool bar when 'track-mouse' is t
authormartin rudalics <rudalics@gmx.at>
Sat, 20 Nov 2021 09:56:13 +0000 (10:56 +0100)
committerEli Zaretskii <eliz@gnu.org>
Sat, 20 Nov 2021 10:05:36 +0000 (12:05 +0200)
* lisp/mouse.el (mouse-drag-track):
* lisp/mouse-drag.el (mouse-drag-drag): Set 'track-mouse' to some
value neither t nor nil.
* src/keyboard.c (make_lispy_position): If track_mouse is Qt,
report event on tool or tab bar (Bug#51794).

lisp/mouse-drag.el
lisp/mouse.el
src/keyboard.c

index ecfb359b36ff0ee03d8d4535a4fe165ee98b0f49..0cdba6b4d014b1e13b27f4115bf71bf6d68cfae0 100644 (file)
@@ -282,6 +282,8 @@ To test this function, evaluate:
     (setq window-last-row (- (window-height) 2)
          window-last-col (- (window-width) 2))
     (track-mouse
+      ;; Set 'track-mouse' to something neither nil nor t (Bug#51794).
+      (setq track-mouse 'drag-dragging)
       (while (progn
               (setq event (read--potential-mouse-event)
                     end (event-end event)
index 0a4ab2878ab2bc987777e814d8b679e47324f1f2..5c645a4b8957788d0f2c6bf8ce8f28bdfc655208 100644 (file)
@@ -1618,7 +1618,11 @@ The region will be defined with mark and point."
       (goto-char (nth 1 range)))
 
     (setf (terminal-parameter nil 'mouse-drag-start) start-event)
-    (setq track-mouse t)
+    ;; Set 'track-mouse' to something neither nil nor t, so that mouse
+    ;; events are not reported to have happened on the tool bar or the
+    ;; tab bar, as that breaks drag events that originate on the window
+    ;; body below these bars; see make_lispy_position and bug#51794.
+    (setq track-mouse 'drag-tracking)
     (setq auto-hscroll-mode nil)
 
     (set-transient-map
index c608c072f01908456e766fa6dfb5b42f962bec80..1d8d98c94195ae968a459a10b9211c2f42f6b78a 100644 (file)
@@ -5124,19 +5124,20 @@ make_lispy_position (struct frame *f, Lisp_Object x, Lisp_Object y,
 #endif
       )
     {
-      /* FIXME: While track_mouse is non-nil, we do not report this
+      /* While 'track-mouse' is neither nil nor t, do not report this
         event as something that happened on the tool or tab bar since
-        that would break mouse dragging operations that originate from
-        an ordinary window beneath and expect the window to auto-scroll
-        as soon as the mouse cursor appears above or beneath it
-        (Bug#50993).  Since this "fix" might break track_mouse based
-        operations originating from the tool or tab bar itself, such
-        operations should set track_mouse to some special value that
-        would be recognized by the following check.
-
-        This issue should be properly handled by 'mouse-drag-track' and
-        friends, so the below is only a temporary workaround.  */
-      if (NILP (track_mouse))
+        that would break mouse drag operations that originate from an
+        ordinary window beneath that bar and expect the window to
+        auto-scroll as soon as the mouse cursor appears above or
+        beneath it (Bug#50993).  We do allow reports for t, because
+        applications may have set 'track-mouse' to t and still expect a
+        click on the tool or tab bar to get through (Bug#51794).
+
+        FIXME: This is a preliminary fix for the bugs cited above and
+        awaits a solution that includes a convention for all special
+        values of 'track-mouse' and their documentation in the Elisp
+        manual.  */
+      if (NILP (track_mouse) || EQ (track_mouse, Qt))
        posn = EQ (window_or_frame, f->tab_bar_window) ? Qtab_bar : Qtool_bar;
       /* Kludge alert: for mouse events on the tab bar and tool bar,
         keyboard.c wants the frame, not the special-purpose window