From e6456698ec6c3ef00a3e8726bc78096a60d8fc35 Mon Sep 17 00:00:00 2001 From: Daiki Ueno Date: Sun, 30 Jun 2019 05:52:01 +0200 Subject: [PATCH] secret-service: Move parent property setting to constructor This makes it possible to instantiate a SecretService instance directly through g_initable_new() or g_async_initable_new_async(). --- libsecret/secret-service.c | 71 ++++++++++++++++++-------------------- 1 file changed, 34 insertions(+), 37 deletions(-) diff --git a/libsecret/secret-service.c b/libsecret/secret-service.c index 6dea0d1..f99fd7e 100644 --- a/libsecret/secret-service.c +++ b/libsecret/secret-service.c @@ -509,6 +509,38 @@ secret_service_real_get_item_gtype (SecretService *self) return klass->item_gtype; } +static const gchar * +get_default_bus_name (void) +{ + const gchar *bus_name; + + bus_name = g_getenv ("SECRET_SERVICE_BUS_NAME"); + if (bus_name == NULL) + bus_name = SECRET_SERVICE_BUS_NAME; + + return bus_name; +} + +static GObject * +secret_service_constructor (GType type, + guint n_construct_properties, + GObjectConstructParam *construct_properties) +{ + GObject *object; + + object = G_OBJECT_CLASS (secret_service_parent_class)-> + constructor (type, n_construct_properties, construct_properties); + g_object_set (object, + "g-flags", G_DBUS_PROXY_FLAGS_NONE, + "g-interface-info", _secret_gen_service_interface_info (), + "g-name", get_default_bus_name (), + "g-bus-type", G_BUS_TYPE_SESSION, + "g-object-path", SECRET_SERVICE_PATH, + "g-interface-name", SECRET_SERVICE_INTERFACE, + NULL); + return object; +} + static void secret_service_class_init (SecretServiceClass *klass) { @@ -519,6 +551,7 @@ secret_service_class_init (SecretServiceClass *klass) object_class->set_property = secret_service_set_property; object_class->dispose = secret_service_dispose; object_class->finalize = secret_service_finalize; + object_class->constructor = secret_service_constructor; proxy_class->g_properties_changed = secret_service_properties_changed; proxy_class->g_signal = secret_service_signal; @@ -745,18 +778,6 @@ secret_service_async_initable_iface (GAsyncInitableIface *iface) iface->init_finish = secret_service_async_initable_init_finish; } -static const gchar * -get_default_bus_name (void) -{ - const gchar *bus_name; - - bus_name = g_getenv ("SECRET_SERVICE_BUS_NAME"); - if (bus_name == NULL) - bus_name = SECRET_SERVICE_BUS_NAME; - - return bus_name; -} - /** * secret_service_get: * @flags: flags for which service functionality to ensure is initialized @@ -788,13 +809,7 @@ secret_service_get (SecretServiceFlags flags, if (service == NULL) { g_async_initable_new_async (SECRET_TYPE_SERVICE, G_PRIORITY_DEFAULT, cancellable, callback, user_data, - "g-flags", G_DBUS_PROXY_FLAGS_NONE, - "g-interface-info", _secret_gen_service_interface_info (), - "g-name", get_default_bus_name (), - "g-bus-type", G_BUS_TYPE_SESSION, - "g-object-path", SECRET_SERVICE_PATH, - "g-interface-name", SECRET_SERVICE_INTERFACE, - "flags", flags, + "flags", flags, NULL); /* Just have to ensure that the service matches flags */ @@ -890,12 +905,6 @@ secret_service_get_sync (SecretServiceFlags flags, if (service == NULL) { service = g_initable_new (SECRET_TYPE_SERVICE, cancellable, error, - "g-flags", G_DBUS_PROXY_FLAGS_NONE, - "g-interface-info", _secret_gen_service_interface_info (), - "g-name", get_default_bus_name (), - "g-bus-type", G_BUS_TYPE_SESSION, - "g-object-path", SECRET_SERVICE_PATH, - "g-interface-name", SECRET_SERVICE_INTERFACE, "flags", flags, NULL); @@ -970,12 +979,6 @@ secret_service_open (GType service_gtype, g_async_initable_new_async (service_gtype, G_PRIORITY_DEFAULT, cancellable, callback, user_data, - "g-flags", G_DBUS_PROXY_FLAGS_NONE, - "g-interface-info", _secret_gen_service_interface_info (), - "g-name", service_bus_name, - "g-bus-type", G_BUS_TYPE_SESSION, - "g-object-path", SECRET_SERVICE_PATH, - "g-interface-name", SECRET_SERVICE_INTERFACE, "flags", flags, NULL); } @@ -1052,12 +1055,6 @@ secret_service_open_sync (GType service_gtype, service_bus_name = get_default_bus_name (); return g_initable_new (service_gtype, cancellable, error, - "g-flags", G_DBUS_PROXY_FLAGS_NONE, - "g-interface-info", _secret_gen_service_interface_info (), - "g-name", service_bus_name, - "g-bus-type", G_BUS_TYPE_SESSION, - "g-object-path", SECRET_SERVICE_PATH, - "g-interface-name", SECRET_SERVICE_INTERFACE, "flags", flags, NULL); }