From: Chong Yidong Date: Sat, 24 Nov 2012 08:15:00 +0000 (+0800) Subject: Fix follow-mouse clicks on undraggable mode/header lines. X-Git-Tag: emacs-24.2.90~3 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=0c5ef1333558423f0eb0f14934fffb1b4bce0946;p=emacs.git 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 --- 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.