int main (int argc, char **argv) { GOptionContext *ctx; GError *error = NULL; ctx = meta_get_option_context (); g_option_context_add_main_entries (ctx, mutter_options, GETTEXT_PACKAGE); if (!g_option_context_parse (ctx, &argc, &argv, &error)) { g_printerr ("mutter: %s\n", error->message); exit (1); } if (mutter_plugins) { MetaPluginManager *mgr; char **plugins = g_strsplit (mutter_plugins, ",", -1); char **plugin; mgr = meta_plugin_manager_get_default (); for (plugin = plugins; *plugin; plugin++) { g_strstrip (*plugin); meta_plugin_manager_load (mgr, *plugin); } g_strfreev (plugins); } meta_init (); return meta_run (); }
/** * 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); }
MetaPluginManager * meta_plugin_manager_get (MetaScreen *screen) { MetaPluginManager *plugin_mgr; plugin_mgr = g_object_get_data (G_OBJECT (screen), "meta-plugin-manager"); if (plugin_mgr) return plugin_mgr; if (!default_plugin_manager) meta_plugin_manager_get_default (); if (!default_plugin_manager->screen) { /* The default plugin manager is so far unused, we can recycle it */ default_plugin_manager->screen = screen; g_object_set_data (G_OBJECT (screen), "meta-plugin-manager", default_plugin_manager); return default_plugin_manager; } else { GSList *iter; GType plugin_type; MetaPlugin *plugin; plugin_mgr = meta_plugin_manager_new (screen); for (iter = plugin_types; iter; iter = iter->next) { plugin_type = (GType)GPOINTER_TO_SIZE (iter->data); plugin = g_object_new (plugin_type, "screen", screen, NULL); plugin_mgr->plugins = g_list_prepend (plugin_mgr->plugins, plugin); } return plugin_mgr; } }