pidgin/pidgin

Parents 2ed9994ba315
Children 739fc280f3b5
Add a settings property to PurpleCredentialProvider that is a GSettings object

Testing Done:
Ran the unit tests. However I didn't add this to the tests because adding a dummy settings object is more trouble than it's worth.

Reviewed at https://reviews.imfreedom.org/r/2145/
--- a/libpurple/purplecredentialprovider.c Thu Dec 15 21:03:07 2022 -0600
+++ b/libpurple/purplecredentialprovider.c Thu Dec 15 21:06:09 2022 -0600
@@ -24,6 +24,8 @@
gchar *id;
gchar *name;
gchar *description;
+
+ GSettings *settings;
} PurpleCredentialProviderPrivate;
enum {
@@ -31,6 +33,7 @@
PROP_ID,
PROP_NAME,
PROP_DESCRIPTION,
+ PROP_SETTINGS,
N_PROPERTIES,
};
static GParamSpec *properties[N_PROPERTIES] = {NULL, };
@@ -83,6 +86,22 @@
g_object_notify_by_pspec(G_OBJECT(provider), properties[PROP_DESCRIPTION]);
}
+static void
+purple_credential_provider_set_settings(PurpleCredentialProvider *provider,
+ GSettings *settings)
+{
+ PurpleCredentialProviderPrivate *priv = NULL;
+
+ g_return_if_fail(PURPLE_IS_CREDENTIAL_PROVIDER(provider));
+
+ priv = purple_credential_provider_get_instance_private(provider);
+
+ if(g_set_object(&priv->settings, settings)) {
+ g_object_notify_by_pspec(G_OBJECT(provider),
+ properties[PROP_SETTINGS]);
+ }
+}
+
/******************************************************************************
* GObject Implementation
*****************************************************************************/
@@ -105,6 +124,10 @@
g_value_set_string(value,
purple_credential_provider_get_description(provider));
break;
+ case PROP_SETTINGS:
+ g_value_set_object(value,
+ purple_credential_provider_get_settings(provider));
+ break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID(obj, param_id, pspec);
break;
@@ -130,6 +153,10 @@
purple_credential_provider_set_description(provider,
g_value_get_string(value));
break;
+ case PROP_SETTINGS:
+ purple_credential_provider_set_settings(provider,
+ g_value_get_object(value));
+ break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID(obj, param_id, pspec);
break;
@@ -148,6 +175,8 @@
g_clear_pointer(&priv->name, g_free);
g_clear_pointer(&priv->description, g_free);
+ g_clear_object(&priv->settings);
+
G_OBJECT_CLASS(purple_credential_provider_parent_class)->finalize(obj);
}
@@ -204,6 +233,20 @@
G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS
);
+ /**
+ * PurpleCredentialProvider::settings:
+ *
+ * The [class@Gio.Settings] used to configure the provider. This may be
+ * %NULL.
+ *
+ * Since: 3.0.0
+ */
+ properties[PROP_SETTINGS] = g_param_spec_object(
+ "settings", "setings",
+ "The GSettings for the provider",
+ G_TYPE_SETTINGS,
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS);
+
g_object_class_install_properties(obj_class, N_PROPERTIES, properties);
}
@@ -418,3 +461,14 @@
return FALSE;
}
+
+GSettings *
+purple_credential_provider_get_settings(PurpleCredentialProvider *provider) {
+ PurpleCredentialProviderPrivate *priv = NULL;
+
+ g_return_val_if_fail(PURPLE_IS_CREDENTIAL_PROVIDER(provider), NULL);
+
+ priv = purple_credential_provider_get_instance_private(provider);
+
+ return priv->settings;
+}
--- a/libpurple/purplecredentialprovider.h Thu Dec 15 21:03:07 2022 -0600
+++ b/libpurple/purplecredentialprovider.h Thu Dec 15 21:06:09 2022 -0600
@@ -242,6 +242,19 @@
*/
gboolean purple_credential_provider_clear_password_finish(PurpleCredentialProvider *provider, GAsyncResult *result, GError **error);
+/**
+ * purple_credential_provider_get_settings:
+ * @provider: The instance.
+ *
+ * Gets the [class@Gio.Settings] that @provider provides.
+ *
+ * Returns: (transfer none): The settings for @provider or %NULL if @provider
+ * doesn't have any settings.
+ *
+ * Since: 3.0.0
+ */
+GSettings *purple_credential_provider_get_settings(PurpleCredentialProvider *provider);
+
G_END_DECLS
#endif /* PURPLE_CREDENTIAL_PROVIDER_H */