mirror of
https://gitlab.uni-freiburg.de/opensourcevdi/virt-viewer
synced 2026-01-05 01:08:16 +00:00
Show connect dialog again if connection from dialog failed
https://bugzilla.redhat.com/show_bug.cgi?id=864026
This commit is contained in:
parent
6ed73f150c
commit
240baeeb44
@ -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;
|
||||
|
||||
@ -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);
|
||||
|
||||
@ -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;
|
||||
|
||||
|
||||
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user