diff options
author | Gerd Hoffmann <kraxel@redhat.com> | 2021-05-19 07:39:33 +0200 |
---|---|---|
committer | Gerd Hoffmann <kraxel@redhat.com> | 2021-05-21 09:42:44 +0200 |
commit | 660e8d0f0be4e87da937ce797973874bb282d498 (patch) | |
tree | a05534919b34e871236c328154f8f1c5516e9f20 /include/ui | |
parent | 58d3f3ff8da8d1f0ea917c661f306c42d0a69e7b (diff) |
ui: add clipboard infrastructure
Add some infrastructure to manage the clipboard in qemu.
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Message-id: 20210519053940.1888907-1-kraxel@redhat.com
Message-Id: <20210519053940.1888907-3-kraxel@redhat.com>
Diffstat (limited to 'include/ui')
-rw-r--r-- | include/ui/clipboard.h | 62 |
1 files changed, 62 insertions, 0 deletions
diff --git a/include/ui/clipboard.h b/include/ui/clipboard.h new file mode 100644 index 0000000000..876de76219 --- /dev/null +++ b/include/ui/clipboard.h @@ -0,0 +1,62 @@ +#ifndef QEMU_CLIPBOARD_H +#define QEMU_CLIPBOARD_H + +#include "qemu/notify.h" + +typedef enum QemuClipboardType QemuClipboardType; +typedef enum QemuClipboardSelection QemuClipboardSelection; +typedef struct QemuClipboardPeer QemuClipboardPeer; +typedef struct QemuClipboardInfo QemuClipboardInfo; + +enum QemuClipboardType { + QEMU_CLIPBOARD_TYPE_TEXT, /* text/plain; charset=utf-8 */ + QEMU_CLIPBOARD_TYPE__COUNT, +}; + +/* same as VD_AGENT_CLIPBOARD_SELECTION_* */ +enum QemuClipboardSelection { + QEMU_CLIPBOARD_SELECTION_CLIPBOARD, + QEMU_CLIPBOARD_SELECTION_PRIMARY, + QEMU_CLIPBOARD_SELECTION_SECONDARY, + QEMU_CLIPBOARD_SELECTION__COUNT, +}; + +struct QemuClipboardPeer { + const char *name; + Notifier update; + void (*request)(QemuClipboardInfo *info, + QemuClipboardType type); +}; + +struct QemuClipboardInfo { + uint32_t refcount; + QemuClipboardPeer *owner; + QemuClipboardSelection selection; + struct { + bool available; + bool requested; + size_t size; + void *data; + } types[QEMU_CLIPBOARD_TYPE__COUNT]; +}; + +void qemu_clipboard_peer_register(QemuClipboardPeer *peer); +void qemu_clipboard_peer_unregister(QemuClipboardPeer *peer); + +QemuClipboardInfo *qemu_clipboard_info_new(QemuClipboardPeer *owner, + QemuClipboardSelection selection); +QemuClipboardInfo *qemu_clipboard_info_ref(QemuClipboardInfo *info); +void qemu_clipboard_info_unref(QemuClipboardInfo *info); + +void qemu_clipboard_update(QemuClipboardInfo *info); +void qemu_clipboard_request(QemuClipboardInfo *info, + QemuClipboardType type); + +void qemu_clipboard_set_data(QemuClipboardPeer *peer, + QemuClipboardInfo *info, + QemuClipboardType type, + uint32_t size, + void *data, + bool update); + +#endif /* QEMU_CLIPBOARD_H */ |