[virt-tools-list] [PATCH virt-viewer v2 1/7] Move SpiceSession setup to create_spice_session()

Jonathon Jongsma jjongsma at redhat.com
Thu Jun 18 20:15:24 UTC 2015


Most of the setup (connecting to signals, etc) for the SpiceSession was
done in create_spice_session(), but some was done afterwards in
virt_viewer_session_spice_new(). Consolidate all session configuration
in one place.

In addition to making it easier to maintain, create_spice_session() is
also called in virt_viewer_session_spice_close(). which results in a
spice session that is configured slightly differently than the first
session created in _new(). Consolidating everything in
create_spice_session() avoids that inconsistency.
---
 src/virt-viewer-session-spice.c | 118 ++++++++++++++++++++--------------------
 1 file changed, 60 insertions(+), 58 deletions(-)

diff --git a/src/virt-viewer-session-spice.c b/src/virt-viewer-session-spice.c
index f763975..9fe5396 100644
--- a/src/virt-viewer-session-spice.c
+++ b/src/virt-viewer-session-spice.c
@@ -254,6 +254,51 @@ static void reader_removed_cb(SpiceSmartcardManager *manager G_GNUC_UNUSED,
     }
 }
 
+#define UUID_LEN 16
+static void
+uuid_changed(GObject *gobject G_GNUC_UNUSED,
+             GParamSpec *pspec G_GNUC_UNUSED,
+             VirtViewerSessionSpice *self)
+{
+    guint8* uuid = NULL;
+    VirtViewerApp* app = virt_viewer_session_get_app(VIRT_VIEWER_SESSION(self));
+
+    g_object_get(self->priv->session, "uuid", &uuid, NULL);
+    if (uuid) {
+        int i;
+        gboolean uuid_empty = TRUE;
+
+        for (i = 0; i < UUID_LEN; i++) {
+            if (uuid[i] != 0) {
+                uuid_empty = FALSE;
+                break;
+            }
+        }
+
+        if (!uuid_empty) {
+            gchar *uuid_str = spice_uuid_to_string(uuid);
+            g_object_set(app, "uuid", uuid_str, NULL);
+            g_free(uuid_str);
+        }
+    }
+
+    virt_viewer_session_spice_fullscreen_auto_conf(self);
+}
+
+static void
+name_changed(GObject *gobject G_GNUC_UNUSED,
+              GParamSpec *pspec G_GNUC_UNUSED,
+              VirtViewerSessionSpice *self)
+{
+    gchar *name = NULL;
+    VirtViewerApp *app = virt_viewer_session_get_app(VIRT_VIEWER_SESSION(self));
+
+    g_object_get(self->priv->session, "name", &name, NULL);
+
+    g_object_set(app, "guest-name", name, NULL);
+    g_free(name);
+}
+
 static void
 create_spice_session(VirtViewerSessionSpice *self)
 {
@@ -304,6 +349,21 @@ create_spice_session(VirtViewerSessionSpice *self)
         }
         g_list_free(readers);
     }
+
+    /* notify::uuid is guaranteed to be emitted during connection startup even
+     * if the server is too old to support sending uuid */
+    virt_viewer_signal_connect_object(self->priv->session, "notify::uuid",
+                                      G_CALLBACK(uuid_changed), self, 0);
+    virt_viewer_signal_connect_object(self->priv->session, "notify::name",
+                                      G_CALLBACK(name_changed), self, 0);
+
+    g_object_bind_property(self->priv->session, "shared-dir",
+                           self, "shared-folder",
+                           G_BINDING_BIDIRECTIONAL|G_BINDING_SYNC_CREATE);
+    g_object_bind_property(self->priv->session, "share-dir-ro",
+                           self, "share-folder-ro",
+                           G_BINDING_BIDIRECTIONAL|G_BINDING_SYNC_CREATE);
+
 }
 
 static void
@@ -941,51 +1001,6 @@ virt_viewer_session_spice_channel_destroy(G_GNUC_UNUSED SpiceSession *s,
         g_signal_emit_by_name(self, "session-disconnected", error ? error->message : NULL);
 }
 
-#define UUID_LEN 16
-static void
-uuid_changed(GObject *gobject G_GNUC_UNUSED,
-             GParamSpec *pspec G_GNUC_UNUSED,
-             VirtViewerSessionSpice *self)
-{
-    guint8* uuid = NULL;
-    VirtViewerApp* app = virt_viewer_session_get_app(VIRT_VIEWER_SESSION(self));
-
-    g_object_get(self->priv->session, "uuid", &uuid, NULL);
-    if (uuid) {
-        int i;
-        gboolean uuid_empty = TRUE;
-
-        for (i = 0; i < UUID_LEN; i++) {
-            if (uuid[i] != 0) {
-                uuid_empty = FALSE;
-                break;
-            }
-        }
-
-        if (!uuid_empty) {
-            gchar *uuid_str = spice_uuid_to_string(uuid);
-            g_object_set(app, "uuid", uuid_str, NULL);
-            g_free(uuid_str);
-        }
-    }
-
-    virt_viewer_session_spice_fullscreen_auto_conf(self);
-}
-
-static void
-name_changed(GObject *gobject G_GNUC_UNUSED,
-              GParamSpec *pspec G_GNUC_UNUSED,
-              VirtViewerSessionSpice *self)
-{
-    gchar *name = NULL;
-    VirtViewerApp *app = virt_viewer_session_get_app(VIRT_VIEWER_SESSION(self));
-
-    g_object_get(self->priv->session, "name", &name, NULL);
-
-    g_object_set(app, "guest-name", name, NULL);
-    g_free(name);
-}
-
 static void
 update_share_folder(VirtViewerSessionSpice *self)
 {
@@ -1024,23 +1039,10 @@ virt_viewer_session_spice_new(VirtViewerApp *app, GtkWindow *main_window)
     virt_viewer_signal_connect_object(app, "notify::fullscreen",
                                       G_CALLBACK(property_notify_do_auto_conf), self, 0);
 
-    /* notify::uuid is guaranteed to be emitted during connection startup even
-     * if the server is too old to support sending uuid */
-    virt_viewer_signal_connect_object(self->priv->session, "notify::uuid",
-                                      G_CALLBACK(uuid_changed), self, 0);
-    virt_viewer_signal_connect_object(self->priv->session, "notify::name",
-                                      G_CALLBACK(name_changed), self, 0);
     virt_viewer_signal_connect_object(self, "notify::share-folder",
                                       G_CALLBACK(update_share_folder), self,
                                       G_CONNECT_SWAPPED);
 
-    g_object_bind_property(self->priv->session, "shared-dir",
-                           self, "shared-folder",
-                           G_BINDING_BIDIRECTIONAL|G_BINDING_SYNC_CREATE);
-    g_object_bind_property(self->priv->session, "share-dir-ro",
-                           self, "share-folder-ro",
-                           G_BINDING_BIDIRECTIONAL|G_BINDING_SYNC_CREATE);
-
     return VIRT_VIEWER_SESSION(self);
 }
 
-- 
2.1.0




More information about the virt-tools-list mailing list