Use virt_viewer_connect_object() for display

When display is released, detach signal automatically.

Fix various crash related to not cleaning up signal handlers properly,
due to no longer 1-1 only relation between display widget and channel.
This commit is contained in:
Marc-André Lureau 2012-07-09 00:55:37 +02:00
parent cab1ab0e57
commit 0897382b45
2 changed files with 14 additions and 14 deletions

View File

@ -660,8 +660,8 @@ virt_viewer_app_display_added(VirtViewerSession *session G_GNUC_UNUSED,
virt_viewer_window_set_display(window, display);
virt_viewer_app_update_menu_displays(self);
g_signal_connect(display, "notify::show-hint",
G_CALLBACK(display_show_hint), window);
virt_viewer_signal_connect_object(display, "notify::show-hint",
G_CALLBACK(display_show_hint), window, 0);
g_object_notify(G_OBJECT(display), "show-hint"); /* call display_show_hint */
}

View File

@ -1042,18 +1042,18 @@ virt_viewer_window_set_display(VirtViewerWindow *self, VirtViewerDisplay *displa
gtk_notebook_append_page(GTK_NOTEBOOK(priv->notebook), GTK_WIDGET(display), NULL);
gtk_widget_show_all(GTK_WIDGET(display));
g_signal_connect(display, "display-pointer-grab",
G_CALLBACK(virt_viewer_window_pointer_grab), self);
g_signal_connect(display, "display-pointer-ungrab",
G_CALLBACK(virt_viewer_window_pointer_ungrab), self);
g_signal_connect(display, "display-keyboard-grab",
G_CALLBACK(virt_viewer_window_keyboard_grab), self);
g_signal_connect(display, "display-keyboard-ungrab",
G_CALLBACK(virt_viewer_window_keyboard_ungrab), self);
g_signal_connect(display, "display-desktop-resize",
G_CALLBACK(virt_viewer_window_desktop_resize), self);
g_signal_connect(display, "notify::show-hint",
G_CALLBACK(display_show_hint), self);
virt_viewer_signal_connect_object(display, "display-pointer-grab",
G_CALLBACK(virt_viewer_window_pointer_grab), self, 0);
virt_viewer_signal_connect_object(display, "display-pointer-ungrab",
G_CALLBACK(virt_viewer_window_pointer_ungrab), self, 0);
virt_viewer_signal_connect_object(display, "display-keyboard-grab",
G_CALLBACK(virt_viewer_window_keyboard_grab), self, 0);
virt_viewer_signal_connect_object(display, "display-keyboard-ungrab",
G_CALLBACK(virt_viewer_window_keyboard_ungrab), self, 0);
virt_viewer_signal_connect_object(display, "display-desktop-resize",
G_CALLBACK(virt_viewer_window_desktop_resize), self, 0);
virt_viewer_signal_connect_object(display, "notify::show-hint",
G_CALLBACK(display_show_hint), self, 0);
}
}