diff options
Diffstat (limited to 'src/settings/nm-settings-plugin.c')
| -rw-r--r-- | src/settings/nm-settings-plugin.c | 183 |
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); } |