]> git.eshelyaron.com Git - emacs.git/commitdiff
Fix multi-click selection behavior (Bug#6565).
authorChong Yidong <cyd@stupidchicken.com>
Mon, 5 Jul 2010 16:42:50 +0000 (12:42 -0400)
committerChong Yidong <cyd@stupidchicken.com>
Mon, 5 Jul 2010 16:42:50 +0000 (12:42 -0400)
* lisp/mouse.el (mouse-drag-track): Call mouse-start-end to handle
word/line selection (Bug#6565).

lisp/ChangeLog
lisp/mouse.el

index ca52d8d2cddb8082badd07a33a05118c4a5d0751..8e75e6634fec0cf92a116fc99ee98d2a9106279c 100644 (file)
@@ -1,3 +1,8 @@
+2010-07-05  Chong Yidong  <cyd@stupidchicken.com>
+
+       * mouse.el (mouse-drag-track): Call mouse-start-end to handle
+       word/line selection (Bug#6565).
+
 2010-07-04  Juanma Barranquero  <lekktu@gmail.com>
 
        * net/dbus.el (dbus-send-signal): Declare function.
index f41e7c79b1f1a94a58a442deb218a2d5caf7b9c7..538186355115d8de47fa48c6562fd9806162c1ea 100644 (file)
@@ -936,25 +936,30 @@ DO-MOUSE-DRAG-REGION-POST-PROCESS should only be used by
                        ;; 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 @@ DO-MOUSE-DRAG-REGION-POST-PROCESS should only be used by
                     (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