Mercurial > emacs
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