Fix mouse events on tab bar or tool bar when 'track-mouse' is t
* 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).
This commit is contained in:
parent
354c834fba
commit
c22c988b1f
3 changed files with 19 additions and 12 deletions
|
@ -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)
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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.
|
||||
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).
|
||||
|
||||
This issue should be properly handled by 'mouse-drag-track' and
|
||||
friends, so the below is only a temporary workaround. */
|
||||
if (NILP (track_mouse))
|
||||
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
|
||||
|
|
Loading…
Add table
Reference in a new issue