This is libvirt specific, no need to share it in the VirtViewerApp base class. --- src/virt-viewer-app.c | 35 ----------------------------------- src/virt-viewer-app.h | 1 - src/virt-viewer.c | 41 +++++++++++++++++++++++++++++++++++++---- 3 files changed, 37 insertions(+), 40 deletions(-) diff --git a/src/virt-viewer-app.c b/src/virt-viewer-app.c index 262d75e..e2d9636 100644 --- a/src/virt-viewer-app.c +++ b/src/virt-viewer-app.c @@ -127,7 +127,6 @@ struct _VirtViewerAppPrivate { gboolean active; gboolean connected; gboolean cancelled; - guint reconnect_poll; /* source id */ char *unixsock; char *guri; /* prefered over ghost:gport */ char *ghost; @@ -1322,40 +1321,6 @@ virt_viewer_app_retryauth(gpointer opaque) return FALSE; } -static gboolean -virt_viewer_app_connect_timer(void *opaque) -{ - VirtViewerApp *self = opaque; - VirtViewerAppPrivate *priv = self->priv; - - g_debug("Connect timer fired"); - - if (!priv->active && - virt_viewer_app_initial_connect(self, NULL) < 0) - gtk_main_quit(); - - if (priv->active) { - priv->reconnect_poll = 0; - return FALSE; - } - - return TRUE; -} - -void -virt_viewer_app_start_reconnect_poll(VirtViewerApp *self) -{ - g_return_if_fail(VIRT_VIEWER_IS_APP(self)); - VirtViewerAppPrivate *priv = self->priv; - - g_debug("reconnect_poll: %d", priv->reconnect_poll); - - if (priv->reconnect_poll != 0) - return; - - priv->reconnect_poll = g_timeout_add(500, virt_viewer_app_connect_timer, self); -} - static void virt_viewer_app_default_deactivated(VirtViewerApp *self, gboolean connect_error) { diff --git a/src/virt-viewer-app.h b/src/virt-viewer-app.h index b68e50c..f127b32 100644 --- a/src/virt-viewer-app.h +++ b/src/virt-viewer-app.h @@ -71,7 +71,6 @@ void virt_viewer_app_free_connect_info(VirtViewerApp *self); int virt_viewer_app_create_session(VirtViewerApp *self, const gchar *type); gboolean virt_viewer_app_activate(VirtViewerApp *self, GError **error); gboolean virt_viewer_app_initial_connect(VirtViewerApp *self, GError **error); -void virt_viewer_app_start_reconnect_poll(VirtViewerApp *self); void virt_viewer_app_set_zoom_level(VirtViewerApp *self, gint zoom_level); gboolean virt_viewer_app_get_direct(VirtViewerApp *self); void virt_viewer_app_set_direct(VirtViewerApp *self, gboolean direct); diff --git a/src/virt-viewer.c b/src/virt-viewer.c index dc16b3f..19aa6ed 100644 --- a/src/virt-viewer.c +++ b/src/virt-viewer.c @@ -59,6 +59,7 @@ struct _VirtViewerPrivate { gboolean waitvm; gboolean reconnect; gboolean auth_cancelled; + guint reconnect_poll; /* source id */ }; G_DEFINE_TYPE (VirtViewer, virt_viewer, VIRT_VIEWER_TYPE_APP) @@ -115,6 +116,39 @@ virt_viewer_init(VirtViewer *self) self->priv = GET_PRIVATE(self); } +static gboolean +virt_viewer_connect_timer(void *opaque) +{ + VirtViewer *self = VIRT_VIEWER(opaque); + VirtViewerApp *app = VIRT_VIEWER_APP(self); + + g_debug("Connect timer fired"); + + if (!virt_viewer_app_is_active(app) && + !virt_viewer_app_initial_connect(app, NULL)) + gtk_main_quit(); + + if (virt_viewer_app_is_active(app)) { + self->priv->reconnect_poll = 0; + return FALSE; + } + + return TRUE; +} + +static void +virt_viewer_start_reconnect_poll(VirtViewer *self) +{ + VirtViewerPrivate *priv = self->priv; + + g_debug("reconnect_poll: %d", priv->reconnect_poll); + + if (priv->reconnect_poll != 0) + return; + + priv->reconnect_poll = g_timeout_add(500, virt_viewer_connect_timer, self); +} + static void virt_viewer_deactivated(VirtViewerApp *app, gboolean connect_error) { @@ -129,7 +163,7 @@ virt_viewer_deactivated(VirtViewerApp *app, gboolean connect_error) if (priv->reconnect) { if (!priv->withEvents) { g_debug("No domain events, falling back to polling"); - virt_viewer_app_start_reconnect_poll(app); + virt_viewer_start_reconnect_poll(self); } virt_viewer_app_show_status(app, _("Waiting for guest domain to re-start")); @@ -512,7 +546,6 @@ virt_viewer_conn_event(virConnectPtr conn G_GNUC_UNUSED, void *opaque) { VirtViewer *self = opaque; - VirtViewerApp *app = VIRT_VIEWER_APP(self); VirtViewerPrivate *priv = self->priv; g_debug("Got connection event %d", reason); @@ -520,7 +553,7 @@ virt_viewer_conn_event(virConnectPtr conn G_GNUC_UNUSED, virConnectClose(priv->conn); priv->conn = NULL; - virt_viewer_app_start_reconnect_poll(app); + virt_viewer_start_reconnect_poll(self); } static void @@ -831,7 +864,7 @@ virt_viewer_connect(VirtViewerApp *app) if (!priv->withEvents && !virt_viewer_app_is_active(app)) { g_debug("No domain events, falling back to polling"); - virt_viewer_app_start_reconnect_poll(app); + virt_viewer_start_reconnect_poll(self); } if (virConnectRegisterCloseCallback(priv->conn, -- 1.9.3 _______________________________________________ virt-tools-list mailing list virt-tools-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/virt-tools-list