pidgin/pidgin

afe8c89a8e90
Parents 4be9a7876d35
Children e19c9f9c79fc
Make PurpleCredentialManager a final type

Testing Done:
Verified that the secret service provider is still working.

Reviewed at https://reviews.imfreedom.org/r/1081/
--- a/libpurple/purplecredentialmanager.c Wed Oct 20 02:36:06 2021 -0500
+++ b/libpurple/purplecredentialmanager.c Wed Oct 20 02:41:29 2021 -0500
@@ -35,14 +35,16 @@
};
static guint signals[N_SIGNALS] = {0, };
-typedef struct {
+struct _PurpleCredentialManager {
+ GObject parent;
+
GHashTable *providers;
PurpleCredentialProvider *active;
-} PurpleCredentialManagerPrivate;
+};
-G_DEFINE_TYPE_WITH_PRIVATE(PurpleCredentialManager, purple_credential_manager,
- G_TYPE_OBJECT);
+G_DEFINE_TYPE(PurpleCredentialManager, purple_credential_manager,
+ G_TYPE_OBJECT);
static PurpleCredentialManager *default_manager = NULL;
@@ -124,10 +126,8 @@
static void
purple_credential_manager_core_init_cb(gpointer data) {
PurpleCredentialManager *manager = PURPLE_CREDENTIAL_MANAGER(data);
- PurpleCredentialManagerPrivate *priv = NULL;
- priv = purple_credential_manager_get_instance_private(manager);
- if(!PURPLE_IS_CREDENTIAL_PROVIDER(priv->active)) {
+ if(!PURPLE_IS_CREDENTIAL_PROVIDER(manager->active)) {
GError *error = NULL;
const gchar *id = NULL;
@@ -155,26 +155,21 @@
static void
purple_credential_manager_finalize(GObject *obj) {
PurpleCredentialManager *manager = NULL;
- PurpleCredentialManagerPrivate *priv = NULL;
manager = PURPLE_CREDENTIAL_MANAGER(obj);
- priv = purple_credential_manager_get_instance_private(manager);
- g_clear_pointer(&priv->providers, g_hash_table_destroy);
- g_clear_object(&priv->active);
+ g_clear_pointer(&manager->providers, g_hash_table_destroy);
+ g_clear_object(&manager->active);
G_OBJECT_CLASS(purple_credential_manager_parent_class)->finalize(obj);
}
static void
purple_credential_manager_init(PurpleCredentialManager *manager) {
- PurpleCredentialManagerPrivate *priv = NULL;
PurpleCredentialProvider *noop = NULL;
- priv = purple_credential_manager_get_instance_private(manager);
-
- priv->providers = g_hash_table_new_full(g_str_hash, g_str_equal, g_free,
- g_object_unref);
+ manager->providers = g_hash_table_new_full(g_str_hash, g_str_equal, g_free,
+ g_object_unref);
noop = purple_noop_credential_provider_new();
purple_credential_manager_register(manager, noop, NULL);
@@ -203,11 +198,11 @@
*
* Since: 3.0.0
*/
- signals[SIG_REGISTERED] = g_signal_new(
+ signals[SIG_REGISTERED] = g_signal_new_class_handler(
"registered",
G_OBJECT_CLASS_TYPE(klass),
G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET(PurpleCredentialManagerClass, registered),
+ NULL,
NULL,
NULL,
NULL,
@@ -224,11 +219,11 @@
*
* Since: 3.0.0
*/
- signals[SIG_UNREGISTERED] = g_signal_new(
+ signals[SIG_UNREGISTERED] = g_signal_new_class_handler(
"unregistered",
G_OBJECT_CLASS_TYPE(klass),
G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET(PurpleCredentialManagerClass, unregistered),
+ NULL,
NULL,
NULL,
NULL,
@@ -246,11 +241,11 @@
*
* Since: 3.0.0
*/
- signals[SIG_ACTIVE_CHANGED] = g_signal_new(
+ signals[SIG_ACTIVE_CHANGED] = g_signal_new_class_handler(
"active-changed",
G_OBJECT_CLASS_TYPE(klass),
G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET(PurpleCredentialManagerClass, active_changed),
+ NULL,
NULL,
NULL,
NULL,
@@ -278,12 +273,9 @@
void
purple_credential_manager_shutdown(void) {
if(PURPLE_IS_CREDENTIAL_MANAGER(default_manager)) {
- PurpleCredentialManagerPrivate *priv = NULL;
guint size = 0;
- priv = purple_credential_manager_get_instance_private(default_manager);
-
- size = g_hash_table_size(priv->providers);
+ size = g_hash_table_size(default_manager->providers);
if(size > 0) {
g_warning("purple_credential_manager_shutdown called while %d "
"providers were still registered. Skipping shutdown",
@@ -307,7 +299,6 @@
PurpleCredentialProvider *provider,
GError **error)
{
- PurpleCredentialManagerPrivate *priv = NULL;
const gchar *id = NULL;
g_return_val_if_fail(PURPLE_IS_CREDENTIAL_MANAGER(manager), FALSE);
@@ -319,17 +310,16 @@
return FALSE;
}
- priv = purple_credential_manager_get_instance_private(manager);
-
id = purple_credential_provider_get_id(provider);
- if(g_hash_table_lookup(priv->providers, id) != NULL) {
+ if(g_hash_table_lookup(manager->providers, id) != NULL) {
g_set_error(error, PURPLE_CREDENTIAL_MANAGER_DOMAIN, 0,
_("provider %s is already registered"), id);
return FALSE;
}
- g_hash_table_insert(priv->providers, g_strdup(id), g_object_ref(provider));
+ g_hash_table_insert(manager->providers, g_strdup(id),
+ g_object_ref(provider));
g_signal_emit(G_OBJECT(manager), signals[SIG_REGISTERED], 0, provider);
@@ -337,7 +327,7 @@
* registered provider has the id of the stored provider in preferences.
* If it is, go ahead and make it the active provider.
*/
- if(!PURPLE_IS_CREDENTIAL_PROVIDER(priv->active)) {
+ if(!PURPLE_IS_CREDENTIAL_PROVIDER(manager->active)) {
const gchar *wanted = NULL;
wanted = purple_prefs_get_string("/purple/credentials/active-provider");
@@ -355,23 +345,21 @@
PurpleCredentialProvider *provider,
GError **error)
{
- PurpleCredentialManagerPrivate *priv = NULL;
const gchar *id = NULL;
g_return_val_if_fail(PURPLE_IS_CREDENTIAL_MANAGER(manager), FALSE);
g_return_val_if_fail(PURPLE_IS_CREDENTIAL_PROVIDER(provider), FALSE);
- priv = purple_credential_manager_get_instance_private(manager);
id = purple_credential_provider_get_id(provider);
- if(provider == priv->active) {
+ if(provider == manager->active) {
g_set_error(error, PURPLE_CREDENTIAL_MANAGER_DOMAIN, 0,
_("provider %s is currently in use"), id);
return FALSE;
}
- if(g_hash_table_remove(priv->providers, id)) {
+ if(g_hash_table_remove(manager->providers, id)) {
g_signal_emit(G_OBJECT(manager), signals[SIG_UNREGISTERED], 0,
provider);
@@ -388,16 +376,13 @@
purple_credential_manager_set_active(PurpleCredentialManager *manager,
const gchar *id, GError **error)
{
- PurpleCredentialManagerPrivate *priv = NULL;
PurpleCredentialProvider *previous = NULL, *provider = NULL;
g_return_val_if_fail(PURPLE_IS_CREDENTIAL_MANAGER(manager), FALSE);
- priv = purple_credential_manager_get_instance_private(manager);
-
/* First look up the new provider if we're given one. */
if(id != NULL) {
- provider = g_hash_table_lookup(priv->providers, id);
+ provider = g_hash_table_lookup(manager->providers, id);
if(!PURPLE_IS_CREDENTIAL_PROVIDER(provider)) {
g_set_error(error, PURPLE_CREDENTIAL_MANAGER_DOMAIN, 0,
"no credential provider found with id %s", id);
@@ -406,11 +391,11 @@
}
}
- if(PURPLE_IS_CREDENTIAL_PROVIDER(priv->active)) {
- previous = PURPLE_CREDENTIAL_PROVIDER(g_object_ref(priv->active));
+ if(PURPLE_IS_CREDENTIAL_PROVIDER(manager->active)) {
+ previous = PURPLE_CREDENTIAL_PROVIDER(g_object_ref(manager->active));
}
- if(g_set_object(&priv->active, provider)) {
+ if(g_set_object(&manager->active, provider)) {
if(PURPLE_IS_CREDENTIAL_PROVIDER(previous)) {
purple_credential_provider_deactivate(previous);
}
@@ -420,7 +405,7 @@
}
g_signal_emit(G_OBJECT(manager), signals[SIG_ACTIVE_CHANGED], 0,
- previous, priv->active);
+ previous, manager->active);
}
g_clear_object(&previous);
@@ -437,13 +422,9 @@
PurpleCredentialProvider *
purple_credential_manager_get_active(PurpleCredentialManager *manager) {
- PurpleCredentialManagerPrivate *priv = NULL;
-
g_return_val_if_fail(PURPLE_IS_CREDENTIAL_MANAGER(manager), NULL);
- priv = purple_credential_manager_get_instance_private(manager);
-
- return priv->active;
+ return manager->active;
}
void
@@ -453,18 +434,16 @@
GAsyncReadyCallback callback,
gpointer data)
{
- PurpleCredentialManagerPrivate *priv = NULL;
GTask *task = NULL;
g_return_if_fail(PURPLE_IS_CREDENTIAL_MANAGER(manager));
g_return_if_fail(PURPLE_IS_ACCOUNT(account));
- priv = purple_credential_manager_get_instance_private(manager);
-
task = g_task_new(manager, cancellable, callback, data);
- if(priv->active != NULL) {
- purple_credential_provider_read_password_async(priv->active, account,
+ if(manager->active != NULL) {
+ purple_credential_provider_read_password_async(manager->active,
+ account,
cancellable,
purple_credential_manager_read_password_callback,
task);
@@ -494,14 +473,11 @@
GAsyncReadyCallback callback,
gpointer data)
{
- PurpleCredentialManagerPrivate *priv = NULL;
GTask *task = NULL;
g_return_if_fail(PURPLE_IS_CREDENTIAL_MANAGER(manager));
g_return_if_fail(PURPLE_IS_ACCOUNT(account));
- priv = purple_credential_manager_get_instance_private(manager);
-
task = g_task_new(manager, cancellable, callback, data);
if(!purple_account_get_remember_password(account)) {
@@ -515,8 +491,9 @@
return;
}
- if(priv->active != NULL) {
- purple_credential_provider_write_password_async(priv->active, account,
+ if(manager->active != NULL) {
+ purple_credential_provider_write_password_async(manager->active,
+ account,
password, cancellable,
purple_credential_manager_write_password_callback,
task);
@@ -547,18 +524,16 @@
GAsyncReadyCallback callback,
gpointer data)
{
- PurpleCredentialManagerPrivate *priv = NULL;
GTask *task = NULL;
g_return_if_fail(PURPLE_IS_CREDENTIAL_MANAGER(manager));
g_return_if_fail(PURPLE_IS_ACCOUNT(account));
- priv = purple_credential_manager_get_instance_private(manager);
-
task = g_task_new(manager, cancellable, callback, data);
- if(priv->active != NULL) {
- purple_credential_provider_clear_password_async(priv->active, account,
+ if(manager->active != NULL) {
+ purple_credential_provider_clear_password_async(manager->active,
+ account,
cancellable,
purple_credential_manager_clear_password_callback,
task);
@@ -585,14 +560,10 @@
purple_credential_manager_read_settings(PurpleCredentialManager *manager,
GError **error)
{
- PurpleCredentialManagerPrivate *priv = NULL;
-
g_return_val_if_fail(PURPLE_IS_CREDENTIAL_MANAGER(manager), FALSE);
- priv = purple_credential_manager_get_instance_private(manager);
-
- if(priv->active != NULL) {
- return purple_credential_provider_read_settings(priv->active);
+ if(manager->active != NULL) {
+ return purple_credential_provider_read_settings(manager->active);
}
g_set_error(error, PURPLE_CREDENTIAL_MANAGER_DOMAIN, 0,
@@ -606,14 +577,11 @@
PurpleRequestFields *fields,
GError **error)
{
- PurpleCredentialManagerPrivate *priv = NULL;
-
g_return_val_if_fail(PURPLE_IS_CREDENTIAL_MANAGER(manager), FALSE);
- priv = purple_credential_manager_get_instance_private(manager);
-
- if(priv->active != NULL) {
- return purple_credential_provider_write_settings(priv->active, fields);
+ if(manager->active != NULL) {
+ return purple_credential_provider_write_settings(manager->active,
+ fields);
}
g_set_error(error, PURPLE_CREDENTIAL_MANAGER_DOMAIN, 0,
@@ -628,15 +596,12 @@
gpointer data)
{
GHashTableIter iter;
- PurpleCredentialManagerPrivate *priv = NULL;
gpointer value;
g_return_if_fail(PURPLE_IS_CREDENTIAL_MANAGER(manager));
g_return_if_fail(func != NULL);
- priv = purple_credential_manager_get_instance_private(manager);
-
- g_hash_table_iter_init(&iter, priv->providers);
+ g_hash_table_iter_init(&iter, manager->providers);
while(g_hash_table_iter_next(&iter, NULL, &value)) {
func(PURPLE_CREDENTIAL_PROVIDER(value), data);
}
--- a/libpurple/purplecredentialmanager.h Wed Oct 20 02:36:06 2021 -0500
+++ b/libpurple/purplecredentialmanager.h Wed Oct 20 02:41:29 2021 -0500
@@ -62,8 +62,8 @@
* Since: 3.0.0
*/
#define PURPLE_TYPE_CREDENTIAL_MANAGER (purple_credential_manager_get_type())
-G_DECLARE_DERIVABLE_TYPE(PurpleCredentialManager, purple_credential_manager,
- PURPLE, CREDENTIAL_MANAGER, GObject)
+G_DECLARE_FINAL_TYPE(PurpleCredentialManager, purple_credential_manager,
+ PURPLE, CREDENTIAL_MANAGER, GObject)
/**
* PurpleCredentialManager:
@@ -74,31 +74,6 @@
*/
/**
- * PurpleCredentialManagerClass:
- * @registered: The default signal handler for when a provider is registered.
- * @unregistered: The default signal handler for when a provider is
- * unregistered.
- * @active_changed: The default signal handler for when the active provider is
- * changed.
- *
- * The class structure for #PurpleCredentialProvider.
- *
- * Since: 3.0.0
- */
-struct _PurpleCredentialManagerClass {
- /*< private >*/
- GObjectClass parent;
-
- /*< public >*/
- void (*registered)(PurpleCredentialManager *manager, PurpleCredentialProvider *provider);
- void (*unregistered)(PurpleCredentialManager *manager, PurpleCredentialProvider *provider);
- void (*active_changed)(PurpleCredentialManager *manager, PurpleCredentialProvider *previous, PurpleCredentialProvider *current);
-
- /*< private >*/
- gpointer reserved[8];
-};
-
-/**
* PurpleCredentialManagerForeachFunc:
* @provider: The #PurpleCredentialProvider instance.
* @data: User supplied data.