[Spice-devel] [PATCH spice-gtk 08/15] gtk: do not require glib session private fields
Jonathon Jongsma
jjongsma at redhat.com
Tue Nov 25 15:05:09 PST 2014
On Tue, 2014-11-25 at 14:19 +0100, Marc-André Lureau wrote:
> Use GObject object association for session helpers.
So, you just added internal accessor functions for a bunch of other
session member variables (_get_webdav_magic(), etc.). But for these, you
used the GObject data functions. Why are these variables treated
differently? By using g_object_get|set_data(), you lose some type
safety, and make things harder to debug since you can't look directly at
struct members, etc. I'd really rather just add setters/getters for
these variables.
> ---
> gtk/desktop-integration.c | 7 ++-----
> gtk/spice-gtk-session.c | 4 ++--
> gtk/spice-session-priv.h | 2 --
> gtk/spice-session.c | 2 --
> 4 files changed, 4 insertions(+), 11 deletions(-)
>
> diff --git a/gtk/desktop-integration.c b/gtk/desktop-integration.c
> index 145fa6a..c366fd0 100644
> --- a/gtk/desktop-integration.c
> +++ b/gtk/desktop-integration.c
> @@ -187,9 +187,6 @@ static void spice_desktop_integration_class_init(SpiceDesktopIntegrationClass *k
> g_type_class_add_private(klass, sizeof(SpiceDesktopIntegrationPrivate));
> }
>
> -/* ------------------------------------------------------------------ */
> -/* public methods */
> -
> SpiceDesktopIntegration *spice_desktop_integration_get(SpiceSession *session)
> {
> SpiceDesktopIntegration *self;
> @@ -198,10 +195,10 @@ SpiceDesktopIntegration *spice_desktop_integration_get(SpiceSession *session)
> g_return_val_if_fail(session != NULL, NULL);
>
> g_static_mutex_lock(&mutex);
> - self = session->priv->desktop_integration;
> + self = g_object_get_data(G_OBJECT(session), "spice-desktop");
> if (self == NULL) {
> self = g_object_new(SPICE_TYPE_DESKTOP_INTEGRATION, NULL);
> - session->priv->desktop_integration = self;
> + g_object_set_data_full(G_OBJECT(session), "spice-desktop", self, g_object_unref);
> }
> g_static_mutex_unlock(&mutex);
>
> diff --git a/gtk/spice-gtk-session.c b/gtk/spice-gtk-session.c
> index 701950d..de01358 100644
> --- a/gtk/spice-gtk-session.c
> +++ b/gtk/spice-gtk-session.c
> @@ -1119,10 +1119,10 @@ SpiceGtkSession *spice_gtk_session_get(SpiceSession *session)
> static GStaticMutex mutex = G_STATIC_MUTEX_INIT;
>
> g_static_mutex_lock(&mutex);
> - self = session->priv->gtk_session;
> + self = g_object_get_data(G_OBJECT(session), "spice-gtk-session");
> if (self == NULL) {
> self = g_object_new(SPICE_TYPE_GTK_SESSION, "session", session, NULL);
> - session->priv->gtk_session = self;
> + g_object_set_data_full(G_OBJECT(session), "spice-gtk-session", self, g_object_unref);
> }
> g_static_mutex_unlock(&mutex);
>
> diff --git a/gtk/spice-session-priv.h b/gtk/spice-session-priv.h
> index 5136c2d..9acfcfe 100644
> --- a/gtk/spice-session-priv.h
> +++ b/gtk/spice-session-priv.h
> @@ -114,8 +114,6 @@ struct _SpiceSessionPrivate {
>
> /* associated objects */
> SpiceAudio *audio_manager;
> - SpiceDesktopIntegration *desktop_integration;
> - SpiceGtkSession *gtk_session;
> SpiceUsbDeviceManager *usb_manager;
> SpicePlaybackChannel *playback_channel;
> PhodavServer *webdav;
> diff --git a/gtk/spice-session.c b/gtk/spice-session.c
> index 2850d02..9e9cb5d 100644
> --- a/gtk/spice-session.c
> +++ b/gtk/spice-session.c
> @@ -186,8 +186,6 @@ spice_session_dispose(GObject *gobject)
> g_warn_if_fail(s->after_main_init == 0);
>
> g_clear_object(&s->audio_manager);
> - g_clear_object(&s->desktop_integration);
> - g_clear_object(&s->gtk_session);
> g_clear_object(&s->usb_manager);
> g_clear_object(&s->proxy);
> g_clear_object(&s->webdav);
More information about the Spice-devel
mailing list