Show connect dialog again if connection from dialog failed

https://bugzilla.redhat.com/show_bug.cgi?id=864026
This commit is contained in:
Marc-André Lureau 2013-05-17 14:13:37 +02:00
parent 6ed73f150c
commit 240baeeb44
4 changed files with 39 additions and 19 deletions

View File

@ -77,6 +77,7 @@ static gboolean remote_viewer_start(VirtViewerApp *self);
static gboolean remote_viewer_activate(VirtViewerApp *self, GError **error);
static void remote_viewer_window_added(VirtViewerApp *self, VirtViewerWindow *win);
static void spice_foreign_menu_updated(RemoteViewer *self);
static gint connect_dialog(gchar **uri);
static void
remote_viewer_get_property (GObject *object, guint property_id,
@ -144,6 +145,20 @@ remote_viewer_dispose (GObject *object)
}
#endif
static void
remote_viewer_deactivated(VirtViewerApp *app, gboolean connect_error)
{
RemoteViewer *self = REMOTE_VIEWER(app);
RemoteViewerPrivate *priv = self->priv;
if (connect_error && priv->open_recent_dialog) {
virt_viewer_app_start(app);
return;
}
VIRT_VIEWER_APP_CLASS(remote_viewer_parent_class)->deactivated(app, connect_error);
}
static void
remote_viewer_class_init (RemoteViewerClass *klass)
{
@ -161,6 +176,7 @@ remote_viewer_class_init (RemoteViewerClass *klass)
#endif
app_class->start = remote_viewer_start;
app_class->deactivated = remote_viewer_deactivated;
#ifdef HAVE_SPICE_GTK
app_class->activate = remote_viewer_activate;
app_class->window_added = remote_viewer_window_added;

View File

@ -1080,38 +1080,44 @@ virt_viewer_app_start_reconnect_poll(VirtViewerApp *self)
}
static void
virt_viewer_app_default_deactivated(VirtViewerApp *self)
virt_viewer_app_default_deactivated(VirtViewerApp *self, gboolean connect_error)
{
VirtViewerAppPrivate *priv = self->priv;
virt_viewer_app_show_status(self, _("Guest domain has shutdown"));
virt_viewer_app_trace(self, "Guest %s display has disconnected, shutting down",
priv->guest_name);
if (!connect_error) {
virt_viewer_app_show_status(self, _("Guest domain has shutdown"));
virt_viewer_app_trace(self, "Guest %s display has disconnected, shutting down",
priv->guest_name);
}
gtk_main_quit();
}
static void
virt_viewer_app_deactivated(VirtViewerApp *self)
virt_viewer_app_deactivated(VirtViewerApp *self, gboolean connect_error)
{
VirtViewerAppClass *klass;
klass = VIRT_VIEWER_APP_GET_CLASS(self);
klass->deactivated(self);
klass->deactivated(self, connect_error);
}
static void
virt_viewer_app_deactivate(VirtViewerApp *self)
virt_viewer_app_deactivate(VirtViewerApp *self, gboolean connect_error)
{
VirtViewerAppPrivate *priv = self->priv;
if (!priv->active)
return;
if (priv->session)
if (priv->session) {
virt_viewer_session_close(VIRT_VIEWER_SESSION(priv->session));
g_clear_object(&priv->session);
}
priv->connected = FALSE;
priv->active = FALSE;
priv->started = FALSE;
#if 0
g_free(priv->pretty_address);
priv->pretty_address = NULL;
@ -1123,7 +1129,7 @@ virt_viewer_app_deactivate(VirtViewerApp *self)
priv->authretry = FALSE;
g_idle_add(virt_viewer_app_retryauth, self);
} else
virt_viewer_app_deactivated(self);
virt_viewer_app_deactivated(self, connect_error);
}
@ -1154,17 +1160,18 @@ virt_viewer_app_disconnected(VirtViewerSession *session G_GNUC_UNUSED,
VirtViewerApp *self)
{
VirtViewerAppPrivate *priv = self->priv;
gboolean connect_error = !priv->connected && !priv->cancelled;
if (priv->quiting)
gtk_main_quit();
if (!priv->connected && !priv->cancelled) {
if (connect_error) {
virt_viewer_app_simple_message_dialog(self,
_("Unable to connect to the graphic server %s"),
priv->pretty_address);
}
virt_viewer_app_set_usb_options_sensitive(self, FALSE);
virt_viewer_app_deactivate(self);
virt_viewer_app_deactivate(self, connect_error);
}
static void virt_viewer_app_cancelled(VirtViewerSession *session,
@ -1331,10 +1338,7 @@ virt_viewer_app_dispose (GObject *object)
g_hash_table_unref(tmp);
}
if (priv->session) {
g_object_unref(priv->session);
priv->session = NULL;
}
g_clear_object(&priv->session);
g_free(priv->title);
priv->title = NULL;
g_free(priv->guest_name);

View File

@ -54,7 +54,7 @@ typedef struct {
gboolean (*start) (VirtViewerApp *self);
gboolean (*initial_connect) (VirtViewerApp *self, GError **error);
gboolean (*activate) (VirtViewerApp *self, GError **error);
void (*deactivated) (VirtViewerApp *self);
void (*deactivated) (VirtViewerApp *self, gboolean connect_error);
gboolean (*open_connection)(VirtViewerApp *self, int *fd);
} VirtViewerAppClass;

View File

@ -65,7 +65,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);
static void virt_viewer_deactivated(VirtViewerApp *self, gboolean connect_error);
static gboolean virt_viewer_start(VirtViewerApp *self);
static void
@ -125,7 +125,7 @@ virt_viewer_init(VirtViewer *self)
}
static void
virt_viewer_deactivated(VirtViewerApp *app)
virt_viewer_deactivated(VirtViewerApp *app, gboolean connect_error)
{
VirtViewer *self = VIRT_VIEWER(app);
VirtViewerPrivate *priv = self->priv;
@ -144,7 +144,7 @@ virt_viewer_deactivated(VirtViewerApp *app)
virt_viewer_app_show_status(app, _("Waiting for guest domain to re-start"));
virt_viewer_app_trace(app, "Guest %s display has disconnected, waiting to reconnect", priv->domkey);
} else {
VIRT_VIEWER_APP_CLASS(virt_viewer_parent_class)->deactivated(app);
VIRT_VIEWER_APP_CLASS(virt_viewer_parent_class)->deactivated(app, connect_error);
}
}