summaryrefslogtreecommitdiff
path: root/lisp/select.el
diff options
context:
space:
mode:
authorPo Lu <luangruo@yahoo.com>2022-02-01 02:03:05 +0000
committerPo Lu <luangruo@yahoo.com>2022-02-01 02:03:05 +0000
commit16174d796f86fe31c4a20ece471bed10f23c229f (patch)
tree5145d408ad9133c5aa9240208eb2da595e719a0f /lisp/select.el
parentd6d73224a21506b0ba31fd03bd99c5535ce3bb9c (diff)
downloademacs-16174d796f86fe31c4a20ece471bed10f23c229f.tar.gz
Avoid extraneous selection querying if we own the selection
* lisp/select.el (gui--selection-value-internal): Return nil if `gui-backend-selection-owner-p' on window systems where it is reliable.
Diffstat (limited to 'lisp/select.el')
-rw-r--r--lisp/select.el34
1 files changed, 20 insertions, 14 deletions
diff --git a/lisp/select.el b/lisp/select.el
index 7f29f02dab9..420967c1b00 100644
--- a/lisp/select.el
+++ b/lisp/select.el
@@ -168,20 +168,26 @@ text/plain\\;charset=utf-8)."
Call `gui-get-selection' with an appropriate DATA-TYPE argument
decided by `x-select-request-type'. The return value is already
decoded. If `gui-get-selection' signals an error, return nil."
- (let ((request-type (if (memq window-system '(x pgtk))
- (or x-select-request-type
- '(UTF8_STRING COMPOUND_TEXT STRING text/plain\;charset=utf-8))
- 'STRING))
- text)
- (with-demoted-errors "gui-get-selection: %S"
- (if (consp request-type)
- (while (and request-type (not text))
- (setq text (gui-get-selection type (car request-type)))
- (setq request-type (cdr request-type)))
- (setq text (gui-get-selection type request-type))))
- (if text
- (remove-text-properties 0 (length text) '(foreign-selection nil) text))
- text))
+ ;; The doc string of `interprogram-paste-function' says to return
+ ;; nil if no other program has provided text to paste.
+ (unless (and (memq window-system '(x haiku))
+ ;; gui-backend-selection-p might be unreliable on other
+ ;; window systems.
+ (gui-backend-selection-owner-p type))
+ (let ((request-type (if (memq window-system '(x pgtk))
+ (or x-select-request-type
+ '(UTF8_STRING COMPOUND_TEXT STRING text/plain\;charset=utf-8))
+ 'STRING))
+ text)
+ (with-demoted-errors "gui-get-selection: %S"
+ (if (consp request-type)
+ (while (and request-type (not text))
+ (setq text (gui-get-selection type (car request-type)))
+ (setq request-type (cdr request-type)))
+ (setq text (gui-get-selection type request-type))))
+ (if text
+ (remove-text-properties 0 (length text) '(foreign-selection nil) text))
+ text)))
(defun gui-selection-value ()
(let ((clip-text