diff options
author | Daniel P. Berrange <berrange@redhat.com> | 2010-01-12 16:50:18 +0000 |
---|---|---|
committer | Daniel P. Berrange <berrange@redhat.com> | 2010-01-12 16:50:18 +0000 |
commit | fbdb72bb1371b478be6d34f727db3a34b665b76d (patch) | |
tree | d8b36ae1e04bdafcc6750aabfb63d6e5735a1dac | |
parent | a16f4d576729fa2cb3d2ebaaac8d54b2bc6a069f (diff) | |
download | virt-viewer-fbdb72bb1371b478be6d34f727db3a34b665b76d.tar.gz virt-viewer-fbdb72bb1371b478be6d34f727db3a34b665b76d.tar.xz virt-viewer-fbdb72bb1371b478be6d34f727db3a34b665b76d.zip |
Add message dialog displays for important error scenarios
-rw-r--r-- | src/viewer.c | 90 |
1 files changed, 61 insertions, 29 deletions
diff --git a/src/viewer.c b/src/viewer.c index 2340675..30f0191 100644 --- a/src/viewer.c +++ b/src/viewer.c @@ -114,7 +114,7 @@ typedef struct VirtViewer { gboolean fullscreen; gboolean withEvents; - int active; + gboolean active; char *vncAddress; gboolean accelEnabled; @@ -122,11 +122,12 @@ typedef struct VirtViewer { GSList *accelList; int accelMenuSig[LAST_MENU]; - int waitvm; - int reconnect; - int direct; - int verbose; - int authretry; + gboolean waitvm; + gboolean reconnect; + gboolean direct; + gboolean verbose; + gboolean authretry; + gboolean connected; gchar *clipboard; } VirtViewer; @@ -142,6 +143,34 @@ static gboolean viewer_connect_timer(void *opaque); static int viewer_initial_connect(VirtViewer *viewer); +static void viewer_simple_message_dialog(GtkWidget *window, const char *fmt, ...) +{ + GtkWidget *dialog; + char *msg; + va_list vargs; + + va_start(vargs, fmt); + + msg = g_strdup_vprintf(fmt, vargs); + + va_end(vargs); + + dialog = gtk_message_dialog_new(GTK_WINDOW(window), + GTK_DIALOG_MODAL | + GTK_DIALOG_DESTROY_WITH_PARENT, + GTK_MESSAGE_ERROR, + GTK_BUTTONS_OK, + "%s", + msg); + + gtk_dialog_run(GTK_DIALOG(dialog)); + + gtk_widget_destroy(dialog); + + g_free(msg); +} + + /* Now that the size is set to our preferred sizing, this * triggers another resize calculation but without our * scrolled window callback active. This is the key that @@ -845,11 +874,17 @@ static int viewer_activate(VirtViewer *viewer, if (viewer->active) goto cleanup; - if ((vncport = viewer_extract_vnc_port(dom)) == NULL) + if ((vncport = viewer_extract_vnc_port(dom)) == NULL) { + viewer_simple_message_dialog(viewer->window, _("Cannot determine the VNC port for the guest %s"), + viewer->domkey); goto cleanup; + } - if (viewer_extract_host(viewer->uri, &host, &transport, &user, &port) < 0) + if (viewer_extract_host(viewer->uri, &host, &transport, &user, &port) < 0) { + viewer_simple_message_dialog(viewer->window, _("Cannot determine the VNC host for the guest %s"), + viewer->domkey); goto cleanup; + } DEBUG_LOG("Remote host is %s and transport %s user %s", host, transport ? transport : "", user ? user : ""); @@ -874,7 +909,8 @@ static int viewer_activate(VirtViewer *viewer, free(viewer->domtitle); viewer->domtitle = g_strdup(virDomainGetName(dom)); - viewer->active = 1; + viewer->connected = FALSE; + viewer->active = TRUE; viewer_set_title(viewer, FALSE); ret = 0; @@ -905,7 +941,8 @@ static void viewer_deactivate(VirtViewer *viewer) free(viewer->domtitle); viewer->domtitle = NULL; - viewer->active = 0; + viewer->connected = FALSE; + viewer->active = FALSE; g_free(viewer->vncAddress); viewer->vncAddress = NULL; viewer_set_title(viewer, FALSE); @@ -930,6 +967,7 @@ static void viewer_deactivate(VirtViewer *viewer) static void viewer_connected(GtkWidget *vnc G_GNUC_UNUSED, VirtViewer *viewer) { + viewer->connected = TRUE; viewer_set_status(viewer, "Connected to VNC server"); } @@ -942,6 +980,10 @@ static void viewer_initialized(GtkWidget *vnc G_GNUC_UNUSED, VirtViewer *viewer) static void viewer_disconnected(GtkWidget *vnc G_GNUC_UNUSED, VirtViewer *viewer) { + if (!viewer->connected) { + viewer_simple_message_dialog(viewer->window, _("Unable to connect to the VNC server %s"), + viewer->vncAddress); + } viewer_deactivate(viewer); } @@ -951,8 +993,6 @@ static void viewer_vnc_auth_failure(GtkWidget *vnc G_GNUC_UNUSED, const char *re GtkWidget *dialog; int ret; - fprintf(stderr, "Now %s\n", reason); - dialog = gtk_message_dialog_new(GTK_WINDOW(viewer->window), GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT, @@ -975,20 +1015,10 @@ static void viewer_vnc_auth_failure(GtkWidget *vnc G_GNUC_UNUSED, const char *re static void viewer_vnc_auth_unsupported(GtkWidget *vnc G_GNUC_UNUSED, unsigned int authType, VirtViewer *viewer) { - GtkWidget *dialog; - - dialog = gtk_message_dialog_new(GTK_WINDOW(viewer->window), - GTK_DIALOG_MODAL | - GTK_DIALOG_DESTROY_WITH_PARENT, - GTK_MESSAGE_ERROR, - GTK_BUTTONS_OK, - _("Unable to authenticate with VNC server at %s\n" - "Unsupported authentication type %d"), - viewer->vncAddress, authType); - - gtk_dialog_run(GTK_DIALOG(dialog)); - - gtk_widget_destroy(dialog); + viewer_simple_message_dialog(viewer->window, + _("Unable to authenticate with VNC server at %s\n" + "Unsupported authentication type %d"), + viewer->vncAddress, authType); } @@ -1078,7 +1108,9 @@ static int viewer_initial_connect(VirtViewer *viewer) viewer_set_status(viewer, "Waiting for guest domain to be created"); goto done; } else { - DEBUG_LOG("Cannot find guest"); + viewer_simple_message_dialog(viewer->window, _("Cannot find guest domain %s"), + viewer->domkey); + DEBUG_LOG("Cannot find guest %s", viewer->domkey); goto cleanup; } } @@ -1178,8 +1210,8 @@ viewer_start (const char *uri, &auth_libvirt, VIR_CONNECT_RO); if (!viewer->conn) { - fprintf(stderr, "unable to connect to libvirt %s\n", - uri ? uri : "xen"); + viewer_simple_message_dialog(NULL, _("Unable to connect to libvirt with URI %s"), + uri ? uri : _("[none]")); return -1; } |