diff options
Diffstat (limited to 'src/compositor')
-rw-r--r-- | src/compositor/meta-plugin-manager.c | 19 | ||||
-rw-r--r-- | src/compositor/meta-plugin-manager.h | 2 | ||||
-rw-r--r-- | src/compositor/meta-plugin.c | 52 |
3 files changed, 55 insertions, 18 deletions
diff --git a/src/compositor/meta-plugin-manager.c b/src/compositor/meta-plugin-manager.c index 13171ffaf..1001a01d8 100644 --- a/src/compositor/meta-plugin-manager.c +++ b/src/compositor/meta-plugin-manager.c @@ -63,7 +63,6 @@ meta_plugin_manager_load (MetaPluginManager *plugin_mgr, gchar *path; MetaModule *module; GType plugin_type; - MetaPlugin *plugin; if (g_path_is_absolute (plugin_name)) path = g_strdup (plugin_name); @@ -83,13 +82,25 @@ meta_plugin_manager_load (MetaPluginManager *plugin_mgr, } plugin_type = meta_module_get_plugin_type (module); + meta_plugin_manager_register (plugin_mgr, plugin_type); + + g_type_module_unuse (G_TYPE_MODULE (module)); + g_free (path); +} + +/* + * Registers the given plugin type + */ +void +meta_plugin_manager_register (MetaPluginManager *plugin_mgr, + GType plugin_type) +{ + MetaPlugin *plugin; + plugin_types = g_slist_prepend (plugin_types, GSIZE_TO_POINTER (plugin_type)); plugin = g_object_new (plugin_type, NULL); plugin_mgr->plugins = g_list_prepend (plugin_mgr->plugins, plugin); - - g_type_module_unuse (G_TYPE_MODULE (module)); - g_free (path); } void diff --git a/src/compositor/meta-plugin-manager.h b/src/compositor/meta-plugin-manager.h index 888f2e890..ec09bdd45 100644 --- a/src/compositor/meta-plugin-manager.h +++ b/src/compositor/meta-plugin-manager.h @@ -51,6 +51,8 @@ MetaPluginManager * meta_plugin_manager_get_default (void); void meta_plugin_manager_load (MetaPluginManager *mgr, const gchar *plugin_name); +void meta_plugin_manager_register (MetaPluginManager *mgr, + GType plugin_type); void meta_plugin_manager_initialize (MetaPluginManager *mgr); gboolean meta_plugin_manager_event_simple (MetaPluginManager *mgr, diff --git a/src/compositor/meta-plugin.c b/src/compositor/meta-plugin.c index a7786ffa8..b8af4423e 100644 --- a/src/compositor/meta-plugin.c +++ b/src/compositor/meta-plugin.c @@ -22,6 +22,7 @@ */ #include "meta-plugin.h" +#include "meta-plugin-manager.h" #include "screen.h" #include "display.h" @@ -60,18 +61,6 @@ struct _MetaPluginPrivate }; static void -meta_plugin_dispose (GObject *object) -{ - G_OBJECT_CLASS (meta_plugin_parent_class)->dispose (object); -} - -static void -meta_plugin_finalize (GObject *object) -{ - G_OBJECT_CLASS (meta_plugin_parent_class)->finalize (object); -} - -static void meta_plugin_set_features (MetaPlugin *plugin) { MetaPluginPrivate *priv = plugin->priv; @@ -103,6 +92,27 @@ meta_plugin_set_features (MetaPlugin *plugin) } static void +meta_plugin_constructed (GObject *object) +{ + meta_plugin_set_features (META_PLUGIN (object)); + + if (G_OBJECT_CLASS (meta_plugin_parent_class)->constructed) + G_OBJECT_CLASS (meta_plugin_parent_class)->constructed (object); +} + +static void +meta_plugin_dispose (GObject *object) +{ + G_OBJECT_CLASS (meta_plugin_parent_class)->dispose (object); +} + +static void +meta_plugin_finalize (GObject *object) +{ + G_OBJECT_CLASS (meta_plugin_parent_class)->finalize (object); +} + +static void meta_plugin_set_property (GObject *object, guint prop_id, const GValue *value, @@ -161,6 +171,7 @@ meta_plugin_class_init (MetaPluginClass *klass) { GObjectClass *gobject_class = G_OBJECT_CLASS (klass); + gobject_class->constructed = meta_plugin_constructed; gobject_class->finalize = meta_plugin_finalize; gobject_class->dispose = meta_plugin_dispose; gobject_class->set_property = meta_plugin_set_property; @@ -207,8 +218,6 @@ meta_plugin_init (MetaPlugin *self) MetaPluginPrivate *priv; self->priv = priv = META_PLUGIN_GET_PRIVATE (self); - - meta_plugin_set_features (self); } gulong @@ -540,3 +549,18 @@ meta_plugin_get_screen (MetaPlugin *plugin) return priv->screen; } +/** + * meta_plugin_type_register: + * @plugin_type: a #MetaPlugin type + * + * Register @plugin_type as a compositor plugin type to be used. + * You must call this before calling meta_init(). + */ +void +meta_plugin_type_register (GType plugin_type) +{ + MetaPluginManager *plugin_manager; + + plugin_manager = meta_plugin_manager_get_default (); + meta_plugin_manager_register (plugin_manager, plugin_type); +} |