[mutter] keybindings: Use a GSettings object rather than a schema, to support extensions



commit 68321d9bf4567e075bf23b2f10425f06f5cf2a34
Author: Jasper St. Pierre <jstpierre mecheye net>
Date:   Tue Mar 27 11:42:42 2012 -0300

    keybindings: Use a GSettings object rather than a schema, to support extensions
    
    If we want to support keybindings from extensions installed in the user's
    directory, we can't take a schema, as the GSettings object needs to have
    a special GSettingsSchemaSource.
    
    https://bugzilla.gnome.org/show_bug.cgi?id=673014

 src/core/keybindings-private.h |    3 +-
 src/core/keybindings.c         |  179 ++++++++++++++++++++-------------------
 src/core/prefs.c               |   36 ++++-----
 src/meta/display.h             |    2 +-
 src/meta/prefs.h               |    3 +-
 5 files changed, 113 insertions(+), 110 deletions(-)
---
diff --git a/src/core/keybindings-private.h b/src/core/keybindings-private.h
index 507b162..7be9c24 100644
--- a/src/core/keybindings-private.h
+++ b/src/core/keybindings-private.h
@@ -29,6 +29,7 @@
 #ifndef META_KEYBINDINGS_PRIVATE_H
 #define META_KEYBINDINGS_PRIVATE_H
 
+#include <gio/gio.h>
 #include <meta/keybindings.h>
 
 struct _MetaKeyHandler
@@ -73,7 +74,7 @@ void     meta_display_process_mapping_event (MetaDisplay *display,
                                              XEvent      *event);
 
 gboolean meta_prefs_add_keybinding          (const char           *name,
-                                             const char           *schema,
+                                             GSettings            *settings,
                                              MetaKeyBindingAction  action,
                                              MetaKeyBindingFlags   flags);
 
