(x-selection-owner-p, x-own-selection-internal)
authorEli Zaretskii <eliz@gnu.org>
Sat, 18 Jul 2009 11:13:03 +0000 (11:13 +0000)
committerEli Zaretskii <eliz@gnu.org>
Sat, 18 Jul 2009 11:13:03 +0000 (11:13 +0000)
(x-disown-selection-internal): New functions.

lisp/ChangeLog
lisp/term/pc-win.el

index 7775cd7..2849d36 100644 (file)
@@ -1,3 +1,8 @@
+2009-07-18  Eli Zaretskii  <eliz@gnu.org>
+
+       * term/pc-win.el (x-selection-owner-p, x-own-selection-internal)
+       (x-disown-selection-internal): New functions.
+
 2009-07-18  Nick Roberts  <nickrob@snap.net.nz>
 
        * progmodes/gdb-mi.el (speedbar-frame): Declare to avoid compiler
index 6fb714c..332e151 100644 (file)
@@ -227,6 +227,47 @@ support other types of selections."
         (t
          (setq x-last-selected-text text))))))
 
+;; x-selection-owner-p is used in simple.el.
+(defun x-selection-owner-p (&optional type)
+  "Whether the current Emacs process owns the given X Selection.
+The arg should be the name of the selection in question, typically one of
+the symbols `PRIMARY', `SECONDARY', or `CLIPBOARD'.
+\(Those are literal upper-case symbol names, since that's what X expects.)
+For convenience, the symbol nil is the same as `PRIMARY',
+and t is the same as `SECONDARY'."
+    (if x-select-enable-clipboard
+      (let (text)
+       ;; Don't die if w16-get-clipboard-data signals an error.
+       (ignore-errors
+         (setq text (w16-get-clipboard-data)))
+       ;; We consider ourselves the owner of the selection if it does
+       ;; not exist, or exists and compares equal with the last text
+       ;; we've put into the Windows clipboard.
+       (cond
+        ((not text) t)
+        ((or (eq text x-last-selected-text)
+             (string= text x-last-selected-text))
+         text)
+        (t nil)))))
+
+;; x-own-selection-internal and x-disown-selection-internal are used
+;; in select.el:x-set-selection.
+(defun x-own-selection-internal (type value)
+  "Assert an X selection of the given TYPE with the given VALUE.
+TYPE is a symbol, typically `PRIMARY', `SECONDARY', or `CLIPBOARD'.
+\(Those are literal upper-case symbol names, since that's what X expects.)
+VALUE is typically a string, or a cons of two markers, but may be
+anything that the functions on `selection-converter-alist' know about."
+  (ignore-errors
+    (x-select-text value))
+  value)
+
+(defun x-disown-selection-internal (selection &optional time)
+  "If we own the selection SELECTION, disown it.
+Disowning it means there is no such selection."
+  (if (x-selection-owner-p selection)
+      t))
+
 ;; From lisp/faces.el: we only have one font, so always return
 ;; it, no matter which variety they've asked for.
 (defun x-frob-font-slant (font which)