# HG changeset patch # User Chong Yidong # Date 1278886493 14400 # Node ID 02b388bb2a4b7854e0d777b6ca59aea50bdae0c8 # Parent 6e14fb772f21ecca34ba181dabdfffa359f61399 * mouse.el (mouse-drag-track): Handle select-active-regions (Bug#6612). diff -r 6e14fb772f21 -r 02b388bb2a4b lisp/ChangeLog --- 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 + + * mouse.el (mouse-drag-track): Handle select-active-regions + (Bug#6612). + 2010-07-11 Magnus Henoch * net/tramp-gvfs.el (tramp-gvfs-handle-copy-file): Do not pass diff -r 6e14fb772f21 -r 02b388bb2a4b lisp/mouse.el --- 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