changeset 109322:02b388bb2a4b

* mouse.el (mouse-drag-track): Handle select-active-regions (Bug#6612).
author Chong Yidong <cyd@stupidchicken.com>
date Sun, 11 Jul 2010 18:14:53 -0400
parents 6e14fb772f21
children d43e7dfda4f1 92a95ad5c098 799b50142743
files lisp/ChangeLog lisp/mouse.el
diffstat 2 files changed, 21 insertions(+), 4 deletions(-) [+]
line wrap: on
line diff
--- a/lisp/ChangeLog	Sun Jul 11 21:51:46 2010 +0200
+++ b/lisp/ChangeLog	Sun Jul 11 18:14:53 2010 -0400
@@ -1,3 +1,8 @@
+2010-07-11  Chong Yidong  <cyd@stupidchicken.com>
+
+	* mouse.el (mouse-drag-track): Handle select-active-regions
+	(Bug#6612).
+
 2010-07-11  Magnus Henoch  <magnus.henoch@gmail.com>
 
 	* net/tramp-gvfs.el (tramp-gvfs-handle-copy-file): Do not pass
--- a/lisp/mouse.el	Sun Jul 11 21:51:46 2010 +0200
+++ b/lisp/mouse.el	Sun Jul 11 18:14:53 2010 -0400
@@ -956,9 +956,12 @@
 	  (if (eq transient-mark-mode 'lambda)
 	      '(only)
 	    (cons 'only transient-mark-mode)))
-    (let ((range (mouse-start-end start-point start-point click-count)))
+    (let ((range (mouse-start-end start-point start-point click-count))
+	  ;; Prevent `push-mark' from clobbering the primary selection
+	  ;; if the user clicks without dragging.
+	  (select-active-regions nil))
       (goto-char (nth 0 range))
-      (push-mark nil nil t)
+      (push-mark nil t t)
       (goto-char (nth 1 range)))
 
     ;; Track the mouse until we get a non-movement event.
@@ -1012,6 +1015,7 @@
 						   mouse-set-region))))))
 	(if (and (/= (mark) (point))
 		 (not do-multi-click))
+
 	    ;; If point has moved, finish the drag.
 	    (let* (last-command this-command)
 	      ;; Copy the region so that `select-active-regions' can
@@ -1019,12 +1023,20 @@
 	      (and mouse-drag-copy-region
 		   do-mouse-drag-region-post-process
 		   (let (deactivate-mark)
-		     (copy-region-as-kill (mark) (point)))))
+		     (copy-region-as-kill (mark) (point))))
+	      ;; For `select-active-regions' non-nil, ensure that
+	      ;; further alterations of the region (e.g. via
+	      ;; shift-selection) continue to update PRIMARY.
+	      (and select-active-regions
+		   (display-selections-p)
+		   (x-set-selection 'PRIMARY (current-buffer))))
+
 	  ;; If point hasn't moved, run the binding of the
 	  ;; terminating up-event.
 	  (if do-multi-click
 	      (goto-char start-point)
-	    (deactivate-mark))
+	    (let (select-active-regions)
+	      (deactivate-mark)))
 	  (when (and (functionp fun)
 		     (= start-hscroll (window-hscroll start-window))
 		     ;; Don't run the up-event handler if the window