about summary refs log tree commit diff
path: root/src/settings/nm-settings-plugin.c
diff options
context:
space:
mode:
authorMichael Biebl <biebl@debian.org>2018-09-08 17:44:06 +0200
committerMichael Biebl <biebl@debian.org>2018-09-08 17:44:06 +0200
commit8f7a3cbbdd0c0a48277c341dd3a8ec8743ae9735 (patch)
tree4353551fcb59cc822c3cadf2f4888f70601e8fbf /src/settings/nm-settings-plugin.c
parentcaf1db9d6fbc056cc6c76a24574890f6c7895f3d (diff)
New upstream version 1.13.90 upstream/1.13.90
Diffstat (limited to 'src/settings/nm-settings-plugin.c')
-rw-r--r--src/settings/nm-settings-plugin.c183
1 files changed, 113 insertions, 70 deletions
diff --git a/src/settings/nm-settings-plugin.c b/src/settings/nm-settings-plugin.c
index f6dd2cfb..e7275631 100644
--- a/src/settings/nm-settings-plugin.c
+++ b/src/settings/nm-settings-plugin.c
@@ -15,117 +15,94 @@
  * with this program; if not, write to the Free Software Foundation, Inc.,
  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
  *
- * Copyright (C) 2007 - 2011 Red Hat, Inc.
+ * Copyright (C) 2007 - 2018 Red Hat, Inc.
  * Copyright (C) 2008 Novell, Inc.
  */
 
 #include "nm-default.h"
 
 #include "nm-settings-plugin.h"
+
 #include "nm-settings-connection.h"
 
-G_DEFINE_INTERFACE (NMSettingsPlugin, nm_settings_plugin, G_TYPE_OBJECT)
+/*****************************************************************************/
 
-static void
-nm_settings_plugin_default_init (NMSettingsPluginInterface *g_iface)
-{
-	GType iface_type = G_TYPE_FROM_INTERFACE (g_iface);
-	static gboolean initialized = FALSE;
-
-	if (initialized)
-		return;
-
-	/* Signals */
-	g_signal_new (NM_SETTINGS_PLUGIN_CONNECTION_ADDED,
-	              iface_type,
-	              G_SIGNAL_RUN_FIRST,
-	              G_STRUCT_OFFSET (NMSettingsPluginInterface, connection_added),
-	              NULL, NULL,
-	              g_cclosure_marshal_VOID__OBJECT,
-	              G_TYPE_NONE, 1,
-	              NM_TYPE_SETTINGS_CONNECTION);
-
-	g_signal_new (NM_SETTINGS_PLUGIN_UNMANAGED_SPECS_CHANGED,
-	              iface_type,
-	              G_SIGNAL_RUN_FIRST,
-	              G_STRUCT_OFFSET (NMSettingsPluginInterface, unmanaged_specs_changed),
-	              NULL, NULL,
-	              g_cclosure_marshal_VOID__VOID,
-	              G_TYPE_NONE, 0);
-
-	g_signal_new (NM_SETTINGS_PLUGIN_UNRECOGNIZED_SPECS_CHANGED,
-	              iface_type,
-	              G_SIGNAL_RUN_FIRST,
-	              G_STRUCT_OFFSET (NMSettingsPluginInterface, unrecognized_specs_changed),
-	              NULL, NULL,
-	              g_cclosure_marshal_VOID__VOID,
-	              G_TYPE_NONE, 0);
-
-	initialized = TRUE;
-}
+enum {
+	CONNECTION_ADDED,
+	UNMANAGED_SPECS_CHANGED,
+	UNRECOGNIZED_SPECS_CHANGED,
+
+	LAST_SIGNAL
+};
+
+static guint signals[LAST_SIGNAL] = { 0 };
+
+G_DEFINE_TYPE (NMSettingsPlugin, nm_settings_plugin, G_TYPE_OBJECT)
+
+/*****************************************************************************/
 
 void
-nm_settings_plugin_init (NMSettingsPlugin *config)
+nm_settings_plugin_initialize (NMSettingsPlugin *self)
 {
-	g_return_if_fail (config != NULL);
+	g_return_if_fail (NM_IS_SETTINGS_PLUGIN (self));
 
-	if (NM_SETTINGS_PLUGIN_GET_INTERFACE (config)->init)
-		NM_SETTINGS_PLUGIN_GET_INTERFACE (config)->init (config);
+	if (NM_SETTINGS_PLUGIN_GET_CLASS (self)->initialize)
+		NM_SETTINGS_PLUGIN_GET_CLASS (self)->initialize (self);
 }
 
 GSList *
