network-agent: Mark as a final type

Also use subclassing macros

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/3525>
This commit is contained in:
Bilal Elmoussaoui 2024-10-22 13:37:13 +02:00 committed by Marge Bot
parent ab41daefcf
commit 8d8f150685
2 changed files with 27 additions and 53 deletions

View File

@ -51,12 +51,15 @@ typedef struct {
GVariantBuilder builder_vpn; GVariantBuilder builder_vpn;
} ShellAgentRequest; } ShellAgentRequest;
struct _ShellNetworkAgentPrivate { typedef struct _ShellNetworkAgent
{
NMSecretAgentOld parent_instance;
/* <gchar *request_id, ShellAgentRequest *request> */ /* <gchar *request_id, ShellAgentRequest *request> */
GHashTable *requests; GHashTable *requests;
}; } ShellNetworkAgent;
G_DEFINE_TYPE_WITH_PRIVATE (ShellNetworkAgent, shell_network_agent, NM_TYPE_SECRET_AGENT_OLD) G_DEFINE_FINAL_TYPE (ShellNetworkAgent, shell_network_agent, NM_TYPE_SECRET_AGENT_OLD)
static const SecretSchema network_agent_schema = { static const SecretSchema network_agent_schema = {
"org.freedesktop.NetworkManager.Connection", "org.freedesktop.NetworkManager.Connection",
@ -102,24 +105,21 @@ shell_agent_request_cancel (ShellAgentRequest *request)
g_signal_emit (self, signals[SIGNAL_CANCEL_REQUEST], 0, request->request_id); g_signal_emit (self, signals[SIGNAL_CANCEL_REQUEST], 0, request->request_id);
g_hash_table_remove (self->priv->requests, request->request_id); g_hash_table_remove (self->requests, request->request_id);
g_error_free (error); g_error_free (error);
} }
static void static void
shell_network_agent_init (ShellNetworkAgent *agent) shell_network_agent_init (ShellNetworkAgent *agent)
{ {
ShellNetworkAgentPrivate *priv; agent->requests = g_hash_table_new_full (g_str_hash, g_str_equal,
g_free, shell_agent_request_free);
priv = agent->priv = shell_network_agent_get_instance_private (agent);
priv->requests = g_hash_table_new_full (g_str_hash, g_str_equal,
g_free, shell_agent_request_free);
} }
static void static void
shell_network_agent_finalize (GObject *object) shell_network_agent_finalize (GObject *object)
{ {
ShellNetworkAgentPrivate *priv = SHELL_NETWORK_AGENT (object)->priv; ShellNetworkAgent *self = SHELL_NETWORK_AGENT (object);
GError *error; GError *error;
GHashTableIter iter; GHashTableIter iter;
gpointer key; gpointer key;
@ -129,7 +129,7 @@ shell_network_agent_finalize (GObject *object)
NM_SECRET_AGENT_ERROR_AGENT_CANCELED, NM_SECRET_AGENT_ERROR_AGENT_CANCELED,
"The secret agent is going away"); "The secret agent is going away");
g_hash_table_iter_init (&iter, priv->requests); g_hash_table_iter_init (&iter, self->requests);
while (g_hash_table_iter_next (&iter, &key, &value)) while (g_hash_table_iter_next (&iter, &key, &value))
{ {
ShellAgentRequest *request = value; ShellAgentRequest *request = value;
@ -140,7 +140,7 @@ shell_network_agent_finalize (GObject *object)
request->callback_data); request->callback_data);
} }
g_hash_table_destroy (priv->requests); g_hash_table_destroy (self->requests);
g_error_free (error); g_error_free (error);
G_OBJECT_CLASS (shell_network_agent_parent_class)->finalize (object); G_OBJECT_CLASS (shell_network_agent_parent_class)->finalize (object);
@ -238,7 +238,6 @@ get_secrets_keyring_cb (GObject *source,
{ {
ShellAgentRequest *closure; ShellAgentRequest *closure;
ShellNetworkAgent *self; ShellNetworkAgent *self;
ShellNetworkAgentPrivate *priv;
GError *secret_error = NULL; GError *secret_error = NULL;
GError *error = NULL; GError *error = NULL;
GList *items; GList *items;
@ -257,7 +256,6 @@ get_secrets_keyring_cb (GObject *source,
closure = user_data; closure = user_data;
self = closure->self; self = closure->self;
priv = self->priv;
if (secret_error != NULL) if (secret_error != NULL)
{ {
@ -333,7 +331,7 @@ get_secrets_keyring_cb (GObject *source,
closure->callback_data); closure->callback_data);
out: out:
g_hash_table_remove (priv->requests, closure->request_id); g_hash_table_remove (self->requests, closure->request_id);
g_clear_error (&error); g_clear_error (&error);
} }
@ -353,7 +351,7 @@ shell_network_agent_get_secrets (NMSecretAgentOld *agent,
char *request_id; char *request_id;
request_id = g_strdup_printf ("%s/%s", connection_path, setting_name); request_id = g_strdup_printf ("%s/%s", connection_path, setting_name);
if ((request = g_hash_table_lookup (self->priv->requests, request_id)) != NULL) if ((request = g_hash_table_lookup (self->requests, request_id)) != NULL)
{ {
/* We already have a request pending for this (connection, setting) /* We already have a request pending for this (connection, setting)
* Cancel it before starting the new one. * Cancel it before starting the new one.
@ -373,7 +371,7 @@ shell_network_agent_get_secrets (NMSecretAgentOld *agent,
request->callback_data = callback_data; request->callback_data = callback_data;
request->request_id = request_id; request->request_id = request_id;
g_hash_table_replace (self->priv->requests, request->request_id, request); g_hash_table_replace (self->requests, request->request_id, request);
g_variant_builder_init (&request->builder_vpn, G_VARIANT_TYPE ("a{ss}")); g_variant_builder_init (&request->builder_vpn, G_VARIANT_TYPE ("a{ss}"));
@ -404,13 +402,11 @@ shell_network_agent_add_vpn_secret (ShellNetworkAgent *self,
gchar *setting_key, gchar *setting_key,
gchar *setting_value) gchar *setting_value)
{ {
ShellNetworkAgentPrivate *priv;
ShellAgentRequest *request; ShellAgentRequest *request;
g_return_if_fail (SHELL_IS_NETWORK_AGENT (self)); g_return_if_fail (SHELL_IS_NETWORK_AGENT (self));
priv = self->priv; request = g_hash_table_lookup (self->requests, request_id);
request = g_hash_table_lookup (priv->requests, request_id);
g_return_if_fail (request != NULL); g_return_if_fail (request != NULL);
g_variant_builder_add (&request->builder_vpn, "{ss}", setting_key, setting_value); g_variant_builder_add (&request->builder_vpn, "{ss}", setting_key, setting_value);
@ -422,13 +418,11 @@ shell_network_agent_set_password (ShellNetworkAgent *self,
gchar *setting_key, gchar *setting_key,
gchar *setting_value) gchar *setting_value)
{ {
ShellNetworkAgentPrivate *priv;
ShellAgentRequest *request; ShellAgentRequest *request;
g_return_if_fail (SHELL_IS_NETWORK_AGENT (self)); g_return_if_fail (SHELL_IS_NETWORK_AGENT (self));
priv = self->priv; request = g_hash_table_lookup (self->requests, request_id);
request = g_hash_table_lookup (priv->requests, request_id);
g_return_if_fail (request != NULL); g_return_if_fail (request != NULL);
g_variant_dict_insert (request->entries, setting_key, "s", setting_value); g_variant_dict_insert (request->entries, setting_key, "s", setting_value);
@ -439,15 +433,13 @@ shell_network_agent_respond (ShellNetworkAgent *self,
gchar *request_id, gchar *request_id,
ShellNetworkAgentResponse response) ShellNetworkAgentResponse response)
{ {
ShellNetworkAgentPrivate *priv;
ShellAgentRequest *request; ShellAgentRequest *request;
GVariantBuilder builder_connection; GVariantBuilder builder_connection;
GVariant *vpn_secrets, *setting; GVariant *vpn_secrets, *setting;
g_return_if_fail (SHELL_IS_NETWORK_AGENT (self)); g_return_if_fail (SHELL_IS_NETWORK_AGENT (self));
priv = self->priv; request = g_hash_table_lookup (self->requests, request_id);
request = g_hash_table_lookup (priv->requests, request_id);
g_return_if_fail (request != NULL); g_return_if_fail (request != NULL);
if (response == SHELL_NETWORK_AGENT_USER_CANCELED) if (response == SHELL_NETWORK_AGENT_USER_CANCELED)
@ -458,7 +450,7 @@ shell_network_agent_respond (ShellNetworkAgent *self,
request->callback (NM_SECRET_AGENT_OLD (self), request->connection, NULL, error, request->callback_data); request->callback (NM_SECRET_AGENT_OLD (self), request->connection, NULL, error, request->callback_data);
g_error_free (error); g_error_free (error);
g_hash_table_remove (priv->requests, request_id); g_hash_table_remove (self->requests, request_id);
return; return;
} }
@ -470,7 +462,7 @@ shell_network_agent_respond (ShellNetworkAgent *self,
request->callback (NM_SECRET_AGENT_OLD (self), request->connection, NULL, error, request->callback_data); request->callback (NM_SECRET_AGENT_OLD (self), request->connection, NULL, error, request->callback_data);
g_error_free (error); g_error_free (error);
g_hash_table_remove (priv->requests, request_id); g_hash_table_remove (self->requests, request_id);
return; return;
} }
@ -504,7 +496,7 @@ shell_network_agent_respond (ShellNetworkAgent *self,
g_variant_builder_end (&builder_connection), NULL, g_variant_builder_end (&builder_connection), NULL,
request->callback_data); request->callback_data);
g_hash_table_remove (priv->requests, request_id); g_hash_table_remove (self->requests, request_id);
} }
static void static void
@ -570,12 +562,11 @@ shell_network_agent_cancel_get_secrets (NMSecretAgentOld *agent,
const gchar *setting_name) const gchar *setting_name)
{ {
ShellNetworkAgent *self = SHELL_NETWORK_AGENT (agent); ShellNetworkAgent *self = SHELL_NETWORK_AGENT (agent);
ShellNetworkAgentPrivate *priv = self->priv;
gchar *request_id; gchar *request_id;
ShellAgentRequest *request; ShellAgentRequest *request;
request_id = g_strdup_printf ("%s/%s", connection_path, setting_name); request_id = g_strdup_printf ("%s/%s", connection_path, setting_name);
request = g_hash_table_lookup (priv->requests, request_id); request = g_hash_table_lookup (self->requests, request_id);
g_free (request_id); g_free (request_id);
if (!request) if (!request)

View File

@ -15,32 +15,15 @@ typedef enum {
} ShellNetworkAgentResponse; } ShellNetworkAgentResponse;
typedef struct _ShellNetworkAgent ShellNetworkAgent; typedef struct _ShellNetworkAgent ShellNetworkAgent;
typedef struct _ShellNetworkAgentClass ShellNetworkAgentClass;
typedef struct _ShellNetworkAgentPrivate ShellNetworkAgentPrivate;
#define SHELL_TYPE_NETWORK_AGENT (shell_network_agent_get_type ()) #define SHELL_TYPE_NETWORK_AGENT (shell_network_agent_get_type ())
#define SHELL_NETWORK_AGENT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), SHELL_TYPE_NETWORK_AGENT, ShellNetworkAgent))
#define SHELL_IS_NETWORK_AGENT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), SHELL_TYPE_NETWORK_AGENT))
#define SHELL_NETWORK_AGENT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), SHELL_TYPE_NETWORK_AGENT, ShellNetworkAgentClass))
#define SHELL_IS_NETWORK_AGENT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), SHELL_TYPE_NETWORK_AGENT))
#define SHELL_NETWORK_AGENT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), SHELL_TYPE_NETWORK_AGENT, ShellNetworkAgentClass))
struct _ShellNetworkAgent G_DEFINE_AUTOPTR_CLEANUP_FUNC (NMSecretAgentOld, g_object_unref)
{
/*< private >*/
NMSecretAgentOld parent_instance;
ShellNetworkAgentPrivate *priv; G_DECLARE_FINAL_TYPE (ShellNetworkAgent,
}; shell_network_agent,
SHELL, NETWORK_AGENT,
struct _ShellNetworkAgentClass NMSecretAgentOld)
{
/*< private >*/
NMSecretAgentOldClass parent_class;
};
/* used by SHELL_TYPE_NETWORK_AGENT */
GType shell_network_agent_get_type (void);
void shell_network_agent_add_vpn_secret (ShellNetworkAgent *self, void shell_network_agent_add_vpn_secret (ShellNetworkAgent *self,
gchar *request_id, gchar *request_id,