summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--plugins/test.c8
-rw-r--r--salut/plugin.h14
-rw-r--r--src/plugin-loader.c14
-rw-r--r--src/plugin-loader.h5
-rw-r--r--src/plugin.c11
-rw-r--r--src/salut-connection-manager.c8
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