diff --git a/src/core/keybindings.c b/src/core/keybindings.c
index 6714e16..cb73d14 100644
--- a/src/core/keybindings.c
+++ b/src/core/keybindings.c
@@ -53,7 +53,7 @@ static gboolean all_bindings_disabled = FALSE;
 
 static gboolean add_builtin_keybinding (MetaDisplay          *display,
                                         const char           *name,
-                                        const char           *schema,
+                                        GSettings            *settings,
                                         MetaKeyBindingFlags   flags,
                                         MetaKeyBindingAction  action,
                                         MetaKeyHandlerFunc    handler,
@@ -546,7 +546,7 @@ display_get_keybinding (MetaDisplay  *display,
 static gboolean
 add_keybinding_internal (MetaDisplay          *display,
                          const char           *name,
-                         const char           *schema,
+                         GSettings            *settings,
                          MetaKeyBindingFlags   flags,
                          MetaKeyBindingAction  action,
                          MetaKeyHandlerFunc    func,
@@ -556,7 +556,7 @@ add_keybinding_internal (MetaDisplay          *display,
 {
   MetaKeyHandler *handler;
 
-  if (!meta_prefs_add_keybinding (name, schema, action, flags))
+  if (!meta_prefs_add_keybinding (name, settings, action, flags))
     return FALSE;
 
   handler = g_new0 (MetaKeyHandler, 1);
@@ -576,13 +576,13 @@ add_keybinding_internal (MetaDisplay          *display,
 static gboolean
 add_builtin_keybinding (MetaDisplay          *display,
                         const char           *name,
-                        const char           *schema,
+                        GSettings            *settings,
                         MetaKeyBindingFlags   flags,
                         MetaKeyBindingAction  action,
                         MetaKeyHandlerFunc    handler,
                         int                   handler_arg)
 {
-  return add_keybinding_internal (display, name, schema,
+  return add_keybinding_internal (display, name, settings,
                                   flags | META_KEY_BINDING_BUILTIN,
                                   action, handler, handler_arg, NULL, NULL);
 }
@@ -591,7 +591,7 @@ add_builtin_keybinding (MetaDisplay          *display,
  * meta_display_add_keybinding:
  * @display: a #MetaDisplay
  * @name: the binding's name
- * @schema: the #GSettings schema where @name is stored
+ * @settings: the #GSettings object where @name is stored
  * @flags: flags to specify binding details
  * @handler: function to run when the keybinding is invoked
  * @user_data: the data to pass to @handler
@@ -617,13 +617,13 @@ add_builtin_keybinding (MetaDisplay          *display,
 gboolean
 meta_display_add_keybinding (MetaDisplay         *display,
                              const char          *name,
-                             const char          *schema,
+                             GSettings           *settings,
                              MetaKeyBindingFlags  flags,
                              MetaKeyHandlerFunc   handler,
                              gpointer             user_data,
                              GDestroyNotify       free_data)
 {
-  return add_keybinding_internal (display, name, schema, flags,
+  return add_keybinding_internal (display, name, settings, flags,
                                   META_KEYBINDING_ACTION_NONE,
                                   handler, 0, user_data, free_data);
 }
@@ -3644,104 +3644,106 @@ init_builtin_key_bindings (MetaDisplay *display)
 {
 #define REVERSES_AND_REVERSED (META_KEY_BINDING_REVERSES | \
                                META_KEY_BINDING_IS_REVERSED)
+  GSettings *common_keybindings = g_settings_new (SCHEMA_COMMON_KEYBINDINGS);
+  GSettings *mutter_keybindings = g_settings_new (SCHEMA_MUTTER_KEYBINDINGS);
 
   add_builtin_keybinding (display,
                           "switch-to-workspace-1",
-                          SCHEMA_COMMON_KEYBINDINGS,
+                          common_keybindings,
                           META_KEY_BINDING_NONE,
                           META_KEYBINDING_ACTION_WORKSPACE_1,
                           handle_switch_to_workspace, 0);
   add_builtin_keybinding (display,
                           "switch-to-workspace-2",
-                          SCHEMA_COMMON_KEYBINDINGS,
+                          common_keybindings,
                           META_KEY_BINDING_NONE,
                           META_KEYBINDING_ACTION_WORKSPACE_2,
                           handle_switch_to_workspace, 1);
   add_builtin_keybinding (display,
                           "switch-to-workspace-3",
-                          SCHEMA_COMMON_KEYBINDINGS,
+                          common_keybindings,
                           META_KEY_BINDING_NONE,
                           META_KEYBINDING_ACTION_WORKSPACE_3,
                           handle_switch_to_workspace, 2);
   add_builtin_keybinding (display,
                           "switch-to-workspace-4",
-                          SCHEMA_COMMON_KEYBINDINGS,
+                          common_keybindings,
                           META_KEY_BINDING_NONE,
                           META_KEYBINDING_ACTION_WORKSPACE_4,
                           handle_switch_to_workspace, 3);
   add_builtin_keybinding (display,
                           "switch-to-workspace-5",
-                          SCHEMA_COMMON_KEYBINDINGS,
+                          common_keybindings,
                           META_KEY_BINDING_NONE,
                           META_KEYBINDING_ACTION_WORKSPACE_5,
                           handle_switch_to_workspace, 4);
   add_builtin_keybinding (display,
                           "switch-to-workspace-6",
-                          SCHEMA_COMMON_KEYBINDINGS,
+                          common_keybindings,
                           META_KEY_BINDING_NONE,
                           META_KEYBINDING_ACTION_WORKSPACE_6,
                           handle_switch_to_workspace, 5);
   add_builtin_keybinding (display,
                           "switch-to-workspace-7",
-                          SCHEMA_COMMON_KEYBINDINGS,
+                          common_keybindings,
                           META_KEY_BINDING_NONE,
                           META_KEYBINDING_ACTION_WORKSPACE_7,
                           handle_switch_to_workspace, 6);
   add_builtin_keybinding (display,
                           "switch-to-workspace-8",
-                          SCHEMA_COMMON_KEYBINDINGS,
+                          common_keybindings,
                           META_KEY_BINDING_NONE,
                           META_KEYBINDING_ACTION_WORKSPACE_8,
                           handle_switch_to_workspace, 7);
   add_builtin_keybinding (display,
                           "switch-to-workspace-9",
-                          SCHEMA_COMMON_KEYBINDINGS,
+                          common_keybindings,
                           META_KEY_BINDING_NONE,
                           META_KEYBINDING_ACTION_WORKSPACE_9,
                           handle_switch_to_workspace, 8);
   add_builtin_keybinding (display,
                           "switch-to-workspace-10",
-                          SCHEMA_COMMON_KEYBINDINGS,
+                          common_keybindings,
                           META_KEY_BINDING_NONE,
                           META_KEYBINDING_ACTION_WORKSPACE_10,
                           handle_switch_to_workspace, 9);
   add_builtin_keybinding (display,
                           "switch-to-workspace-11",
-                          SCHEMA_COMMON_KEYBINDINGS,
+                          common_keybindings,
                           META_KEY_BINDING_NONE,
                           META_KEYBINDING_ACTION_WORKSPACE_11,
                           handle_switch_to_workspace, 10);
   add_builtin_keybinding (display,
                           "switch-to-workspace-12",
-                          SCHEMA_COMMON_KEYBINDINGS,
+                          common_keybindings,
                           META_KEY_BINDING_NONE,
                           META_KEYBINDING_ACTION_WORKSPACE_12,
                           handle_switch_to_workspace, 11);
 
   add_builtin_keybinding (display,
                           "switch-to-workspace-left",
-                          SCHEMA_COMMON_KEYBINDINGS,
+                          common_keybindings,
                           META_KEY_BINDING_NONE,
                           META_KEYBINDING_ACTION_WORKSPACE_LEFT,
                           handle_switch_to_workspace, META_MOTION_LEFT);
 
   add_builtin_keybinding (display,
                           "switch-to-workspace-right",
-                          SCHEMA_COMMON_KEYBINDINGS,
+                          common_keybindings,
                           META_KEY_BINDING_NONE,
                           META_KEYBINDING_ACTION_WORKSPACE_RIGHT,
                           handle_switch_to_workspace, META_MOTION_RIGHT);
 
   add_builtin_keybinding (display,
                           "switch-to-workspace-up",
-                          SCHEMA_COMMON_KEYBINDINGS,
+                          common_keybindings,
                           META_KEY_BINDING_NONE,
                           META_KEYBINDING_ACTION_WORKSPACE_UP,
                           handle_switch_to_workspace, META_MOTION_UP);
 
   add_builtin_keybinding (display,
                           "switch-to-workspace-down",
-                          SCHEMA_COMMON_KEYBINDINGS,
+                          common_keybindings,
                           META_KEY_BINDING_NONE,
                           META_KEYBINDING_ACTION_WORKSPACE_DOWN,
                           handle_switch_to_workspace, META_MOTION_DOWN);
@@ -3759,84 +3761,84 @@ init_builtin_key_bindings (MetaDisplay *display)
 
   add_builtin_keybinding (display,
                           "switch-group",
-                          SCHEMA_COMMON_KEYBINDINGS,
+                          common_keybindings,
                           META_KEY_BINDING_REVERSES,
                           META_KEYBINDING_ACTION_SWITCH_GROUP,
                           handle_switch, META_TAB_LIST_GROUP);
 
   add_builtin_keybinding (display,
                           "switch-group-backward",
-                          SCHEMA_COMMON_KEYBINDINGS,
+                          common_keybindings,
                           REVERSES_AND_REVERSED,
                           META_KEYBINDING_ACTION_SWITCH_GROUP_BACKWARD,
                           handle_switch, META_TAB_LIST_GROUP);
 
   add_builtin_keybinding (display,
                           "switch-windows",
-                          SCHEMA_COMMON_KEYBINDINGS,
+                          common_keybindings,
                           META_KEY_BINDING_REVERSES,
                           META_KEYBINDING_ACTION_SWITCH_WINDOWS,
                           handle_switch, META_TAB_LIST_NORMAL);
 
   add_builtin_keybinding (display,
                           "switch-windows-backward",
-                          SCHEMA_COMMON_KEYBINDINGS,
+                          common_keybindings,
                           REVERSES_AND_REVERSED,
                           META_KEYBINDING_ACTION_SWITCH_WINDOWS_BACKWARD,
                           handle_switch, META_TAB_LIST_NORMAL);
 
   add_builtin_keybinding (display,
                           "switch-panels",
-                          SCHEMA_COMMON_KEYBINDINGS,
+                          common_keybindings,
                           META_KEY_BINDING_REVERSES,
                           META_KEYBINDING_ACTION_SWITCH_PANELS,
                           handle_switch, META_TAB_LIST_DOCKS);
 
   add_builtin_keybinding (display,
                           "switch-panels-backward",
-                          SCHEMA_COMMON_KEYBINDINGS,
+                          common_keybindings,
                           REVERSES_AND_REVERSED,
                           META_KEYBINDING_ACTION_SWITCH_PANELS_BACKWARD,
                           handle_switch, META_TAB_LIST_DOCKS);
 
   add_builtin_keybinding (display,
                           "cycle-group",
-                          SCHEMA_COMMON_KEYBINDINGS,
+                          common_keybindings,
                           META_KEY_BINDING_REVERSES,
                           META_KEYBINDING_ACTION_CYCLE_GROUP,
                           handle_cycle, META_TAB_LIST_GROUP);
 
   add_builtin_keybinding (display,
                           "cycle-group-backward",
-                          SCHEMA_COMMON_KEYBINDINGS,
+                          common_keybindings,
                           REVERSES_AND_REVERSED,
                           META_KEYBINDING_ACTION_CYCLE_GROUP_BACKWARD,
                           handle_cycle, META_TAB_LIST_GROUP);
 
   add_builtin_keybinding (display,
                           "cycle-windows",
-                          SCHEMA_COMMON_KEYBINDINGS,
+                          common_keybindings,
                           META_KEY_BINDING_REVERSES,
                           META_KEYBINDING_ACTION_CYCLE_WINDOWS,
                           handle_cycle, META_TAB_LIST_NORMAL);
 
   add_builtin_keybinding (display,
                           "cycle-windows-backward",
-                          SCHEMA_COMMON_KEYBINDINGS,
+                          common_keybindings,
                           REVERSES_AND_REVERSED,
                           META_KEYBINDING_ACTION_CYCLE_WINDOWS_BACKWARD,
                           handle_cycle, META_TAB_LIST_NORMAL);
 
   add_builtin_keybinding (display,
                           "cycle-panels",
-                          SCHEMA_COMMON_KEYBINDINGS,
+                          common_keybindings,
                           META_KEY_BINDING_REVERSES,
                           META_KEYBINDING_ACTION_CYCLE_PANELS,
                           handle_cycle, META_TAB_LIST_DOCKS);
 
   add_builtin_keybinding (display,
                           "cycle-panels-backward",
-                          SCHEMA_COMMON_KEYBINDINGS,
+                          common_keybindings,
                           REVERSES_AND_REVERSED,
                           META_KEYBINDING_ACTION_CYCLE_PANELS_BACKWARD,
                           handle_cycle, META_TAB_LIST_DOCKS);
@@ -3849,14 +3851,14 @@ init_builtin_key_bindings (MetaDisplay *display)
  */
   add_builtin_keybinding (display,
                           "tab-popup-select",
-                          SCHEMA_MUTTER_KEYBINDINGS,
+                          mutter_keybindings,
                           META_KEY_BINDING_NONE,
                           META_KEYBINDING_ACTION_TAB_POPUP_SELECT,
                           handle_tab_popup_select, 0);
 
   add_builtin_keybinding (display,
                           "tab-popup-cancel",
-                          SCHEMA_MUTTER_KEYBINDINGS,
+                          mutter_keybindings,
                           META_KEY_BINDING_NONE,
                           META_KEYBINDING_ACTION_TAB_POPUP_CANCEL,
                           handle_tab_popup_cancel, 0);
@@ -3865,35 +3867,35 @@ init_builtin_key_bindings (MetaDisplay *display)
 
   add_builtin_keybinding (display,
                           "show-desktop",
-                          SCHEMA_COMMON_KEYBINDINGS,
+                          common_keybindings,
                           META_KEY_BINDING_NONE,
                           META_KEYBINDING_ACTION_SHOW_DESKTOP,
                           handle_show_desktop, 0);
 
   add_builtin_keybinding (display,
                           "panel-main-menu",
-                          SCHEMA_COMMON_KEYBINDINGS,
+                          common_keybindings,
                           META_KEY_BINDING_NONE,
                           META_KEYBINDING_ACTION_PANEL_MAIN_MENU,
                           handle_panel, META_KEYBINDING_ACTION_PANEL_MAIN_MENU);
 
   add_builtin_keybinding (display,
                           "panel-run-dialog",
-                          SCHEMA_COMMON_KEYBINDINGS,
+                          common_keybindings,
                           META_KEY_BINDING_NONE,
                           META_KEYBINDING_ACTION_PANEL_RUN_DIALOG,
                           handle_panel, META_KEYBINDING_ACTION_PANEL_RUN_DIALOG);
 
   add_builtin_keybinding (display,
                           "toggle-recording",
-                          SCHEMA_MUTTER_KEYBINDINGS,
+                          mutter_keybindings,
                           META_KEY_BINDING_NONE,
                           META_KEYBINDING_ACTION_TOGGLE_RECORDING,
                           handle_toggle_recording, 0);
 
   add_builtin_keybinding (display,
                           "set-spew-mark",
-                          SCHEMA_COMMON_KEYBINDINGS,
+                          common_keybindings,
                           META_KEY_BINDING_NONE,
                           META_KEYBINDING_ACTION_SET_SPEW_MARK,
                           handle_set_spew_mark, 0);
@@ -3908,311 +3910,314 @@ init_builtin_key_bindings (MetaDisplay *display)
 
   add_builtin_keybinding (display,
                           "activate-window-menu",
-                          SCHEMA_COMMON_KEYBINDINGS,
+                          common_keybindings,
                           META_KEY_BINDING_PER_WINDOW,
                           META_KEYBINDING_ACTION_ACTIVATE_WINDOW_MENU,
                           handle_activate_window_menu, 0);
 
   add_builtin_keybinding (display,
                           "toggle-fullscreen",
-                          SCHEMA_COMMON_KEYBINDINGS,
+                          common_keybindings,
                           META_KEY_BINDING_PER_WINDOW,
                           META_KEYBINDING_ACTION_TOGGLE_FULLSCREEN,
                           handle_toggle_fullscreen, 0);
 
   add_builtin_keybinding (display,
                           "toggle-maximized",
-                          SCHEMA_COMMON_KEYBINDINGS,
+                          common_keybindings,
                           META_KEY_BINDING_PER_WINDOW,
                           META_KEYBINDING_ACTION_TOGGLE_MAXIMIZED,
                           handle_toggle_maximized, 0);
 
   add_builtin_keybinding (display,
                           "toggle-tiled-left",
-                          SCHEMA_MUTTER_KEYBINDINGS,
+                          mutter_keybindings,
                           META_KEY_BINDING_PER_WINDOW,
                           META_KEYBINDING_ACTION_TOGGLE_TILED_LEFT,
                           handle_toggle_tiled, META_TILE_LEFT);
 
   add_builtin_keybinding (display,
                           "toggle-tiled-right",
-                          SCHEMA_MUTTER_KEYBINDINGS,
+                          mutter_keybindings,
                           META_KEY_BINDING_PER_WINDOW,
                           META_KEYBINDING_ACTION_TOGGLE_TILED_RIGHT,
                           handle_toggle_tiled, META_TILE_RIGHT);
 
   add_builtin_keybinding (display,
                           "toggle-above",
-                          SCHEMA_COMMON_KEYBINDINGS,
+                          common_keybindings,
                           META_KEY_BINDING_PER_WINDOW,
                           META_KEYBINDING_ACTION_TOGGLE_ABOVE,
                           handle_toggle_above, 0);
 
   add_builtin_keybinding (display,
                           "maximize",
-                          SCHEMA_COMMON_KEYBINDINGS,
+                          common_keybindings,
                           META_KEY_BINDING_PER_WINDOW,
                           META_KEYBINDING_ACTION_MAXIMIZE,
                           handle_maximize, 0);
 
   add_builtin_keybinding (display,
                           "unmaximize",
-                          SCHEMA_COMMON_KEYBINDINGS,
+                          common_keybindings,
                           META_KEY_BINDING_PER_WINDOW,
                           META_KEYBINDING_ACTION_UNMAXIMIZE,
                           handle_unmaximize, 0);
 
   add_builtin_keybinding (display,
                           "toggle-shaded",
-                          SCHEMA_COMMON_KEYBINDINGS,
+                          common_keybindings,
                           META_KEY_BINDING_PER_WINDOW,
                           META_KEYBINDING_ACTION_TOGGLE_SHADED,
                           handle_toggle_shaded, 0);
 
   add_builtin_keybinding (display,
                           "minimize",
-                          SCHEMA_COMMON_KEYBINDINGS,
+                          common_keybindings,
                           META_KEY_BINDING_PER_WINDOW,
                           META_KEYBINDING_ACTION_MINIMIZE,
                           handle_minimize, 0);
 
   add_builtin_keybinding (display,
                           "close",
-                          SCHEMA_COMMON_KEYBINDINGS,
+                          common_keybindings,
                           META_KEY_BINDING_PER_WINDOW,
                           META_KEYBINDING_ACTION_CLOSE,
                           handle_close, 0);
 
   add_builtin_keybinding (display,
                           "begin-move",
-                          SCHEMA_COMMON_KEYBINDINGS,
+                          common_keybindings,
                           META_KEY_BINDING_PER_WINDOW,
                           META_KEYBINDING_ACTION_BEGIN_MOVE,
                           handle_begin_move, 0);
 
   add_builtin_keybinding (display,
                           "begin-resize",
-                          SCHEMA_COMMON_KEYBINDINGS,
+                          common_keybindings,
                           META_KEY_BINDING_PER_WINDOW,
                           META_KEYBINDING_ACTION_BEGIN_RESIZE,
                           handle_begin_resize, 0);
 
   add_builtin_keybinding (display,
                           "toggle-on-all-workspaces",
-                          SCHEMA_COMMON_KEYBINDINGS,
+                          common_keybindings,
                           META_KEY_BINDING_PER_WINDOW,
                           META_KEYBINDING_ACTION_TOGGLE_ON_ALL_WORKSPACES,
                           handle_toggle_on_all_workspaces, 0);
 
   add_builtin_keybinding (display,
                           "move-to-workspace-1",
-                          SCHEMA_COMMON_KEYBINDINGS,
+                          common_keybindings,
                           META_KEY_BINDING_PER_WINDOW,
                           META_KEYBINDING_ACTION_MOVE_TO_WORKSPACE_1,
                           handle_move_to_workspace, 0);
 
   add_builtin_keybinding (display,
                           "move-to-workspace-2",
-                          SCHEMA_COMMON_KEYBINDINGS,
+                          common_keybindings,
                           META_KEY_BINDING_PER_WINDOW,
                           META_KEYBINDING_ACTION_MOVE_TO_WORKSPACE_2,
                           handle_move_to_workspace, 1);
 
   add_builtin_keybinding (display,
                           "move-to-workspace-3",
-                          SCHEMA_COMMON_KEYBINDINGS,
+                          common_keybindings,
                           META_KEY_BINDING_PER_WINDOW,
                           META_KEYBINDING_ACTION_MOVE_TO_WORKSPACE_3,
                           handle_move_to_workspace, 2);
 
   add_builtin_keybinding (display,
                           "move-to-workspace-4",
-                          SCHEMA_COMMON_KEYBINDINGS,
+                          common_keybindings,
                           META_KEY_BINDING_PER_WINDOW,
                           META_KEYBINDING_ACTION_MOVE_TO_WORKSPACE_4,
                           handle_move_to_workspace, 3);
 
   add_builtin_keybinding (display,
                           "move-to-workspace-5",
-                          SCHEMA_COMMON_KEYBINDINGS,
+                          common_keybindings,
                           META_KEY_BINDING_PER_WINDOW,
                           META_KEYBINDING_ACTION_MOVE_TO_WORKSPACE_5,
                           handle_move_to_workspace, 4);
 
   add_builtin_keybinding (display,
                           "move-to-workspace-6",
-                          SCHEMA_COMMON_KEYBINDINGS,
+                          common_keybindings,
                           META_KEY_BINDING_PER_WINDOW,
                           META_KEYBINDING_ACTION_MOVE_TO_WORKSPACE_6,
                           handle_move_to_workspace, 5);
 
   add_builtin_keybinding (display,
                           "move-to-workspace-7",
-                          SCHEMA_COMMON_KEYBINDINGS,
+                          common_keybindings,
                           META_KEY_BINDING_PER_WINDOW,
                           META_KEYBINDING_ACTION_MOVE_TO_WORKSPACE_7,
                           handle_move_to_workspace, 6);
 
   add_builtin_keybinding (display,
                           "move-to-workspace-8",
-                          SCHEMA_COMMON_KEYBINDINGS,
+                          common_keybindings,
                           META_KEY_BINDING_PER_WINDOW,
                           META_KEYBINDING_ACTION_MOVE_TO_WORKSPACE_8,
                           handle_move_to_workspace, 7);
 
   add_builtin_keybinding (display,
                           "move-to-workspace-9",
-                          SCHEMA_COMMON_KEYBINDINGS,
+                          common_keybindings,
                           META_KEY_BINDING_PER_WINDOW,
                           META_KEYBINDING_ACTION_MOVE_TO_WORKSPACE_9,
                           handle_move_to_workspace, 8);
 
   add_builtin_keybinding (display,
                           "move-to-workspace-10",
-                          SCHEMA_COMMON_KEYBINDINGS,
+                          common_keybindings,
                           META_KEY_BINDING_PER_WINDOW,
                           META_KEYBINDING_ACTION_MOVE_TO_WORKSPACE_10,
                           handle_move_to_workspace, 9);
 
   add_builtin_keybinding (display,
                           "move-to-workspace-11",
-                          SCHEMA_COMMON_KEYBINDINGS,
+                          common_keybindings,
                           META_KEY_BINDING_PER_WINDOW,
                           META_KEYBINDING_ACTION_MOVE_TO_WORKSPACE_11,
                           handle_move_to_workspace, 10);
 
   add_builtin_keybinding (display,
                           "move-to-workspace-12",
-                          SCHEMA_COMMON_KEYBINDINGS,
+                          common_keybindings,
                           META_KEY_BINDING_PER_WINDOW,
                           META_KEYBINDING_ACTION_MOVE_TO_WORKSPACE_12,
                           handle_move_to_workspace, 11);
 
   add_builtin_keybinding (display,
                           "move-to-workspace-left",
-                          SCHEMA_COMMON_KEYBINDINGS,
+                          common_keybindings,
                           META_KEY_BINDING_PER_WINDOW,
                           META_KEYBINDING_ACTION_MOVE_TO_WORKSPACE_LEFT,
                           handle_move_to_workspace, META_MOTION_LEFT);
 
   add_builtin_keybinding (display,
                           "move-to-workspace-right",
-                          SCHEMA_COMMON_KEYBINDINGS,
+                          common_keybindings,
                           META_KEY_BINDING_PER_WINDOW,
                           META_KEYBINDING_ACTION_MOVE_TO_WORKSPACE_RIGHT,
                           handle_move_to_workspace, META_MOTION_RIGHT);
 
   add_builtin_keybinding (display,
                           "move-to-workspace-up",
-                          SCHEMA_COMMON_KEYBINDINGS,
+                          common_keybindings,
                           META_KEY_BINDING_PER_WINDOW,
                           META_KEYBINDING_ACTION_MOVE_TO_WORKSPACE_UP,
                           handle_move_to_workspace, META_MOTION_UP);
 
   add_builtin_keybinding (display,
                           "move-to-workspace-down",
-                          SCHEMA_COMMON_KEYBINDINGS,
+                          common_keybindings,
                           META_KEY_BINDING_PER_WINDOW,
                           META_KEYBINDING_ACTION_MOVE_TO_WORKSPACE_DOWN,
                           handle_move_to_workspace, META_MOTION_DOWN);
 
   add_builtin_keybinding (display,
                           "raise-or-lower",
-                          SCHEMA_COMMON_KEYBINDINGS,
+                          common_keybindings,
                           META_KEY_BINDING_PER_WINDOW,
                           META_KEYBINDING_ACTION_RAISE_OR_LOWER,
                           handle_raise_or_lower, 0);
 
   add_builtin_keybinding (display,
                           "raise",
-                          SCHEMA_COMMON_KEYBINDINGS,
+                          common_keybindings,
                           META_KEY_BINDING_PER_WINDOW,
                           META_KEYBINDING_ACTION_RAISE,
                           handle_raise, 0);
 
   add_builtin_keybinding (display,
                           "lower",
-                          SCHEMA_COMMON_KEYBINDINGS,
+                          common_keybindings,
                           META_KEY_BINDING_PER_WINDOW,
                           META_KEYBINDING_ACTION_LOWER,
                           handle_lower, 0);
 
   add_builtin_keybinding (display,
                           "maximize-vertically",
-                          SCHEMA_COMMON_KEYBINDINGS,
+                          common_keybindings,
                           META_KEY_BINDING_PER_WINDOW,
                           META_KEYBINDING_ACTION_MAXIMIZE_VERTICALLY,
                           handle_maximize_vertically, 0);
 
   add_builtin_keybinding (display,
                           "maximize-horizontally",
-                          SCHEMA_COMMON_KEYBINDINGS,
+                          common_keybindings,
                           META_KEY_BINDING_PER_WINDOW,
                           META_KEYBINDING_ACTION_MAXIMIZE_HORIZONTALLY,
                           handle_maximize_horizontally, 0);
 
   add_builtin_keybinding (display,
                           "move-to-corner-nw",
-                          SCHEMA_COMMON_KEYBINDINGS,
+                          common_keybindings,
                           META_KEY_BINDING_PER_WINDOW,
                           META_KEYBINDING_ACTION_MOVE_TO_CORNER_NW,
                           handle_move_to_corner_nw, 0);
 
   add_builtin_keybinding (display,
                           "move-to-corner-ne",
-                          SCHEMA_COMMON_KEYBINDINGS,
+                          common_keybindings,
                           META_KEY_BINDING_PER_WINDOW,
                           META_KEYBINDING_ACTION_MOVE_TO_CORNER_NE,
                           handle_move_to_corner_ne, 0);
 
   add_builtin_keybinding (display,
                           "move-to-corner-sw",
-                          SCHEMA_COMMON_KEYBINDINGS,
+                          common_keybindings,
                           META_KEY_BINDING_PER_WINDOW,
                           META_KEYBINDING_ACTION_MOVE_TO_CORNER_SW,
                           handle_move_to_corner_sw, 0);
 
   add_builtin_keybinding (display,
                           "move-to-corner-se",
-                          SCHEMA_COMMON_KEYBINDINGS,
+                          common_keybindings,
                           META_KEY_BINDING_PER_WINDOW,
                           META_KEYBINDING_ACTION_MOVE_TO_CORNER_SE,
                           handle_move_to_corner_se, 0);
 
   add_builtin_keybinding (display,
                           "move-to-side-n",
-                          SCHEMA_COMMON_KEYBINDINGS,
+                          common_keybindings,
                           META_KEY_BINDING_PER_WINDOW,
                           META_KEYBINDING_ACTION_MOVE_TO_SIDE_N,
                           handle_move_to_side_n, 0);
 
   add_builtin_keybinding (display,
                           "move-to-side-s",
-                          SCHEMA_COMMON_KEYBINDINGS,
+                          common_keybindings,
                           META_KEY_BINDING_PER_WINDOW,
                           META_KEYBINDING_ACTION_MOVE_TO_SIDE_S,
                           handle_move_to_side_s, 0);
 
   add_builtin_keybinding (display,
                           "move-to-side-e",
-                          SCHEMA_COMMON_KEYBINDINGS,
+                          common_keybindings,
                           META_KEY_BINDING_PER_WINDOW,
                           META_KEYBINDING_ACTION_MOVE_TO_SIDE_E,
                           handle_move_to_side_e, 0);
 
   add_builtin_keybinding (display,
                           "move-to-side-w",
-                          SCHEMA_COMMON_KEYBINDINGS,
+                          common_keybindings,
                           META_KEY_BINDING_PER_WINDOW,
                           META_KEYBINDING_ACTION_MOVE_TO_SIDE_W,
                           handle_move_to_side_w, 0);
 
   add_builtin_keybinding (display,
                           "move-to-center",
-                          SCHEMA_COMMON_KEYBINDINGS,
+                          common_keybindings,
                           META_KEY_BINDING_PER_WINDOW,
                           META_KEYBINDING_ACTION_MOVE_TO_CENTER,
                           handle_move_to_center, 0);
+
+  g_object_unref (common_keybindings);
+  g_object_unref (mutter_keybindings);
 }
 
 void
diff --git a/src/core/prefs.c b/src/core/prefs.c
index 7721203..e1dacf4 100644
--- a/src/core/prefs.c
+++ b/src/core/prefs.c
@@ -1660,7 +1660,7 @@ meta_key_pref_free (MetaKeyPref *pref)
   update_binding (pref, NULL);
 
   g_free (pref->name);
-  g_free (pref->schema);
+  g_object_unref (pref->settings);
 
   g_free (pref);
 }
@@ -1920,13 +1920,13 @@ meta_prefs_get_visual_bell_type (void)
 
 gboolean
 meta_prefs_add_keybinding (const char           *name,
-                           const char           *schema,
+                           GSettings            *settings,
                            MetaKeyBindingAction  action,
                            MetaKeyBindingFlags   flags)
 {
   MetaKeyPref  *pref;
-  GSettings    *settings;
   char        **strokes;
+  guint         id;
 
   if (g_hash_table_lookup (key_bindings, name))
     {
@@ -1934,19 +1934,9 @@ meta_prefs_add_keybinding (const char           *name,
       return FALSE;
     }
 
-  settings = SETTINGS (schema);
-  if (settings == NULL)
-    {
-      settings = g_settings_new (schema);
-      if ((flags & META_KEY_BINDING_BUILTIN) != 0)
-        g_signal_connect (settings, "changed",
-                          G_CALLBACK (bindings_changed), NULL);
-      g_hash_table_insert (settings_schemas, g_strdup (schema), settings);
-    }
-
   pref = g_new0 (MetaKeyPref, 1);
   pref->name = g_strdup (name);
-  pref->schema = g_strdup (schema);
+  pref->settings = g_object_ref (settings);
   pref->action = action;
   pref->bindings = NULL;
   pref->add_shift = (flags & META_KEY_BINDING_REVERSES) != 0;
@@ -1959,9 +1949,17 @@ meta_prefs_add_keybinding (const char           *name,
 
   g_hash_table_insert (key_bindings, g_strdup (name), pref);
 
-  if (!pref->builtin)
+  if (pref->builtin)
+    {
+      if (g_object_get_data (G_OBJECT (settings), "changed-signal") == NULL)
+        {
+          id = g_signal_connect (settings, "changed",
+                                 G_CALLBACK (bindings_changed), NULL);
+          g_object_set_data (G_OBJECT (settings), "changed-signal", GUINT_TO_POINTER (id));
+        }
+    }
+  else
     {
-      guint id;
       char *changed_signal = g_strdup_printf ("changed::%s", name);
       id = g_signal_connect (settings, changed_signal,
                              G_CALLBACK (bindings_changed), NULL);
@@ -1979,7 +1977,6 @@ gboolean
 meta_prefs_remove_keybinding (const char *name)
 {
   MetaKeyPref *pref;
-  GSettings   *settings;
   guint        id;
 
   pref = g_hash_table_lookup (key_bindings, name);
@@ -1995,9 +1992,8 @@ meta_prefs_remove_keybinding (const char *name)
       return FALSE;
     }
 
-  settings = SETTINGS (pref->schema);
-  id = GPOINTER_TO_UINT (g_object_steal_data (G_OBJECT (settings), name));
-  g_signal_handler_disconnect (settings, id);
+  id = GPOINTER_TO_UINT (g_object_steal_data (G_OBJECT (pref->settings), name));
+  g_signal_handler_disconnect (pref->settings, id);
 
   g_hash_table_remove (key_bindings, name);
 
diff --git a/src/meta/display.h b/src/meta/display.h
index f55ad97..afdfac4 100644
--- a/src/meta/display.h
+++ b/src/meta/display.h
@@ -129,7 +129,7 @@ MetaGrabOp meta_display_get_grab_op (MetaDisplay *display);
 
 gboolean meta_display_add_keybinding    (MetaDisplay         *display,
                                          const char          *name,
-                                         const char          *schema,
+                                         GSettings           *settings,
                                          MetaKeyBindingFlags  flags,
                                          MetaKeyHandlerFunc   handler,
                                          gpointer             user_data,
diff --git a/src/meta/prefs.h b/src/meta/prefs.h
index bfdc726..3dc07c8 100644
--- a/src/meta/prefs.h
+++ b/src/meta/prefs.h
@@ -30,6 +30,7 @@
 #include <meta/types.h>
 #include <pango/pango-font.h>
 #include <gdesktop-enums.h>
+#include <gio/gio.h>
 
 /* Keep in sync with GSettings schemas! */
 typedef enum
@@ -271,7 +272,7 @@ typedef struct _MetaKeyHandler MetaKeyHandler;
 typedef struct
 {
   char *name;
-  char *schema;
+  GSettings *settings;
 
   MetaKeyBindingAction action;
 



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]