summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGlenn Morris <rgm@gnu.org>2013-01-30 09:14:24 -0800
committerGlenn Morris <rgm@gnu.org>2013-01-30 09:14:24 -0800
commitc491dd7037811c143fd453722c48f81c4fece58a (patch)
treeba167fc7e7643f3b7338c81e584b1204b92b68a1
parent6ff930c3d206417e4cec9429fa5d71bb5c9af541 (diff)
downloademacs-c491dd7037811c143fd453722c48f81c4fece58a.tar.gz
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
-rw-r--r--lisp/ChangeLog6
-rw-r--r--lisp/mouse.el59
2 files changed, 33 insertions, 32 deletions
diff --git a/lisp/ChangeLog b/lisp/ChangeLog
index bd8f5c08274..356fe37fb70 100644
--- a/lisp/ChangeLog
+++ b/lisp/ChangeLog
@@ -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
diff --git a/lisp/mouse.el b/lisp/mouse.el
index 538e6a500bb..9c7bf6f9c36 100644
--- a/lisp/mouse.el
+++ b/lisp/mouse.el
@@ -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)