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. --- src/virt-viewer-app.c | 4 ++-- src/virt-viewer-window.c | 24 ++++++++++++------------ 2 files changed, 14 insertions(+), 14 deletions(-) diff --git a/src/virt-viewer-app.c b/src/virt-viewer-app.c index c4f712d..3057116 100644 --- a/src/virt-viewer-app.c +++ b/src/virt-viewer-app.c @@ -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 */ } diff --git a/src/virt-viewer-window.c b/src/virt-viewer-window.c index 4887e28..3f7cbbe 100644 --- a/src/virt-viewer-window.c +++ b/src/virt-viewer-window.c @@ -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); } } -- 1.7.10.4