[virt-tools-list] [PATCH virt-viewer] SessionSpice: make main-window a property

Pavel Grunt pgrunt at redhat.com
Fri Oct 9 08:53:35 UTC 2015


On Thu, 2015-10-08 at 16:02 -0500, Jonathon Jongsma wrote:
> Make "main-window" a construct-only property of VirtViewerSessionSpice.
> This allows us to set it in the constructor and encapsulate all of the
> setup within the gobject constructor rather than doing extra work in the
> _new() function.
OK, ack

Pavel
> ---
>  src/virt-viewer-session-spice.c | 122 +++++++++++++++++++++++++------------
> ---
>  1 file changed, 77 insertions(+), 45 deletions(-)
> 
> diff --git a/src/virt-viewer-session-spice.c b/src/virt-viewer-session-spice.c
> index 988fc5b..f792294 100644
> --- a/src/virt-viewer-session-spice.c
> +++ b/src/virt-viewer-session-spice.c
> @@ -66,6 +66,7 @@ enum {
>      PROP_0,
>      PROP_SPICE_SESSION,
>      PROP_SW_SMARTCARD_READER,
> +    PROP_MAIN_WINDOW
>  };
>  
>  
> @@ -117,6 +118,9 @@ virt_viewer_session_spice_get_property(GObject *object,
> guint property_id,
>      case PROP_SW_SMARTCARD_READER:
>          g_value_set_boolean(value, priv->has_sw_smartcard_reader);
>          break;
> +    case PROP_MAIN_WINDOW:
> +        g_value_set_object(value, self->priv->main_window);
> +        break;
>      default:
>          G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
>      }
> @@ -126,7 +130,12 @@ static void
>  virt_viewer_session_spice_set_property(GObject *object, guint property_id,
>                                         const GValue *value G_GNUC_UNUSED,
> GParamSpec *pspec)
>  {
> +    VirtViewerSessionSpice *self = VIRT_VIEWER_SESSION_SPICE(object);
> +
>      switch (property_id) {
> +    case PROP_MAIN_WINDOW:
> +        self->priv->main_window = g_value_dup_object(value);
> +        break;
>      default:
>          G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
>      }
> @@ -172,6 +181,61 @@
> virt_viewer_session_spice_can_retry_auth(VirtViewerSession *session
> G_GNUC_UNUSE
>  }
>  
>  static void
> +create_spice_session(VirtViewerSessionSpice *self);
> +
> +static void
> +property_notify_do_auto_conf(GObject *gobject G_GNUC_UNUSED,
> +                             GParamSpec *pspec G_GNUC_UNUSED,
> +                             VirtViewerSessionSpice *self)
> +{
> +    virt_viewer_session_spice_fullscreen_auto_conf(self);
> +}
> +
> +static void
> +update_share_folder(VirtViewerSessionSpice *self)
> +{
> +    gboolean share;
> +    SpiceSession *session = self->priv->session;
> +    GList *l, *channels;
> +
> +    g_object_get(self, "share-folder", &share, NULL);
> +
> +    channels = spice_session_get_channels(session);
> +    for (l = channels; l != NULL; l = l->next) {
> +        SpiceChannel *channel = l->data;
> +
> +        if (!SPICE_IS_WEBDAV_CHANNEL(channel))
> +            continue;
> +
> +        if (share)
> +            spice_channel_connect(channel);
> +        else
> +            spice_channel_disconnect(channel, SPICE_CHANNEL_NONE);
> +    }
> +
> +    g_list_free(channels);
> +}
> +
> +static void
> +virt_viewer_session_spice_constructed(GObject *obj)
> +{
> +    VirtViewerSessionSpice *self = VIRT_VIEWER_SESSION_SPICE(obj);
> +
> +    create_spice_session(self);
> +
> +    virt_viewer_signal_connect_object(virt_viewer_session_get_app(VIRT_VIEWER
> _SESSION(self)),
> +                                      "notify::fullscreen",
> +                                      G_CALLBACK(property_notify_do_auto_conf
> ),
> +                                      self, 0);
> +
> +    virt_viewer_signal_connect_object(self, "notify::share-folder",
> +                                      G_CALLBACK(update_share_folder), self,
> +                                      G_CONNECT_SWAPPED);
> +
> +    G_OBJECT_CLASS(virt_viewer_session_spice_parent_class)->constructed(obj);
> +}
> +
> +static void
>  virt_viewer_session_spice_class_init(VirtViewerSessionSpiceClass *klass)
>  {
>      VirtViewerSessionClass *dclass = VIRT_VIEWER_SESSION_CLASS(klass);
> @@ -180,6 +244,7 @@
> virt_viewer_session_spice_class_init(VirtViewerSessionSpiceClass *klass)
>      oclass->get_property = virt_viewer_session_spice_get_property;
>      oclass->set_property = virt_viewer_session_spice_set_property;
>      oclass->dispose = virt_viewer_session_spice_dispose;
> +    oclass->constructed = virt_viewer_session_spice_constructed;
>  
>      dclass->close = virt_viewer_session_spice_close;
>      dclass->open_fd = virt_viewer_session_spice_open_fd;
> @@ -204,6 +269,14 @@
> virt_viewer_session_spice_class_init(VirtViewerSessionSpiceClass *klass)
>                                                          SPICE_TYPE_SESSION,
>                                                          G_PARAM_READABLE |
>                                                          G_PARAM_STATIC_STRING
> S));
> +    g_object_class_install_property(oclass,
> +                                    PROP_MAIN_WINDOW,
> +                                    g_param_spec_object("main-window",
> +                                                        "main window",
> +                                                        "Main Window",
> +                                                        GTK_TYPE_WINDOW,
> +                                                        G_PARAM_READWRITE |
> G_PARAM_CONSTRUCT_ONLY |
> +                                                        G_PARAM_STATIC_STRING
> S));
>      g_object_class_override_property(oclass,
>                                       PROP_SW_SMARTCARD_READER,
>                                       "software-smartcard-reader");
> @@ -887,14 +960,6 @@ virt_viewer_session_spice_channel_new(SpiceSession *s,
>      self->priv->channel_count++;
>  }
>  
> -static void
> -property_notify_do_auto_conf(GObject *gobject G_GNUC_UNUSED,
> -                             GParamSpec *pspec G_GNUC_UNUSED,
> -                             VirtViewerSessionSpice *self)
> -{
> -    virt_viewer_session_spice_fullscreen_auto_conf(self);
> -}
> -
>  static gboolean
>  virt_viewer_session_spice_fullscreen_auto_conf(VirtViewerSessionSpice *self)
>  {
> @@ -1011,48 +1076,15 @@
> virt_viewer_session_spice_channel_destroy(G_GNUC_UNUSED SpiceSession *s,
>          g_signal_emit_by_name(self, "session-disconnected", error ? error-
> >message : NULL);
>  }
>  
> -static void
> -update_share_folder(VirtViewerSessionSpice *self)
> -{
> -    gboolean share;
> -    SpiceSession *session = self->priv->session;
> -    GList *l, *channels;
> -
> -    g_object_get(self, "share-folder", &share, NULL);
> -
> -    channels = spice_session_get_channels(session);
> -    for (l = channels; l != NULL; l = l->next) {
> -        SpiceChannel *channel = l->data;
> -
> -        if (!SPICE_IS_WEBDAV_CHANNEL(channel))
> -            continue;
> -
> -        if (share)
> -            spice_channel_connect(channel);
> -        else
> -            spice_channel_disconnect(channel, SPICE_CHANNEL_NONE);
> -    }
> -
> -    g_list_free(channels);
> -}
> -
>  VirtViewerSession *
>  virt_viewer_session_spice_new(VirtViewerApp *app, GtkWindow *main_window)
>  {
>      VirtViewerSessionSpice *self;
>  
> -    self = g_object_new(VIRT_VIEWER_TYPE_SESSION_SPICE, "app", app, NULL);
> -
> -    create_spice_session(self);
> -    self->priv->main_window = g_object_ref(main_window);
> -
> -    virt_viewer_signal_connect_object(app, "notify::fullscreen",
> -                                      G_CALLBACK(property_notify_do_auto_conf
> ), self, 0);
> -
> -    virt_viewer_signal_connect_object(self, "notify::share-folder",
> -                                      G_CALLBACK(update_share_folder), self,
> -                                      G_CONNECT_SWAPPED);
> -
> +    self = g_object_new(VIRT_VIEWER_TYPE_SESSION_SPICE,
> +                        "app", app,
> +                        "main-window", main_window,
> +                        NULL);
>      return VIRT_VIEWER_SESSION(self);
>  }
>  




More information about the virt-tools-list mailing list