static void channel_destroy(SpiceSession *s, SpiceChannel *channel, gpointer data) { SpiceDisplay *display = data; SpiceDisplayPrivate *d = SPICE_DISPLAY_GET_PRIVATE(display); int id; g_object_get(channel, "channel-id", &id, NULL); SPICE_DEBUG("channel_destroy %d", id); if (SPICE_IS_MAIN_CHANNEL(channel)) { disconnect_main(display); return; } if (SPICE_IS_DISPLAY_CHANNEL(channel)) { if (id != d->channel_id) return; disconnect_display(display); return; } if (SPICE_IS_CURSOR_CHANNEL(channel)) { if (id != d->channel_id) return; disconnect_cursor(display); return; } if (SPICE_IS_INPUTS_CHANNEL(channel)) { d->inputs = NULL; return; } }
static void spice_display_dispose(GObject *obj) { SpiceDisplay *display = SPICE_DISPLAY(obj); SpiceDisplayPrivate *d = SPICE_DISPLAY_GET_PRIVATE(display); SPICE_DEBUG("spice display dispose"); disconnect_main(display); disconnect_display(display); //disconnect_cursor(display); //if (d->clipboard) { // g_signal_handlers_disconnect_by_func(d->clipboard, G_CALLBACK(clipboard_owner_change), // display); // d->clipboard = NULL; //} //if (d->clipboard_primary) { // g_signal_handlers_disconnect_by_func(d->clipboard_primary, G_CALLBACK(clipboard_owner_change), // display); // d->clipboard_primary = NULL; //} if (d->session) { g_signal_handlers_disconnect_by_func(d->session, G_CALLBACK(channel_new), display); g_signal_handlers_disconnect_by_func(d->session, G_CALLBACK(channel_destroy), display); g_object_unref(d->session); d->session = NULL; } }
static void spice_display_dispose(GObject *obj) { SpiceDisplay *display = SPICE_DISPLAY(obj); SpiceDisplayPrivate *d = SPICE_DISPLAY_GET_PRIVATE(display); SPICE_DEBUG("spice display dispose"); disconnect_main(display); disconnect_display(display); disconnect_cursor(display); if (d->session) { g_signal_handlers_disconnect_by_func(d->session, G_CALLBACK(channel_new), display); g_signal_handlers_disconnect_by_func(d->session, G_CALLBACK(channel_destroy), display); g_object_unref(d->session); d->session = NULL; } G_OBJECT_CLASS(spice_display_parent_class)->dispose(obj); }