-nm_settings_plugin_get_connections (NMSettingsPlugin *config)
+nm_settings_plugin_get_connections (NMSettingsPlugin *self)
 {
-	g_return_val_if_fail (config != NULL, NULL);
+	g_return_val_if_fail (NM_IS_SETTINGS_PLUGIN (self), NULL);
 
-	if (NM_SETTINGS_PLUGIN_GET_INTERFACE (config)->get_connections)
-		return NM_SETTINGS_PLUGIN_GET_INTERFACE (config)->get_connections (config);
+	if (NM_SETTINGS_PLUGIN_GET_CLASS (self)->get_connections)
+		return NM_SETTINGS_PLUGIN_GET_CLASS (self)->get_connections (self);
 	return NULL;
 }
 
 gboolean
-nm_settings_plugin_load_connection (NMSettingsPlugin *config,
+nm_settings_plugin_load_connection (NMSettingsPlugin *self,
                                     const char *filename)
 {
-	g_return_val_if_fail (config != NULL, FALSE);
+	g_return_val_if_fail (NM_IS_SETTINGS_PLUGIN (self), FALSE);
 
-	if (NM_SETTINGS_PLUGIN_GET_INTERFACE (config)->load_connection)
-		return NM_SETTINGS_PLUGIN_GET_INTERFACE (config)->load_connection (config, filename);
+	if (NM_SETTINGS_PLUGIN_GET_CLASS (self)->load_connection)
+		return NM_SETTINGS_PLUGIN_GET_CLASS (self)->load_connection (self, filename);
 	return FALSE;
 }
 
 void
-nm_settings_plugin_reload_connections (NMSettingsPlugin *config)
+nm_settings_plugin_reload_connections (NMSettingsPlugin *self)
 {
-	g_return_if_fail (config != NULL);
+	g_return_if_fail (NM_IS_SETTINGS_PLUGIN (self));
 
-	if (NM_SETTINGS_PLUGIN_GET_INTERFACE (config)->reload_connections)
-		NM_SETTINGS_PLUGIN_GET_INTERFACE (config)->reload_connections (config);
+	if (NM_SETTINGS_PLUGIN_GET_CLASS (self)->reload_connections)
+		NM_SETTINGS_PLUGIN_GET_CLASS (self)->reload_connections (self);
 }
 
 GSList *
-nm_settings_plugin_get_unmanaged_specs (NMSettingsPlugin *config)
+nm_settings_plugin_get_unmanaged_specs (NMSettingsPlugin *self)
 {
-	g_return_val_if_fail (config != NULL, NULL);
+	g_return_val_if_fail (NM_IS_SETTINGS_PLUGIN (self), NULL);
 
-	if (NM_SETTINGS_PLUGIN_GET_INTERFACE (config)->get_unmanaged_specs)
-		return NM_SETTINGS_PLUGIN_GET_INTERFACE (config)->get_unmanaged_specs (config);
+	if (NM_SETTINGS_PLUGIN_GET_CLASS (self)->get_unmanaged_specs)
+		return NM_SETTINGS_PLUGIN_GET_CLASS (self)->get_unmanaged_specs (self);
 	return NULL;
 }
 
 GSList *
-nm_settings_plugin_get_unrecognized_specs (NMSettingsPlugin *config)
+nm_settings_plugin_get_unrecognized_specs (NMSettingsPlugin *self)
 {
-	g_return_val_if_fail (config != NULL, NULL);
+	g_return_val_if_fail (NM_IS_SETTINGS_PLUGIN (self), NULL);
 
-	if (NM_SETTINGS_PLUGIN_GET_INTERFACE (config)->get_unrecognized_specs)
-		return NM_SETTINGS_PLUGIN_GET_INTERFACE (config)->get_unrecognized_specs (config);
+	if (NM_SETTINGS_PLUGIN_GET_CLASS (self)->get_unrecognized_specs)
+		return NM_SETTINGS_PLUGIN_GET_CLASS (self)->get_unrecognized_specs (self);
 	return NULL;
 }
 
 /**
  * nm_settings_plugin_add_connection:
- * @config: the #NMSettingsPlugin
+ * @self: the #NMSettingsPlugin
  * @connection: the source connection to create a plugin-specific
  * #NMSettingsConnection from
  * @save_to_disk: %TRUE to save the connection to disk immediately, %FALSE to
@@ -140,22 +117,88 @@ nm_settings_plugin_get_unrecognized_specs (NMSettingsPlugin *config)
  * Returns: the new #NMSettingsConnection or %NULL
  */
 NMSettingsConnection *
-nm_settings_plugin_add_connection (NMSettingsPlugin *config,
+nm_settings_plugin_add_connection (NMSettingsPlugin *self,
                                    NMConnection *connection,
                                    gboolean save_to_disk,
                                    GError **error)
 {
-	NMSettingsPluginInterface *config_interface;
+	NMSettingsPluginClass *klass;
 
-	g_return_val_if_fail (config != NULL, NULL);
+	g_return_val_if_fail (NM_IS_SETTINGS_PLUGIN (self), NULL);
 	g_return_val_if_fail (NM_IS_CONNECTION (connection), NULL);
 
-	config_interface = NM_SETTINGS_PLUGIN_GET_INTERFACE (config);
-	if (!config_interface->add_connection) {
+	klass = NM_SETTINGS_PLUGIN_GET_CLASS (self);
+	if (!klass->add_connection) {
 		g_set_error_literal (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_NOT_SUPPORTED,
 		                     "Plugin does not support adding connections");
 		return NULL;
 	}
 
-	return config_interface->add_connection (config, connection, save_to_disk, error);
+	return klass->add_connection (self, connection, save_to_disk, error);
+}
+
+/*****************************************************************************/
+
+void
+_nm_settings_plugin_emit_signal_connection_added (NMSettingsPlugin *self,
+                                                  NMSettingsConnection *sett_conn)
+{
+	nm_assert (NM_IS_SETTINGS_PLUGIN (self));
+	nm_assert (NM_IS_SETTINGS_CONNECTION (sett_conn));
+
+	g_signal_emit (self, signals[CONNECTION_ADDED], 0, sett_conn);
+}
+
+void
+_nm_settings_plugin_emit_signal_unmanaged_specs_changed (NMSettingsPlugin *self)
+{
+	nm_assert (NM_IS_SETTINGS_PLUGIN (self));
+
+	g_signal_emit (self, signals[UNMANAGED_SPECS_CHANGED], 0);
+}
+
+void
+_nm_settings_plugin_emit_signal_unrecognized_specs_changed (NMSettingsPlugin *self)
+{
+	nm_assert (NM_IS_SETTINGS_PLUGIN (self));
+
+	g_signal_emit (self, signals[UNRECOGNIZED_SPECS_CHANGED], 0);
+}
+
+/*****************************************************************************/
+
+static void
+nm_settings_plugin_init (NMSettingsPlugin *self)
+{
+}
+
+static void
+nm_settings_plugin_class_init (NMSettingsPluginClass *klass)
+{
+	GObjectClass *object_class = G_OBJECT_CLASS (klass);
+
+	signals[CONNECTION_ADDED] =
+	    g_signal_new (NM_SETTINGS_PLUGIN_CONNECTION_ADDED,
+	                  G_OBJECT_CLASS_TYPE (object_class),
+	                  G_SIGNAL_RUN_FIRST,
+	                  0, NULL, NULL,
+	                  g_cclosure_marshal_VOID__OBJECT,
+	                  G_TYPE_NONE, 1,
+	                  NM_TYPE_SETTINGS_CONNECTION);
+
+	signals[UNMANAGED_SPECS_CHANGED] =
+	    g_signal_new (NM_SETTINGS_PLUGIN_UNMANAGED_SPECS_CHANGED,
+	                  G_OBJECT_CLASS_TYPE (object_class),
+	                  G_SIGNAL_RUN_FIRST,
+	                  0, NULL, NULL,
+	                  g_cclosure_marshal_VOID__VOID,
+	                  G_TYPE_NONE, 0);
+
+	signals[UNRECOGNIZED_SPECS_CHANGED] =
+	    g_signal_new (NM_SETTINGS_PLUGIN_UNRECOGNIZED_SPECS_CHANGED,
+	                  G_OBJECT_CLASS_TYPE (object_class),
+	                  G_SIGNAL_RUN_FIRST,
+	                  0, NULL, NULL,
+	                  g_cclosure_marshal_VOID__VOID,
+	                  G_TYPE_NONE, 0);
 }