* enum QemuClipboardNotifyType
*
* @QEMU_CLIPBOARD_UPDATE_INFO: clipboard info update
+ * @QEMU_CLIPBOARD_RESET_SERIAL: reset clipboard serial
*
* Clipboard notify type.
*/
enum QemuClipboardNotifyType {
QEMU_CLIPBOARD_UPDATE_INFO,
+ QEMU_CLIPBOARD_RESET_SERIAL,
};
/**
*/
void qemu_clipboard_update(QemuClipboardInfo *info);
+/**
+ * qemu_clipboard_reset_serial
+ *
+ * Reset the clipboard serial.
+ */
+void qemu_clipboard_reset_serial(void);
+
/**
* qemu_clipboard_request
*
info->owner->request(info, type);
}
+void qemu_clipboard_reset_serial(void)
+{
+ QemuClipboardNotify notify = { .type = QEMU_CLIPBOARD_RESET_SERIAL };
+
+ notifier_list_notify(&clipboard_notifiers, ¬ify);
+}
+
void qemu_clipboard_set_data(QemuClipboardPeer *peer,
QemuClipboardInfo *info,
QemuClipboardType type,
case QEMU_CLIPBOARD_UPDATE_INFO:
cocoa_clipboard_update_info(notify->info);
return;
+ case QEMU_CLIPBOARD_RESET_SERIAL:
+ /* ignore */
+ return;
}
}
case QEMU_CLIPBOARD_UPDATE_INFO:
gd_clipboard_update_info(gd, notify->info);
return;
+ case QEMU_CLIPBOARD_RESET_SERIAL:
+ /* ignore */
+ return;
}
}
}
}
+static void vdagent_clipboard_reset_serial(VDAgentChardev *vd)
+{
+ Chardev *chr = CHARDEV(vd);
+
+ /* reopen the agent connection to reset the serial state */
+ qemu_chr_be_event(chr, CHR_EVENT_CLOSED);
+ qemu_chr_be_event(chr, CHR_EVENT_OPENED);
+}
+
static void vdagent_clipboard_notify(Notifier *notifier, void *data)
{
VDAgentChardev *vd =
case QEMU_CLIPBOARD_UPDATE_INFO:
vdagent_clipboard_update_info(vd, notify->info);
return;
+ case QEMU_CLIPBOARD_RESET_SERIAL:
+ vdagent_clipboard_reset_serial(vd);
+ return;
}
}
case QEMU_CLIPBOARD_UPDATE_INFO:
vnc_clipboard_update_info(vs, notify->info);
return;
+ case QEMU_CLIPBOARD_RESET_SERIAL:
+ /* ignore */
+ return;
}
}