summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorChristophe Fergeau <cfergeau@redhat.com>2013-04-25 21:54:24 +0200
committerMarc-André Lureau <marcandre.lureau@gmail.com>2013-04-25 22:16:04 +0200
commit20eb200ca50a3e9f00afd7a02bb5b81119fee5dd (patch)
treef639aa9eae35eefef9768be48ee09b5808e82112 /src
parent284aecf0ce80c9784962d49d28e98dfb4705de34 (diff)
Exit virt-viewer when trying to close any window
Currently, in multi-screen scenarios, when closing one remote-viewer window, the corresponding screen gets disabled in the guest OS. This can be confusing as this behaves very differently from File/Quit. This commit will exit the whole application when the user tries to close one of virt-viewer window.
Diffstat (limited to 'src')
-rw-r--r--src/virt-viewer-app.c89
-rw-r--r--src/virt-viewer-app.h1
-rw-r--r--src/virt-viewer-window.c2
3 files changed, 49 insertions, 43 deletions
diff --git a/src/virt-viewer-app.c b/src/virt-viewer-app.c
index 0519006..853615e 100644
--- a/src/virt-viewer-app.c
+++ b/src/virt-viewer-app.c
@@ -260,6 +260,52 @@ virt_viewer_app_quit(VirtViewerApp *self)
gtk_main_quit();
}
+void
+virt_viewer_app_maybe_quit(VirtViewerApp *self, VirtViewerWindow *window)
+{
+ GError *error = NULL;
+
+ gboolean ask = g_key_file_get_boolean(self->priv->config,
+ "virt-viewer", "ask-quit", &error);
+ if (error) {
+ ask = TRUE;
+ g_clear_error(&error);
+ }
+
+ if (ask) {
+ GtkWidget *dialog =
+ gtk_message_dialog_new (virt_viewer_window_get_window(window),
+ GTK_DIALOG_DESTROY_WITH_PARENT,
+ GTK_MESSAGE_QUESTION,
+ GTK_BUTTONS_OK_CANCEL,
+ _("Do you want to close the session?"));
+
+ GtkWidget *check = gtk_check_button_new_with_label(_("Do not ask me again"));
+ gtk_container_add(GTK_CONTAINER(gtk_dialog_get_content_area(GTK_DIALOG(dialog))), check);
+ gtk_widget_show(check);
+
+ gint result = gtk_dialog_run(GTK_DIALOG(dialog));
+
+ gboolean dont_ask = FALSE;
+ g_object_get(check, "active", &dont_ask, NULL);
+ if (dont_ask)
+ g_key_file_set_boolean(self->priv->config,
+ "virt-viewer", "ask-quit", FALSE);
+
+ gtk_widget_destroy(dialog);
+ switch (result) {
+ case GTK_RESPONSE_OK:
+ virt_viewer_app_quit(self);
+ break;
+ default:
+ break;
+ }
+ } else {
+ virt_viewer_app_quit(self);
+ }
+
+}
+
static void count_window_visible(gpointer key G_GNUC_UNUSED,
gpointer value,
gpointer user_data)
@@ -284,8 +330,6 @@ virt_viewer_app_window_set_visible(VirtViewerApp *self,
VirtViewerWindow *window,
gboolean visible)
{
- GError *error = NULL;
-
g_return_val_if_fail(VIRT_VIEWER_IS_APP(self), FALSE);
g_return_val_if_fail(VIRT_VIEWER_IS_WINDOW(window), FALSE);
@@ -298,46 +342,7 @@ virt_viewer_app_window_set_visible(VirtViewerApp *self,
return FALSE;
}
- gboolean ask = g_key_file_get_boolean(self->priv->config,
- "virt-viewer", "ask-quit", &error);
- if (error) {
- ask = TRUE;
- g_clear_error(&error);
- }
-
- if (ask) {
- GtkWidget *dialog =
- gtk_message_dialog_new (virt_viewer_window_get_window(window),
- GTK_DIALOG_DESTROY_WITH_PARENT,
- GTK_MESSAGE_QUESTION,
- GTK_BUTTONS_OK_CANCEL,
- _("Do you want to close the session?"));
-
- GtkWidget *check = gtk_check_button_new_with_label(_("Do not ask me again"));
- gtk_container_add(GTK_CONTAINER(gtk_dialog_get_content_area(GTK_DIALOG(dialog))), check);
- gtk_widget_show(check);
-
- gint result = gtk_dialog_run(GTK_DIALOG(dialog));
-
- gboolean dont_ask = FALSE;
- g_object_get(check, "active", &dont_ask, NULL);
- if (dont_ask)
- g_key_file_set_boolean(self->priv->config,
- "virt-viewer", "ask-quit", FALSE);
-
- gtk_widget_destroy(dialog);
- switch (result) {
- case GTK_RESPONSE_OK:
- virt_viewer_app_quit(self);
- break;
- default:
- break;
- }
- return FALSE;
- } else {
- virt_viewer_app_quit(self);
- return FALSE;
- }
+ virt_viewer_app_maybe_quit(self, window);
}
g_warn_if_reached();
diff --git a/src/virt-viewer-app.h b/src/virt-viewer-app.h
index b2ef7e1..32bc7fb 100644
--- a/src/virt-viewer-app.h
+++ b/src/virt-viewer-app.h
@@ -65,6 +65,7 @@ void virt_viewer_app_set_title(VirtViewerApp *app, const char *title);
void virt_viewer_app_set_debug(gboolean debug);
gboolean virt_viewer_app_start(VirtViewerApp *app);
void virt_viewer_app_quit(VirtViewerApp *self);
+void virt_viewer_app_maybe_quit(VirtViewerApp *self, VirtViewerWindow *window);
VirtViewerWindow* virt_viewer_app_get_main_window(VirtViewerApp *self);
void virt_viewer_app_trace(VirtViewerApp *self, const char *fmt, ...);
void virt_viewer_app_simple_message_dialog(VirtViewerApp *self, const char *fmt, ...);
diff --git a/src/virt-viewer-window.c b/src/virt-viewer-window.c
index 67333f2..078c437 100644
--- a/src/virt-viewer-window.c
+++ b/src/virt-viewer-window.c
@@ -701,7 +701,7 @@ virt_viewer_window_delete(GtkWidget *src G_GNUC_UNUSED,
VirtViewerWindow *self)
{
DEBUG_LOG("Window closed");
- virt_viewer_app_window_set_visible(self->priv->app, self, FALSE);
+ virt_viewer_app_maybe_quit(self->priv->app, self);
return TRUE;
}