1
0
mirror of https://git.savannah.gnu.org/git/emacs.git synced 2024-12-01 08:17:38 +00:00

mouse-drag-line changes for mouse-1 in header-line

* lisp/mouse.el (mouse-drag-line): Avoid pushing same event onto
unread-command-events twice in some cases.  This tries to implement
the 2012-07-26 changes in a different way.

Fixes: debbugs:13560
This commit is contained in:
Glenn Morris 2013-01-30 09:14:24 -08:00
parent 6ff930c3d2
commit c491dd7037
2 changed files with 33 additions and 32 deletions

View File

@ -1,3 +1,9 @@
2013-01-30 Glenn Morris <rgm@gnu.org>
* mouse.el (mouse-drag-line): Avoid pushing same event onto
unread-command-events twice in some cases. This tries to implement
the 2012-07-26 changes in a different way. (Bug#13560)
2013-01-30 Fabián Ezequiel Gallina <fgallina@cuca>
* progmodes/python.el

View File

@ -425,7 +425,7 @@ must be one of the symbols `header', `mode', or `vertical'."
(frame-parameters frame)))
'right)))
(draggable t)
finished event position growth dragged)
event position growth dragged)
(cond
((eq line 'header)
;; Check whether header-line can be dragged at all.
@ -456,39 +456,33 @@ must be one of the symbols `header', `mode', or `vertical'."
;; Start tracking.
(track-mouse
;; Loop reading events and sampling the position of the mouse.
(while (not finished)
(setq event (read-event))
;; Loop reading events and sampling the position of the mouse,
;; until there is a non-mouse-movement event. Also,
;; scroll-bar-movement events are the same as mouse movement for
;; our purposes. (Why? -- cyd)
;; If you change this, check that all of the following still work:
;; Resizing windows by dragging mode-lines and header lines,
;; and vertical lines (in windows without scroll bars).
;; Doing this should not select another window, even if
;; mouse-autoselect-window is non-nil.
;; Mouse-1 clicks in Info header lines should advance position
;; by one node at a time if mouse-1-click-follows-link is non-nil,
;; otherwise they should just select the window.
(while (progn
(setq event (read-event))
(memq (car-safe event)
'(mouse-movement scroll-bar-movement
switch-frame select-window)))
(setq position (mouse-position))
;; Do nothing if
;; - there is a switch-frame event.
;; - the mouse isn't in the frame that we started in
;; - the mouse isn't in any Emacs frame
;; Drag if
;; - there is a mouse-movement event
;; - there is a scroll-bar-movement event (Why? -- cyd)
;; (same as mouse movement for our purposes)
;; Quit if
;; - there is a keyboard event or some other unknown event.
(cond
((not (consp event))
(setq finished t))
((memq (car event) '(switch-frame select-window))
nil)
((not (memq (car event) '(mouse-movement scroll-bar-movement)))
(when (consp event)
;; Do not unread a drag-mouse-1 event to avoid selecting
;; some other window. For vertical line dragging do not
;; unread mouse-1 events either (but only if we dragged at
;; least once to allow mouse-1 clicks get through).
(unless (and dragged
(if (eq line 'vertical)
(memq (car event) '(drag-mouse-1 mouse-1))
(eq (car event) 'drag-mouse-1)))
(push event unread-command-events)))
(setq finished t))
((not (and (eq (car position) frame)
(cadr position)))
((not (and (eq (car position) frame)
(cadr position)))
nil)
((eq line 'vertical)
;; Drag vertical divider.
@ -512,12 +506,13 @@ must be one of the symbols `header', `mode', or `vertical'."
growth
(- growth)))))))
;; Process the terminating event.
(when (and (mouse-event-p event) on-link (not dragged)
(mouse--remap-link-click-p start-event event))
;; If mouse-2 has never been done by the user, it doesn't have
;; the necessary property to be interpreted correctly.
(put 'mouse-2 'event-kind 'mouse-click)
(setcar event 'mouse-2)
(unless dragged
(when (and (mouse-event-p event) on-link
(mouse--remap-link-click-p start-event event))
;; If mouse-2 has never been done by the user, it doesn't have
;; the necessary property to be interpreted correctly.
(put 'mouse-2 'event-kind 'mouse-click)
(setcar event 'mouse-2))
(push event unread-command-events))))
(defun mouse-drag-mode-line (start-event)