diff --git a/configure.in b/configure.in index 36823882a..f5018ae65 100644 --- a/configure.in +++ b/configure.in @@ -7,7 +7,7 @@ m4_define([mutter_micro_version], [90]) m4_define([mutter_version], [mutter_major_version.mutter_minor_version.mutter_micro_version]) -m4_define([mutter_plugin_api_version], [4]) +m4_define([mutter_plugin_api_version], [3]) AC_INIT([mutter], [mutter_version], [http://bugzilla.gnome.org/enter_bug.cgi?product=mutter]) diff --git a/src/compositor/compositor.c b/src/compositor/compositor.c index c9dc83ac2..c31f62382 100644 --- a/src/compositor/compositor.c +++ b/src/compositor/compositor.c @@ -550,18 +550,7 @@ meta_compositor_manage_screen (MetaCompositor *compositor, info->plugin_mgr = meta_plugin_manager_get (screen); - - if (info->plugin_mgr != meta_plugin_manager_get_default ()) - { - /* The default plugin manager has been initialized during - * global preferences load. - */ - if (!meta_plugin_manager_load (info->plugin_mgr)) - g_critical ("failed to load plugins"); - } - - if (!meta_plugin_manager_initialize (info->plugin_mgr)) - g_critical ("failed to initialize plugins"); + meta_plugin_manager_initialize (info->plugin_mgr); /* * Delay the creation of the overlay window as long as we can, to avoid diff --git a/src/compositor/meta-plugin-manager.c b/src/compositor/meta-plugin-manager.c index eee5ffad2..13171ffaf 100644 --- a/src/compositor/meta-plugin-manager.c +++ b/src/compositor/meta-plugin-manager.c @@ -35,10 +35,7 @@ #include -/* - * There is only one instace of each module per the process. - */ -static GHashTable *plugin_modules = NULL; +static GSList *plugin_types; /* * We have one "default plugin manager" that acts for the first screen, @@ -46,313 +43,68 @@ static GHashTable *plugin_modules = NULL; * plugin managers for each screen. (This is ugly. Probably we should * have one plugin manager and only make the plugins per-screen.) */ - static MetaPluginManager *default_plugin_manager; -static gboolean meta_plugin_manager_reload (MetaPluginManager *plugin_mgr); - struct MetaPluginManager { MetaScreen *screen; - gboolean plugin_load_attempted; - - GList /* MetaPlugin */ *plugins; /* TODO -- maybe use hash table */ - GList *unload; /* Plugins that are disabled and pending unload */ - - guint idle_unload_id; + GList /* MetaPlugin */ *plugins; /* TODO -- maybe use hash table */ }; /* - * Checks that the plugin is compatible with the WM and sets up the plugin - * struct. + * Loads the given plugin. */ -static MetaPlugin * -meta_plugin_load (MetaPluginManager *mgr, - MetaModule *module, - const gchar *params) -{ - MetaPlugin *plugin = NULL; - GType plugin_type = meta_module_get_plugin_type (module); - - if (!plugin_type) - { - g_warning ("Plugin type not registered !!!"); - return NULL; - } - - plugin = g_object_new (plugin_type, - "params", params, - NULL); - - return plugin; -} - -/* - * Attempst to unload a plugin; returns FALSE if plugin cannot be unloaded at - * present (e.g., and effect is in progress) and should be scheduled for - * removal later. - */ -static gboolean -meta_plugin_unload (MetaPlugin *plugin) -{ - if (meta_plugin_running (plugin)) - { - g_object_set (plugin, "disabled", TRUE, NULL); - return FALSE; - } - - g_object_unref (plugin); - - return TRUE; -} - -/* - * Iddle callback to remove plugins that could not be removed directly and are - * pending for removal. - */ -static gboolean -meta_plugin_manager_idle_unload (MetaPluginManager *plugin_mgr) -{ - GList *l = plugin_mgr->unload; - gboolean dont_remove = TRUE; - - while (l) - { - MetaPlugin *plugin = l->data; - - if (meta_plugin_unload (plugin)) - { - /* Remove from list */ - GList *p = l->prev; - GList *n = l->next; - - if (!p) - plugin_mgr->unload = n; - else - p->next = n; - - if (n) - n->prev = p; - - g_list_free_1 (l); - - l = n; - } - else - l = l->next; - } - - if (!plugin_mgr->unload) - { - /* If no more unloads are pending, remove the handler as well */ - dont_remove = FALSE; - plugin_mgr->idle_unload_id = 0; - } - - return dont_remove; -} - -/* - * Unloads all plugins - */ -static void -meta_plugin_manager_unload (MetaPluginManager *plugin_mgr) -{ - GList *plugins = plugin_mgr->plugins; - - while (plugins) - { - MetaPlugin *plugin = plugins->data; - - /* If the plugin could not be removed, move it to the unload list */ - if (!meta_plugin_unload (plugin)) - { - plugin_mgr->unload = g_list_prepend (plugin_mgr->unload, plugin); - - if (!plugin_mgr->idle_unload_id) - { - plugin_mgr->idle_unload_id = g_idle_add ((GSourceFunc) - meta_plugin_manager_idle_unload, - plugin_mgr); - } - } - - plugins = plugins->next; - } - - g_list_free (plugin_mgr->plugins); - plugin_mgr->plugins = NULL; - - plugin_mgr->plugin_load_attempted = FALSE; -} - -static void -prefs_changed_callback (MetaPreference pref, - void *data) -{ - MetaPluginManager *plugin_mgr = data; - - if (pref == META_PREF_CLUTTER_PLUGINS) - { - meta_plugin_manager_reload (plugin_mgr); - } -} - -static MetaModule * -meta_plugin_manager_get_module (const gchar *path) -{ - MetaModule *module = g_hash_table_lookup (plugin_modules, path); - - if (!module && - (module = g_object_new (META_TYPE_MODULE, "path", path, NULL))) - { - g_hash_table_insert (plugin_modules, g_strdup (path), module); - } - - return module; -} - -/* - * Loads all plugins listed in gconf registry. - */ -gboolean -meta_plugin_manager_load (MetaPluginManager *plugin_mgr) +void +meta_plugin_manager_load (MetaPluginManager *plugin_mgr, + const gchar *plugin_name) { const gchar *dpath = MUTTER_PLUGIN_DIR "/"; - GSList *plugins, *fallback = NULL; + gchar *path; + MetaModule *module; + GType plugin_type; + MetaPlugin *plugin; - if (plugin_mgr->plugin_load_attempted) - return TRUE; - plugin_mgr->plugin_load_attempted = TRUE; + if (g_path_is_absolute (plugin_name)) + path = g_strdup (plugin_name); + else + path = g_strconcat (dpath, plugin_name, ".so", NULL); - plugins = meta_prefs_get_clutter_plugins (); - - if (!plugins) + module = g_object_new (META_TYPE_MODULE, "path", path, NULL); + if (!module || !g_type_module_use (G_TYPE_MODULE (module))) { - /* - * If no plugins are specified, try to load the default plugin. + /* This is fatal under the assumption that a monitoring + * process like gnome-session will take over and handle + * our untimely exit. */ - fallback = g_slist_append (fallback, "default"); - plugins = fallback; + g_printerr ("Unable to load plugin module [%s]: %s", + path, g_module_error()); + exit (1); } - while (plugins) - { - gchar *plugin_string; - gchar *params; + plugin_type = meta_module_get_plugin_type (module); + plugin_types = g_slist_prepend (plugin_types, GSIZE_TO_POINTER (plugin_type)); - plugin_string = g_strdup (plugins->data); + plugin = g_object_new (plugin_type, NULL); + plugin_mgr->plugins = g_list_prepend (plugin_mgr->plugins, plugin); - if (plugin_string) - { - MetaModule *module; - gchar *path; - - params = strchr (plugin_string, ':'); - - if (params) - { - *params = 0; - ++params; - } - - if (g_path_is_absolute (plugin_string)) - path = g_strdup (plugin_string); - else - path = g_strconcat (dpath, plugin_string, ".so", NULL); - - module = meta_plugin_manager_get_module (path); - - if (module) - { - gboolean use_succeeded; - - /* - * This dlopens the module and registers the plugin type with the - * GType system, if the module is not already loaded. When we - * create a plugin, the type system also calls g_type_module_use() - * to guarantee the module will not be unloaded during the plugin - * life time. Consequently we can unuse() the module again. - */ - use_succeeded = g_type_module_use (G_TYPE_MODULE (module)); - - if (use_succeeded) - { - MetaPlugin *plugin = meta_plugin_load (plugin_mgr, module, params); - - if (plugin) - plugin_mgr->plugins = g_list_prepend (plugin_mgr->plugins, plugin); - else - g_warning ("Plugin load for [%s] failed", path); - - g_type_module_unuse (G_TYPE_MODULE (module)); - } - } - else - { - /* This is fatal under the assumption that a monitoring - * process like gnome-session will take over and handle - * our untimely exit. - */ - g_printerr ("Unable to load plugin module [%s]: %s", - path, g_module_error()); - exit (1); - } - - g_free (path); - g_free (plugin_string); - } - - plugins = plugins->next; - } - - - if (fallback) - g_slist_free (fallback); - - if (plugin_mgr->plugins != NULL) - { - meta_prefs_add_listener (prefs_changed_callback, plugin_mgr); - return TRUE; - } - - return FALSE; + g_type_module_unuse (G_TYPE_MODULE (module)); + g_free (path); } -/** - * meta_plugin_manager_initialize_early: - * @plugin_mgr: a #MetaPluginManager - * - * This function invokes any plugin handling code that needs to be run - * effectively immediately after we know which plugins are going to be - * used. This means before the process has an X connection, or - * talks to the session manager, for example. - * - * An example intended use is claiming DBus names. - */ -gboolean -meta_plugin_manager_initialize_early (MetaPluginManager *plugin_mgr) -{ - GList *iter; - - for (iter = plugin_mgr->plugins; iter; iter = iter->next) - { - MetaPlugin *plugin = (MetaPlugin*) iter->data; - MetaPluginClass *klass = META_PLUGIN_GET_CLASS (plugin); - - if (klass->early_initialize) - klass->early_initialize (plugin); - } - - return TRUE; -} - -gboolean +void meta_plugin_manager_initialize (MetaPluginManager *plugin_mgr) { GList *iter; + if (!plugin_mgr->plugins) + { + /* + * If no plugins are specified, load the default plugin. + */ + meta_plugin_manager_load (plugin_mgr, "default"); + } + for (iter = plugin_mgr->plugins; iter; iter = iter->next) { MetaPlugin *plugin = (MetaPlugin*) iter->data; @@ -365,26 +117,6 @@ meta_plugin_manager_initialize (MetaPluginManager *plugin_mgr) if (klass->start) klass->start (plugin); } - - return TRUE; -} - -/* - * Reloads all plugins - */ -static gboolean -meta_plugin_manager_reload (MetaPluginManager *plugin_mgr) -{ - /* TODO -- brute force; should we build a list of plugins to load and list of - * plugins to unload? We are probably not going to have large numbers of - * plugins loaded at the same time, so it might not be worth it. - */ - - /* Prevent stale grabs on unloaded plugins */ - meta_check_end_modal (plugin_mgr->screen); - - meta_plugin_manager_unload (plugin_mgr); - return meta_plugin_manager_load (plugin_mgr); } static MetaPluginManager * @@ -392,15 +124,8 @@ meta_plugin_manager_new (MetaScreen *screen) { MetaPluginManager *plugin_mgr; - if (!plugin_modules) - { - plugin_modules = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, - NULL); - } - plugin_mgr = g_new0 (MetaPluginManager, 1); - - plugin_mgr->screen = screen; + plugin_mgr->screen = screen; if (screen) g_object_set_data (G_OBJECT (screen), "meta-plugin-manager", plugin_mgr); @@ -441,7 +166,20 @@ meta_plugin_manager_get (MetaScreen *screen) } else { - return meta_plugin_manager_new (screen); + 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; } } diff --git a/src/compositor/meta-plugin-manager.h b/src/compositor/meta-plugin-manager.h index 5aa8efe15..888f2e890 100644 --- a/src/compositor/meta-plugin-manager.h +++ b/src/compositor/meta-plugin-manager.h @@ -46,12 +46,13 @@ */ typedef struct MetaPluginManager MetaPluginManager; -MetaPluginManager * meta_plugin_manager_get (MetaScreen *screen); +MetaPluginManager * meta_plugin_manager_get (MetaScreen *screen); MetaPluginManager * meta_plugin_manager_get_default (void); -gboolean meta_plugin_manager_load (MetaPluginManager *mgr); -gboolean meta_plugin_manager_initialize_early (MetaPluginManager *plugin_mgr); -gboolean meta_plugin_manager_initialize (MetaPluginManager *plugin_mgr); +void meta_plugin_manager_load (MetaPluginManager *mgr, + const gchar *plugin_name); +void meta_plugin_manager_initialize (MetaPluginManager *mgr); + gboolean meta_plugin_manager_event_simple (MetaPluginManager *mgr, MetaWindowActor *actor, unsigned long event); diff --git a/src/compositor/meta-plugin.c b/src/compositor/meta-plugin.c index d18c8e117..a7786ffa8 100644 --- a/src/compositor/meta-plugin.c +++ b/src/compositor/meta-plugin.c @@ -43,7 +43,6 @@ enum { PROP_0, PROP_SCREEN, - PROP_PARAMS, PROP_FEATURES, PROP_DISABLED, PROP_DEBUG_MODE, @@ -52,7 +51,6 @@ enum struct _MetaPluginPrivate { MetaScreen *screen; - gchar *params; gulong features; gint running; @@ -70,95 +68,38 @@ meta_plugin_dispose (GObject *object) static void meta_plugin_finalize (GObject *object) { - MetaPluginPrivate *priv = META_PLUGIN (object)->priv; - - g_free (priv->params); - priv->params = NULL; - G_OBJECT_CLASS (meta_plugin_parent_class)->finalize (object); } static void -meta_plugin_parse_params (MetaPlugin *plugin) +meta_plugin_set_features (MetaPlugin *plugin) { - char *p; - gulong features = 0; MetaPluginPrivate *priv = plugin->priv; MetaPluginClass *klass = META_PLUGIN_GET_CLASS (plugin); -/* - * Feature flags: identify events that the plugin can handle; a plugin can - * handle one or more events. - */ + priv->features = 0; + + /* + * Feature flags: identify events that the plugin can handle; a plugin can + * handle one or more events. + */ if (klass->minimize) - features |= META_PLUGIN_MINIMIZE; + priv->features |= META_PLUGIN_MINIMIZE; if (klass->maximize) - features |= META_PLUGIN_MAXIMIZE; + priv->features |= META_PLUGIN_MAXIMIZE; if (klass->unmaximize) - features |= META_PLUGIN_UNMAXIMIZE; + priv->features |= META_PLUGIN_UNMAXIMIZE; if (klass->map) - features |= META_PLUGIN_MAP; + priv->features |= META_PLUGIN_MAP; if (klass->destroy) - features |= META_PLUGIN_DESTROY; + priv->features |= META_PLUGIN_DESTROY; if (klass->switch_workspace) - features |= META_PLUGIN_SWITCH_WORKSPACE; - - if (priv->params) - { - gboolean debug = FALSE; - - if ((p = strstr (priv->params, "disable:"))) - { - gchar *d = g_strdup (p+8); - - p = strchr (d, ';'); - - if (p) - *p = 0; - - if (strstr (d, "minimize")) - features &= ~ META_PLUGIN_MINIMIZE; - - if (strstr (d, "maximize")) - features &= ~ META_PLUGIN_MAXIMIZE; - - if (strstr (d, "unmaximize")) - features &= ~ META_PLUGIN_UNMAXIMIZE; - - if (strstr (d, "map")) - features &= ~ META_PLUGIN_MAP; - - if (strstr (d, "destroy")) - features &= ~ META_PLUGIN_DESTROY; - - if (strstr (d, "switch-workspace")) - features &= ~META_PLUGIN_SWITCH_WORKSPACE; - - g_free (d); - } - - if (strstr (priv->params, "debug")) - debug = TRUE; - - if (debug != priv->debug) - { - priv->debug = debug; - - g_object_notify (G_OBJECT (plugin), "debug-mode"); - } - } - - if (features != priv->features) - { - priv->features = features; - - g_object_notify (G_OBJECT (plugin), "features"); - } + priv->features |= META_PLUGIN_SWITCH_WORKSPACE; } static void @@ -174,10 +115,6 @@ meta_plugin_set_property (GObject *object, case PROP_SCREEN: priv->screen = g_value_get_object (value); break; - case PROP_PARAMS: - priv->params = g_value_dup_string (value); - meta_plugin_parse_params (META_PLUGIN (object)); - break; case PROP_DISABLED: priv->disabled = g_value_get_boolean (value); break; @@ -203,9 +140,6 @@ meta_plugin_get_property (GObject *object, case PROP_SCREEN: g_value_set_object (value, priv->screen); break; - case PROP_PARAMS: - g_value_set_string (value, priv->params); - break; case PROP_DISABLED: g_value_set_boolean (value, priv->disabled); break; @@ -240,15 +174,6 @@ meta_plugin_class_init (MetaPluginClass *klass) META_TYPE_SCREEN, G_PARAM_READWRITE)); - g_object_class_install_property (gobject_class, - PROP_PARAMS, - g_param_spec_string ("params", - "Parameters", - "Plugin Parameters", - NULL, - G_PARAM_READWRITE | - G_PARAM_CONSTRUCT)); - g_object_class_install_property (gobject_class, PROP_FEATURES, g_param_spec_ulong ("features", @@ -282,6 +207,8 @@ meta_plugin_init (MetaPlugin *self) MetaPluginPrivate *priv; self->priv = priv = META_PLUGIN_GET_PRIVATE (self); + + meta_plugin_set_features (self); } gulong diff --git a/src/compositor/plugins/README b/src/compositor/plugins/README deleted file mode 100644 index 071d62438..000000000 --- a/src/compositor/plugins/README +++ /dev/null @@ -1,41 +0,0 @@ - -Plugins implement effects associated with WM events, such as window map, -minimizing, maximizing, unmaximizing, destruction and workspace switching. The -plugin API is documented in src/include/compositor-clutter-plugin.h; in -addition the simple plugin can be used as a reference implementation. - -The API is intended to be generic, exposing no implementation details of the WM -to the plugins; this will facilitate reuse without modification with another WM -(there are plans to use the same plugin API with Matchbox 2). - -Multiple plugins can implement the same effect and be loaded at the same time; -however, stacking arbitrary effects in this way might not work as expected; -this is particularly true of more complex effects, such as those for workspace -switching. - -Plugins are installed in ${prefix}/lib/metacity/plugins/clutter; from there the -WM will load plugins listed in the clutter_plugins key in the Metacity gconf -general preferences group. Each entry in preferences has the format - - 'name: optional parameters' - -where 'name' is the name of the library without the .so suffix. - -As noted above, additional parameters can be passed to the plugin via the -preference key. In such case, the plugin name is immediately followed by a -colon, separating it from the parameters. Two common parameters should be -handled by all plugins: - - 'debug' indicates that the plugin is run in a debug mode (what exactly that - means is left to the plugin to determine). - - 'disable' parameter indicates which effects within the plugin should be - disabled; the format of the disable parameter is - - 'disable: effect1[, effect2];' - - where effect1, etc., matches the effects listed in the - compositor-clutter-plugin.h file (currently one of 'map', 'destroy', - 'maximize', 'unmaximize', 'switch-workspace'). Example 'disable: - minimize, maximize;'. - diff --git a/src/core/main.c b/src/core/main.c index 7d90ba715..62790ccdb 100644 --- a/src/core/main.c +++ b/src/core/main.c @@ -481,6 +481,7 @@ main (int argc, char **argv) guint i; GIOChannel *channel; GOptionContext *ctx; + MetaPluginManager *mgr; if (!g_thread_supported ()) g_thread_init (NULL); @@ -536,12 +537,18 @@ main (int argc, char **argv) bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8"); textdomain (GETTEXT_PACKAGE); +#ifdef HAVE_INTROSPECTION + g_irepository_prepend_search_path (MUTTER_PKGLIBDIR); +#endif + /* Parse command line arguments.*/ ctx = meta_parse_options (&argc, &argv, &meta_args); if (meta_args.print_version) version (); + mgr = meta_plugin_manager_get_default (); + /* This must come before the introspect below, so we load all the plugins * in order to get their get_type functions. */ @@ -549,38 +556,20 @@ main (int argc, char **argv) { char **plugins = g_strsplit (meta_args.mutter_plugins, ",", -1); char **plugin; - GSList *plugins_list = NULL; for (plugin = plugins; *plugin; plugin++) { g_strstrip (*plugin); - plugins_list = g_slist_prepend (plugins_list, *plugin); + meta_plugin_manager_load (mgr, *plugin); } - - plugins_list = g_slist_reverse (plugins_list); - meta_prefs_override_clutter_plugins (plugins_list); - - g_slist_free(plugins_list); g_strfreev (plugins); } #ifdef HAVE_INTROSPECTION - g_irepository_prepend_search_path (MUTTER_PKGLIBDIR); if (meta_args.introspect) { GError *error = NULL; - if (meta_args.mutter_plugins) - { - /* We need to load all plugins so that we can call their - * get_type functions. We do not call - * mutter_plugin_manager_initialize because almost nothing else - * is initialized at this point, and we don't plan to run any real - * plugin code. - */ - MetaPluginManager *mgr = meta_plugin_manager_get_default (); - if (!meta_plugin_manager_load (mgr)) - g_critical ("failed to load plugins"); - } + if (!g_irepository_dump (meta_args.introspect, &error)) { g_printerr ("failed to dump: %s\n", error->message); @@ -590,17 +579,6 @@ main (int argc, char **argv) } #endif - /* Early initialization for plugins comes before almost anything - else here */ - { - MetaPluginManager *mgr = meta_plugin_manager_get_default (); - - if (!meta_plugin_manager_load (mgr)) - g_error ("failed to load plugins"); - - meta_plugin_manager_initialize_early (mgr); - } - meta_set_syncing (meta_args.sync || (g_getenv ("MUTTER_SYNC") != NULL)); meta_select_display (meta_args.display_name); diff --git a/src/core/prefs.c b/src/core/prefs.c index 6f050e639..3afc2c23d 100644 --- a/src/core/prefs.c +++ b/src/core/prefs.c @@ -27,7 +27,6 @@ #include "prefs.h" #include "ui.h" #include "util.h" -#include "compositor/meta-plugin-manager.h" #ifdef HAVE_GCONF #include #endif @@ -66,8 +65,6 @@ #define KEY_WORKSPACE_NAME_DIRECTORY "/apps/metacity/workspace_names" #define KEY_WORKSPACE_NAME_PREFIX "/apps/metacity/workspace_names/name_" -#define KEY_CLUTTER_PLUGINS "/apps/mutter/general/clutter_plugins" - #define KEY_LIVE_HIDDEN_WINDOWS "/apps/mutter/general/live_hidden_windows" #define KEY_NO_TAB_POPUP "/apps/metacity/general/no_tab_popup" @@ -115,9 +112,6 @@ static char *terminal_command = NULL; static char *workspace_names[MAX_REASONABLE_WORKSPACES] = { NULL, }; -static gboolean clutter_plugins_overridden = FALSE; -static GSList *clutter_plugins = NULL; - static gboolean live_hidden_windows = FALSE; static gboolean no_tab_popup = FALSE; @@ -1051,7 +1045,6 @@ meta_prefs_init (void) #ifdef HAVE_GCONF GError *err = NULL; gchar **gconf_dir_cursor; - MetaPluginManager *plugin_manager; if (default_client != NULL) return; @@ -1070,19 +1063,6 @@ meta_prefs_init (void) cleanup_error (&err); } - /* The plugin list is special and needs to be handled first */ - - if (!clutter_plugins_overridden) - clutter_plugins = gconf_client_get_list (default_client, KEY_CLUTTER_PLUGINS, - GCONF_VALUE_STRING, &err); - - cleanup_error (&err); - - /* We now initialize plugins so that they can override any preference locations */ - - plugin_manager = meta_plugin_manager_get_default (); - meta_plugin_manager_load (plugin_manager); - /* Pick up initial values. */ handle_preference_init_enum (); @@ -1396,23 +1376,6 @@ change_notify (GConfClient *client, { queue_changed (META_PREF_KEYBINDINGS); } - else if (g_str_equal (key, KEY_CLUTTER_PLUGINS) && !clutter_plugins_overridden) - { - GError *err = NULL; - GSList *l; - - l = gconf_client_get_list (default_client, KEY_CLUTTER_PLUGINS, - GCONF_VALUE_STRING, &err); - - if (!l) - { - cleanup_error (&err); - goto out; - } - - clutter_plugins = l; - queue_changed (META_PREF_CLUTTER_PLUGINS); - } else { meta_topic (META_DEBUG_PREFS, "Key %s doesn't mean anything to Mutter\n", @@ -2006,9 +1969,6 @@ meta_preference_to_string (MetaPreference pref) case META_PREF_FORCE_FULLSCREEN: return "FORCE_FULLSCREEN"; - case META_PREF_CLUTTER_PLUGINS: - return "CLUTTER_PLUGINS"; - case META_PREF_LIVE_HIDDEN_WINDOWS: return "LIVE_HIDDEN_WINDOWS"; @@ -3000,52 +2960,6 @@ meta_prefs_get_force_fullscreen (void) return force_fullscreen; } -/** - * meta_prefs_get_clutter_plugins: - * - * Returns: (transfer none) (element-type utf8): Plugin names to load - */ -GSList * -meta_prefs_get_clutter_plugins (void) -{ - return clutter_plugins; -} - -void -meta_prefs_set_clutter_plugins (GSList *list) -{ -#ifdef HAVE_GCONF - GError *err = NULL; - - gconf_client_set_list (default_client, - KEY_CLUTTER_PLUGINS, - GCONF_VALUE_STRING, - list, - &err); - - if (err) - { - meta_warning (_("Error setting clutter plugin list: %s\n"), - err->message); - g_error_free (err); - } -#endif -} - -void -meta_prefs_override_clutter_plugins (GSList *list) -{ - GSList *l; - - clutter_plugins_overridden = TRUE; - clutter_plugins = NULL; - - for (l = list; l; l = l->next) - clutter_plugins = g_slist_prepend (clutter_plugins, g_strdup(l->data)); - - clutter_plugins = g_slist_reverse (clutter_plugins); -} - gboolean meta_prefs_get_live_hidden_windows (void) { diff --git a/src/include/meta-plugin.h b/src/include/meta-plugin.h index b5ac3ca94..36b7fbfd2 100644 --- a/src/include/meta-plugin.h +++ b/src/include/meta-plugin.h @@ -64,8 +64,6 @@ struct _MetaPluginClass { GObjectClass parent_class; - void (*early_initialize) (MetaPlugin *plugin); - void (*start) (MetaPlugin *plugin); void (*minimize) (MetaPlugin *plugin, diff --git a/src/include/prefs.h b/src/include/prefs.h index 1c60aacff..2578451fa 100644 --- a/src/include/prefs.h +++ b/src/include/prefs.h @@ -61,7 +61,6 @@ typedef enum META_PREF_RESIZE_WITH_RIGHT_BUTTON, META_PREF_EDGE_TILING, META_PREF_FORCE_FULLSCREEN, - META_PREF_CLUTTER_PLUGINS, META_PREF_LIVE_HIDDEN_WINDOWS, META_PREF_NO_TAB_POPUP } MetaPreference; @@ -134,23 +133,6 @@ void meta_prefs_set_compositing_manager (gboolean whether); void meta_prefs_set_force_fullscreen (gboolean whether); -GSList * meta_prefs_get_clutter_plugins (void); - -/** - * Sets the list of plugins persistently in GConf - * - * \param list list of plugin:option pairs - */ -void meta_prefs_set_clutter_plugins (GSList *list); - -/** - * Sets the list of plugins temporarily for this process. The value - * from GConf will be ignored. - * - * \param list list of plugin:option pairs - */ -void meta_prefs_override_clutter_plugins (GSList *list); - gboolean meta_prefs_get_live_hidden_windows (void); void meta_prefs_set_live_hidden_windows (gboolean whether); diff --git a/src/mutter.schemas.in b/src/mutter.schemas.in index 4eae0695a..1a8fad38e 100644 --- a/src/mutter.schemas.in +++ b/src/mutter.schemas.in @@ -22,21 +22,6 @@ - - /schemas/apps/mutter/general/clutter_plugins - /apps/mutter/general/clutter_plugins - mutter - list - string - [default] - - Clutter Plugins - - Plugins to load for the Clutter-based compositing manager. - - - - /schemas/apps/mutter/general/attach_modal_dialogs /apps/mutter/general/attach_modal_dialogs