diff options
-rw-r--r-- | plugins/test.c | 8 | ||||
-rw-r--r-- | salut/plugin.h | 14 | ||||
-rw-r--r-- | src/plugin-loader.c | 14 | ||||
-rw-r--r-- | src/plugin-loader.h | 5 | ||||
-rw-r--r-- | src/plugin.c | 11 | ||||
-rw-r--r-- | src/salut-connection-manager.c | 8 |
6 files changed, 60 insertions, 0 deletions
diff --git a/plugins/test.c b/plugins/test.c index 24fdd98e..80d5646f 100644 --- a/plugins/test.c +++ b/plugins/test.c @@ -26,6 +26,13 @@ test_plugin_class_init (TestPluginClass *klass) { } +static void +initialize (SalutPlugin *plugin, + TpBaseConnectionManager *connection_manager) +{ + DEBUG ("%p on connection manager %p", plugin, connection_manager); +} + static GPtrArray * create_channel_managers (SalutPlugin *plugin, TpBaseConnection *connection) @@ -46,6 +53,7 @@ plugin_iface_init ( iface->name = "Salut test plugin"; iface->version = PACKAGE_VERSION; + iface->initialize = initialize; iface->create_channel_managers = create_channel_managers; } diff --git a/salut/plugin.h b/salut/plugin.h index e028b169..172672fd 100644 --- a/salut/plugin.h +++ b/salut/plugin.h @@ -23,6 +23,7 @@ #include <glib-object.h> +#include <telepathy-glib/base-connection-manager.h> #include <telepathy-glib/base-connection.h> G_BEGIN_DECLS @@ -46,6 +47,10 @@ typedef GPtrArray * (*SalutPluginCreateChannelManagersImpl) ( SalutPlugin *plugin, TpBaseConnection *connection); +typedef void (*SalutPluginInitializeImpl) ( + SalutPlugin *plugin, + TpBaseConnectionManager *connection_manager); + #define SALUT_PLUGIN_CURRENT_VERSION 1 struct _SalutPluginInterface @@ -70,6 +75,11 @@ struct _SalutPluginInterface const gchar *version; /** + * An implementation of salut_plugin_initialize(). + */ + SalutPluginInitializeImpl initialize; + + /** * An implementation of salut_plugin_create_channel_managers(). */ SalutPluginCreateChannelManagersImpl create_channel_managers; @@ -84,6 +94,10 @@ const gchar * salut_plugin_get_name ( const gchar * salut_plugin_get_version ( SalutPlugin *plugin); +void salut_plugin_initialize ( + SalutPlugin *plugin, + TpBaseConnectionManager *connection_manager); + GPtrArray * salut_plugin_create_channel_managers ( SalutPlugin *plugin, TpBaseConnection *connection); diff --git a/src/plugin-loader.c b/src/plugin-loader.c index 3e443d7c..59ef2e27 100644 --- a/src/plugin-loader.c +++ b/src/plugin-loader.c @@ -226,6 +226,20 @@ salut_plugin_loader_dup () return g_object_new (SALUT_TYPE_PLUGIN_LOADER, NULL); } +void +salut_plugin_loader_initialize (SalutPluginLoader *self, + TpBaseConnectionManager *connection_manager) +{ + guint i; + + for (i = 0; i < self->priv->plugins->len; i++) + { + SalutPlugin *plugin = g_ptr_array_index (self->priv->plugins, i); + + salut_plugin_initialize (plugin, connection_manager); + } +} + static void copy_to_other_array (gpointer data, gpointer user_data) diff --git a/src/plugin-loader.h b/src/plugin-loader.h index 8e828cfb..1e3eefa7 100644 --- a/src/plugin-loader.h +++ b/src/plugin-loader.h @@ -22,6 +22,7 @@ #include <glib-object.h> +#include <telepathy-glib/base-connection-manager.h> #include <telepathy-glib/base-connection.h> typedef struct _SalutPluginLoader SalutPluginLoader; @@ -59,6 +60,10 @@ GType salut_plugin_loader_get_type (void); SalutPluginLoader * salut_plugin_loader_dup (void); +void salut_plugin_loader_initialize ( + SalutPluginLoader *self, + TpBaseConnectionManager *connection_manager); + GPtrArray * salut_plugin_loader_create_channel_managers ( SalutPluginLoader *self, TpBaseConnection *connection); diff --git a/src/plugin.c b/src/plugin.c index 174e7a27..8e32c9d5 100644 --- a/src/plugin.c +++ b/src/plugin.c @@ -65,6 +65,17 @@ salut_plugin_get_version (SalutPlugin *plugin) return iface->version; } +void +salut_plugin_initialize (SalutPlugin *plugin, + TpBaseConnectionManager *connection_manager) +{ + SalutPluginInterface *iface = SALUT_PLUGIN_GET_INTERFACE (plugin); + SalutPluginInitializeImpl func = iface->initialize; + + if (func != NULL) + func (plugin, connection_manager); +} + GPtrArray * salut_plugin_create_channel_managers (SalutPlugin *plugin, TpBaseConnection *connection) diff --git a/src/salut-connection-manager.c b/src/salut-connection-manager.c index afa3d47a..b918a5a3 100644 --- a/src/salut-connection-manager.c +++ b/src/salut-connection-manager.c @@ -32,6 +32,7 @@ #include "protocol.h" #include "salut-connection.h" #include "debug.h" +#include "plugin-loader.h" /* properties */ enum @@ -118,12 +119,19 @@ salut_connection_manager_constructed (GObject *object) TpBaseConnectionManager *base = (TpBaseConnectionManager *) self; void (*constructed) (GObject *) = ((GObjectClass *) salut_connection_manager_parent_class)->constructed; + SalutPluginLoader *loader; if (constructed != NULL) constructed (object); self->priv->protocol = salut_protocol_new (self->priv->backend_type); tp_base_connection_manager_add_protocol (base, self->priv->protocol); + + loader = salut_plugin_loader_dup (); + + salut_plugin_loader_initialize (loader, base); + + g_object_unref (loader); } static void |