aboutsummaryrefslogtreecommitdiff
path: root/ui/vnc-clipboard.c
diff options
context:
space:
mode:
authorMarc-André Lureau <marcandre.lureau@redhat.com>2021-07-19 19:42:15 +0400
committerMarc-André Lureau <marcandre.lureau@redhat.com>2021-12-21 10:50:21 +0400
commit1b17f1e9f962f5ae9cd559d7f23718ceed71b813 (patch)
treeee3a19c25c8d55254cc6ff77c01931680f6c283c /ui/vnc-clipboard.c
parent59127452883afe3d603e90824bb33ac57b4dbee1 (diff)
ui: generalize clipboard notifier
Use a QemuClipboardNotify union type for extendable clipboard events. Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com> Acked-by: Gerd Hoffmann <kraxel@redhat.com>
Diffstat (limited to 'ui/vnc-clipboard.c')
-rw-r--r--ui/vnc-clipboard.c20
1 files changed, 15 insertions, 5 deletions
diff --git a/ui/vnc-clipboard.c b/ui/vnc-clipboard.c
index 67284b556c..6a0b105884 100644
--- a/ui/vnc-clipboard.c
+++ b/ui/vnc-clipboard.c
@@ -189,10 +189,8 @@ static void vnc_clipboard_provide(VncState *vs,
vnc_flush(vs);
}
-static void vnc_clipboard_notify(Notifier *notifier, void *data)
+static void vnc_clipboard_update_info(VncState *vs, QemuClipboardInfo *info)
{
- VncState *vs = container_of(notifier, VncState, cbpeer.update);
- QemuClipboardInfo *info = data;
QemuClipboardType type;
bool self_update = info->owner == &vs->cbpeer;
uint32_t flags = 0;
@@ -223,6 +221,18 @@ static void vnc_clipboard_notify(Notifier *notifier, void *data)
}
}
+static void vnc_clipboard_notify(Notifier *notifier, void *data)
+{
+ VncState *vs = container_of(notifier, VncState, cbpeer.notifier);
+ QemuClipboardNotify *notify = data;
+
+ switch (notify->type) {
+ case QEMU_CLIPBOARD_UPDATE_INFO:
+ vnc_clipboard_update_info(vs, notify->info);
+ return;
+ }
+}
+
static void vnc_clipboard_request(QemuClipboardInfo *info,
QemuClipboardType type)
{
@@ -316,9 +326,9 @@ void vnc_server_cut_text_caps(VncState *vs)
caps[1] = 0;
vnc_clipboard_send(vs, 2, caps);
- if (!vs->cbpeer.update.notify) {
+ if (!vs->cbpeer.notifier.notify) {
vs->cbpeer.name = "vnc";
- vs->cbpeer.update.notify = vnc_clipboard_notify;
+ vs->cbpeer.notifier.notify = vnc_clipboard_notify;
vs->cbpeer.request = vnc_clipboard_request;
qemu_clipboard_peer_register(&vs->cbpeer);
}