Selaa lähdekoodia

ui/clipboard: add helper to retrieve current clipboard

Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Message-Id: <20210805135715.857938-6-marcandre.lureau@redhat.com>
Acked-by: Gerd Hoffmann <kraxel@redhat.com>
Marc-André Lureau 4 vuotta sitten
vanhempi
commit
684e64d36d
2 muutettua tiedostoa jossa 24 lisäystä ja 0 poistoa
  1. 9 0
      include/ui/clipboard.h
  2. 15 0
      ui/clipboard.c

+ 9 - 0
include/ui/clipboard.h

@@ -109,6 +109,15 @@ void qemu_clipboard_peer_register(QemuClipboardPeer *peer);
  */
  */
 void qemu_clipboard_peer_unregister(QemuClipboardPeer *peer);
 void qemu_clipboard_peer_unregister(QemuClipboardPeer *peer);
 
 
+/**
+ * qemu_clipboard_info
+ *
+ * @selection: clipboard selection.
+ *
+ * Return the current clipboard data & owner informations.
+ */
+QemuClipboardInfo *qemu_clipboard_info(QemuClipboardSelection selection);
+
 /**
 /**
  * qemu_clipboard_info_new
  * qemu_clipboard_info_new
  *
  *

+ 15 - 0
ui/clipboard.c

@@ -4,6 +4,8 @@
 static NotifierList clipboard_notifiers =
 static NotifierList clipboard_notifiers =
     NOTIFIER_LIST_INITIALIZER(clipboard_notifiers);
     NOTIFIER_LIST_INITIALIZER(clipboard_notifiers);
 
 
+static QemuClipboardInfo *cbinfo[QEMU_CLIPBOARD_SELECTION__COUNT];
+
 void qemu_clipboard_peer_register(QemuClipboardPeer *peer)
 void qemu_clipboard_peer_register(QemuClipboardPeer *peer)
 {
 {
     notifier_list_add(&clipboard_notifiers, &peer->update);
     notifier_list_add(&clipboard_notifiers, &peer->update);
@@ -16,7 +18,20 @@ void qemu_clipboard_peer_unregister(QemuClipboardPeer *peer)
 
 
 void qemu_clipboard_update(QemuClipboardInfo *info)
 void qemu_clipboard_update(QemuClipboardInfo *info)
 {
 {
+    g_autoptr(QemuClipboardInfo) old = NULL;
+    assert(info->selection < QEMU_CLIPBOARD_SELECTION__COUNT);
+
     notifier_list_notify(&clipboard_notifiers, info);
     notifier_list_notify(&clipboard_notifiers, info);
+
+    old = cbinfo[info->selection];
+    cbinfo[info->selection] = qemu_clipboard_info_ref(info);
+}
+
+QemuClipboardInfo *qemu_clipboard_info(QemuClipboardSelection selection)
+{
+    assert(selection < QEMU_CLIPBOARD_SELECTION__COUNT);
+
+    return cbinfo[selection];
 }
 }
 
 
 QemuClipboardInfo *qemu_clipboard_info_new(QemuClipboardPeer *owner,
 QemuClipboardInfo *qemu_clipboard_info_new(QemuClipboardPeer *owner,