summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDaniel P. Berrange <berrange@redhat.com>2010-01-12 16:50:18 +0000
committerDaniel P. Berrange <berrange@redhat.com>2010-01-12 16:50:18 +0000
commitfbdb72bb1371b478be6d34f727db3a34b665b76d (patch)
treed8b36ae1e04bdafcc6750aabfb63d6e5735a1dac
parenta16f4d576729fa2cb3d2ebaaac8d54b2bc6a069f (diff)
downloadvirt-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.c90
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;
}