]> git.eshelyaron.com Git - emacs.git/commitdiff
Avoid extraneous selection querying if we own the selection
authorPo Lu <luangruo@yahoo.com>
Tue, 1 Feb 2022 02:03:05 +0000 (02:03 +0000)
committerPo Lu <luangruo@yahoo.com>
Tue, 1 Feb 2022 02:03:05 +0000 (02:03 +0000)
* lisp/select.el (gui--selection-value-internal): Return nil if
`gui-backend-selection-owner-p' on window systems where it is
reliable.

lisp/select.el

index 7f29f02dab9221b0493006b8e4eca1aab102c602..420967c1b00ce4e25c17d9968acd8bba48dcd2fc 100644 (file)
@@ -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