dbus_clipboard_unregister_proxy(DBusDisplay *dpy)
{
const char *name = NULL;
+ GDBusConnection *connection = NULL;
int i;
for (i = 0; i < G_N_ELEMENTS(dpy->clipboard_request); ++i) {
return;
}
+ connection = g_dbus_proxy_get_connection(
+ G_DBUS_PROXY(dpy->clipboard_proxy));
+ if (connection) {
+ g_signal_handlers_disconnect_by_data(connection, dpy);
+ }
+ g_signal_handlers_disconnect_by_data(dpy->clipboard_proxy, dpy);
+
name = g_dbus_proxy_get_name(G_DBUS_PROXY(dpy->clipboard_proxy));
trace_dbus_clipboard_unregister(name);
g_clear_object(&dpy->clipboard_proxy);
return DBUS_METHOD_INVOCATION_HANDLED;
}
+void
+dbus_clipboard_fini(DBusDisplay *dpy)
+{
+ dbus_clipboard_unregister_proxy(dpy);
+ qemu_clipboard_peer_unregister(&dpy->clipboard_peer);
+ g_clear_object(&dpy->clipboard);
+}
+
void
dbus_clipboard_init(DBusDisplay *dpy)
{
dbus_display_notifier_remove(&dd->notifier);
}
- qemu_clipboard_peer_unregister(&dd->clipboard_peer);
- g_clear_object(&dd->clipboard);
+ dbus_clipboard_fini(dd);
g_clear_object(&dd->server);
g_clear_pointer(&dd->consoles, g_ptr_array_unref);
void dbus_chardev_init(DBusDisplay *dpy);
void dbus_clipboard_init(DBusDisplay *dpy);
+void dbus_clipboard_fini(DBusDisplay *dpy);
#endif /* UI_DBUS_H */