summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lisp/ChangeLog9
-rw-r--r--lisp/mouse.el4
-rw-r--r--lisp/simple.el27
3 files changed, 25 insertions, 15 deletions
diff --git a/lisp/ChangeLog b/lisp/ChangeLog
index 70e841f6c4f..7aca9ba3ef9 100644
--- a/lisp/ChangeLog
+++ b/lisp/ChangeLog
@@ -1,3 +1,12 @@
+2010-07-17 Chong Yidong <cyd@stupidchicken.com>
+
+ * simple.el (select-active-region): New function.
+ (push-mark-command, set-mark, activate-mark)
+ (handle-shift-selection): Use it.
+ (deactivate-mark): Don't check for size of region.
+
+ * mouse.el (mouse-drag-track): Use select-active-region.
+
2010-07-17 Michael Albinus <michael.albinus@gmx.de>
* net/tramp.el (tramp-get-ls-command-with-dired): Make test for
diff --git a/lisp/mouse.el b/lisp/mouse.el
index 39c6993d973..87cca4044b8 100644
--- a/lisp/mouse.el
+++ b/lisp/mouse.el
@@ -1027,9 +1027,7 @@ DO-MOUSE-DRAG-REGION-POST-PROCESS should only be used by
;; 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))))
+ (select-active-region))
;; If point hasn't moved, run the binding of the
;; terminating up-event.
diff --git a/lisp/simple.el b/lisp/simple.el
index 10b8ab67ebc..43cb31b226b 100644
--- a/lisp/simple.el
+++ b/lisp/simple.el
@@ -3687,7 +3687,6 @@ This function also runs `deactivate-mark-hook'."
mark-active
(display-selections-p)
(x-selection-owner-p 'PRIMARY)
- (not (eq (region-beginning) (region-end)))
(x-set-selection 'PRIMARY (buffer-substring-no-properties
(region-beginning) (region-end))))
(if (and (null force)
@@ -3708,9 +3707,13 @@ This function also runs `deactivate-mark-hook'."
(setq mark-active t)
(unless transient-mark-mode
(setq transient-mark-mode 'lambda))
- (when (and select-active-regions
- (display-selections-p))
- (x-set-selection 'PRIMARY (current-buffer)))))
+ (select-active-region)))
+
+(defsubst select-active-region ()
+ "Set the PRIMARY X selection if `select-active-regions' is non-nil."
+ (and select-active-regions
+ (display-selections-p)
+ (x-set-selection 'PRIMARY (current-buffer))))
(defun set-mark (pos)
"Set this buffer's mark to POS. Don't use this function!
@@ -3733,9 +3736,7 @@ store it in a Lisp variable. Example:
(progn
(setq mark-active t)
(run-hooks 'activate-mark-hook)
- (when (and select-active-regions
- (display-selections-p))
- (x-set-selection 'PRIMARY (current-buffer)))
+ (select-active-region)
(set-marker (mark-marker) pos (current-buffer)))
;; Normally we never clear mark-active except in Transient Mark mode.
;; But when we actually clear out the mark value too, we must
@@ -3819,8 +3820,7 @@ Display `Mark set' unless the optional second arg NOMSG is non-nil."
(push-mark nil nomsg t)
(setq mark-active t)
(run-hooks 'activate-mark-hook)
- (and select-active-regions (display-selections-p)
- (x-set-selection 'PRIMARY (current-buffer)))
+ (select-active-region)
(unless nomsg
(message "Mark activated")))))
@@ -4008,9 +4008,12 @@ Otherwise, if the region has been activated temporarily,
deactivate it, and restore the variable `transient-mark-mode' to
its earlier value."
(cond ((and shift-select-mode this-command-keys-shift-translated)
- (unless (and mark-active
- (eq (car-safe transient-mark-mode) 'only))
- (setq transient-mark-mode
+ (if (and mark-active
+ (eq (car-safe transient-mark-mode) 'only))
+ ;; Another program may have grabbed the selection; make
+ ;; sure we get it back now.
+ (select-active-region)
+ (setq transient-mark-mode
(cons 'only
(unless (eq transient-mark-mode 'lambda)
transient-mark-mode)))