From 0c5ef1333558423f0eb0f14934fffb1b4bce0946 Mon Sep 17 00:00:00 2001 From: Chong Yidong Date: Sat, 24 Nov 2012 16:15:00 +0800 Subject: [PATCH] Fix follow-mouse clicks on undraggable mode/header lines. * mouse.el (mouse-drag-line): Even if the line is not draggable, keep reading until we get the up-event anyway, in order to process the up-event for mouse-1-click-follows-link. Fixes: debbugs:12971 --- lisp/ChangeLog | 6 ++++++ lisp/mouse.el | 14 +++++++------- 2 files changed, 13 insertions(+), 7 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 431f45c3695..04aa1dc0216 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,9 @@ +2012-11-24 Chong Yidong + + * mouse.el (mouse-drag-line): Even if the line is not draggable, + keep reading until we get the up-event anyway, in order to process + the up-event for mouse-1-click-follows-link (Bug#12971). + 2012-11-23 Stefan Monnier * emacs-lisp/bytecomp.el (byte-compile-file): Setup default value for diff --git a/lisp/mouse.el b/lisp/mouse.el index 61d70404bd6..60a3d390889 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) - event position growth dragged) + finished event position growth dragged) (cond ((eq line 'header) ;; Check whether header-line can be dragged at all. @@ -457,7 +457,7 @@ 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 draggable + (while (not finished) (setq event (read-event)) (setq position (mouse-position)) ;; Do nothing if @@ -472,7 +472,7 @@ must be one of the symbols `header', `mode', or `vertical'." ;; - there is a keyboard event or some other unknown event. (cond ((not (consp event)) - (setq draggable nil)) + (setq finished t)) ((memq (car event) '(switch-frame select-window)) nil) ((not (memq (car event) '(mouse-movement scroll-bar-movement))) @@ -480,15 +480,15 @@ must be one of the symbols `header', `mode', or `vertical'." ;; 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. + ;; 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 draggable nil)) - ((or (not (eq (car position) frame)) - (null (car (cdr position)))) + (setq finished t)) + ((not (and (eq (car position) frame) + (cadr position))) nil) ((eq line 'vertical) ;; Drag vertical divider. -- 2.39.2