# HG changeset patch # User Chong Yidong # Date 1278348170 14400 # Node ID 6b22e07394841d86f22fc1c19252e7b78aea9f34 # Parent d0090a8b66c346dbb7170a9e2af01e1accdef7ff Fix multi-click selection behavior (Bug#6565). * lisp/mouse.el (mouse-drag-track): Call mouse-start-end to handle word/line selection (Bug#6565). diff -r d0090a8b66c3 -r 6b22e0739484 lisp/ChangeLog --- a/lisp/ChangeLog Mon Jul 05 09:29:35 2010 -0700 +++ b/lisp/ChangeLog Mon Jul 05 12:42:50 2010 -0400 @@ -1,3 +1,8 @@ +2010-07-05 Chong Yidong + + * mouse.el (mouse-drag-track): Call mouse-start-end to handle + word/line selection (Bug#6565). + 2010-07-04 Juanma Barranquero * net/dbus.el (dbus-send-signal): Declare function. diff -r d0090a8b66c3 -r 6b22e0739484 lisp/mouse.el --- a/lisp/mouse.el Mon Jul 05 09:29:35 2010 -0700 +++ b/lisp/mouse.el Mon Jul 05 12:42:50 2010 -0400 @@ -936,25 +936,30 @@ ;; treatment, in case we click on a link inside an ;; intangible text. (mouse-on-link-p start-posn))) + (click-count (1- (event-click-count start-event))) ;; Suppress automatic hscrolling, because that is a nuisance ;; when setting point near the right fringe (but see below). (automatic-hscrolling-saved automatic-hscrolling) (automatic-hscrolling nil) event end end-point) - (setq mouse-selection-click-count (1- (event-click-count start-event))) + (setq mouse-selection-click-count click-count) ;; In case the down click is in the middle of some intangible text, ;; use the end of that text, and put it in START-POINT. (if (< (point) start-point) (goto-char start-point)) (setq start-point (point)) - ;; Activate the mark. + ;; Activate the region, using `mouse-start-end' to determine where + ;; to put point and mark (e.g., double-click will select a word). (setq transient-mark-mode (if (eq transient-mark-mode 'lambda) '(only) (cons 'only transient-mark-mode))) - (push-mark nil nil t) + (let ((range (mouse-start-end start-point start-point click-count))) + (goto-char (nth 0 range)) + (push-mark nil nil t) + (goto-char (nth 1 range))) ;; Track the mouse until we get a non-movement event. (track-mouse @@ -1017,8 +1022,9 @@ (copy-region-as-kill (mark) (point))))) ;; If point hasn't moved, run the binding of the ;; terminating up-event. - (if do-multi-click (goto-char start-point)) - (deactivate-mark) + (if do-multi-click + (goto-char start-point) + (deactivate-mark)) (when (and (functionp fun) (= start-hscroll (window-hscroll start-window)) ;; Don't run the up-event handler if the window