summaryrefslogtreecommitdiffstats
path: root/src/virt-viewer.c
diff options
context:
space:
mode:
authorPavel Grunt <pgrunt@redhat.com>2015-03-18 17:49:38 +0100
committerFabiano FidĂȘncio <fidencio@redhat.com>2015-03-23 19:32:02 +0100
commit1bcd8d0fe6df553f087d11b539a59e128a2a350b (patch)
tree6198cf3b2846ce059fd6a0e5a6434894e8d7a544 /src/virt-viewer.c
parentaec2248cf86cacfc8950f48ccf0fc8fcaa261908 (diff)
downloadvirt-viewer-1bcd8d0fe6df553f087d11b539a59e128a2a350b.tar.gz
virt-viewer-1bcd8d0fe6df553f087d11b539a59e128a2a350b.tar.xz
virt-viewer-1bcd8d0fe6df553f087d11b539a59e128a2a350b.zip
Exit normally when canceling dialog
This applies for: libvirt authentication dialog (e.g. virt-viewer --attach guest) 'recent connection' dialog (e.g. remote-viewer) 'vm choose' dialog when connecting without specifying the vm name This is done by using a new GError VIRT_VIEWER_ERROR_CANCELLED.
Diffstat (limited to 'src/virt-viewer.c')
-rw-r--r--src/virt-viewer.c48
1 files changed, 28 insertions, 20 deletions
diff --git a/src/virt-viewer.c b/src/virt-viewer.c
index 4919a06..371bf4a 100644
--- a/src/virt-viewer.c
+++ b/src/virt-viewer.c
@@ -69,7 +69,7 @@ G_DEFINE_TYPE (VirtViewer, virt_viewer, VIRT_VIEWER_TYPE_APP)
static gboolean virt_viewer_initial_connect(VirtViewerApp *self, GError **error);
static gboolean virt_viewer_open_connection(VirtViewerApp *self, int *fd);
static void virt_viewer_deactivated(VirtViewerApp *self, gboolean connect_error);
-static gboolean virt_viewer_start(VirtViewerApp *self);
+static gboolean virt_viewer_start(VirtViewerApp *self, GError **error);
static void virt_viewer_dispose (GObject *object);
static void
@@ -697,7 +697,7 @@ choose_vm(GtkWindow *main_window,
return dom;
}
-static int virt_viewer_connect(VirtViewerApp *app);
+static int virt_viewer_connect(VirtViewerApp *app, GError **error);
static gboolean
virt_viewer_initial_connect(VirtViewerApp *app, GError **error)
@@ -713,7 +713,7 @@ virt_viewer_initial_connect(VirtViewerApp *app, GError **error)
g_debug("initial connect");
if (!priv->conn &&
- virt_viewer_connect(app) < 0) {
+ virt_viewer_connect(app, &err) < 0) {
virt_viewer_app_show_status(app, _("Waiting for libvirt to start"));
goto wait;
}
@@ -879,7 +879,7 @@ virt_viewer_get_error_message_from_vir_error(VirtViewer *self,
}
static int
-virt_viewer_connect(VirtViewerApp *app)
+virt_viewer_connect(VirtViewerApp *app, GError **err)
{
VirtViewer *self = VIRT_VIEWER(app);
VirtViewerPrivate *priv = self->priv;
@@ -908,28 +908,36 @@ virt_viewer_connect(VirtViewerApp *app)
if (!priv->conn) {
if (!priv->auth_cancelled) {
gchar *error_message = virt_viewer_get_error_message_from_vir_error(self, virGetLastError());
-
+ g_set_error_literal(&error,
+ VIRT_VIEWER_ERROR, VIRT_VIEWER_ERROR_FAILED,
+ error_message);
virt_viewer_app_simple_message_dialog(app, error_message);
g_free(error_message);
+ } else {
+ g_set_error_literal(&error,
+ VIRT_VIEWER_ERROR, VIRT_VIEWER_ERROR_CANCELLED,
+ _("Authentication was cancelled"));
}
-
+ g_propagate_error(err, error);
return -1;
}
if (!virt_viewer_app_initial_connect(app, &error)) {
if (error != NULL) {
- VirtViewerWindow *main_window = virt_viewer_app_get_main_window(app);
-
- GtkWidget *dialog = gtk_message_dialog_new(virt_viewer_window_get_window(main_window),
- GTK_DIALOG_DESTROY_WITH_PARENT,
- GTK_MESSAGE_ERROR,
- GTK_BUTTONS_CLOSE,
- "Failed to connect: %s",
- error->message);
- gtk_dialog_run(GTK_DIALOG(dialog));
- gtk_widget_destroy(GTK_WIDGET(dialog));
- g_clear_error(&error);
+ if (!g_error_matches(error, VIRT_VIEWER_ERROR, VIRT_VIEWER_ERROR_CANCELLED)) {
+ VirtViewerWindow *main_window = virt_viewer_app_get_main_window(app);
+
+ GtkWidget *dialog = gtk_message_dialog_new(virt_viewer_window_get_window(main_window),
+ GTK_DIALOG_DESTROY_WITH_PARENT,
+ GTK_MESSAGE_ERROR,
+ GTK_BUTTONS_CLOSE,
+ "Failed to connect: %s",
+ error->message);
+ gtk_dialog_run(GTK_DIALOG(dialog));
+ gtk_widget_destroy(GTK_WIDGET(dialog));
+ }
+ g_propagate_error(err, error);
}
return -1;
}
@@ -957,16 +965,16 @@ virt_viewer_connect(VirtViewerApp *app)
}
static gboolean
-virt_viewer_start(VirtViewerApp *app)
+virt_viewer_start(VirtViewerApp *app, GError **error)
{
virt_viewer_events_register();
virSetErrorFunc(NULL, virt_viewer_error_func);
- if (virt_viewer_connect(app) < 0)
+ if (virt_viewer_connect(app, error) < 0)
return FALSE;
- return VIRT_VIEWER_APP_CLASS(virt_viewer_parent_class)->start(app);
+ return VIRT_VIEWER_APP_CLASS(virt_viewer_parent_class)->start(app, error);
}
VirtViewer *