[mutter] prefs: Update overlay-key on settings changes
- From: Florian MÃllner <fmuellner src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [mutter] prefs: Update overlay-key on settings changes
- Date: Thu, 16 Aug 2012 07:42:18 +0000 (UTC)
commit 802c1ac42752538ed6fde5d5899553ab6915d7c9
Author: Florian MÃllner <fmuellner gnome org>
Date: Fri Aug 10 23:22:46 2012 +0200
prefs: Update overlay-key on settings changes
When changing the overlay-key setting, the change only takes effect
on restart - there are actually two bugs involved:
(1) the test whether the key has changed is located in the
else part of a test for string settings (and overlay-key happens
to be a string settings ...)
(2) with (1) fixed, a change signal is emitted, which triggers a
reload of all keybindings - unfortunately, the actual value
of overlay-key is only read on startup, so the key is reloaded
using the old value
Fix both issues by replacing the custom handling of the overlay-key
with the regular handling of string preferences.
https://bugzilla.gnome.org/show_bug.cgi?id=681906
src/core/prefs.c | 74 +++++++++++++++++++++++++++++++----------------------
1 files changed, 43 insertions(+), 31 deletions(-)
---
diff --git a/src/core/prefs.c b/src/core/prefs.c
index bbd3484..f67b283 100644
--- a/src/core/prefs.c
+++ b/src/core/prefs.c
@@ -72,6 +72,7 @@ static GHashTable *settings_schemas;
static gboolean use_system_font = FALSE;
static PangoFontDescription *titlebar_font = NULL;
static MetaVirtualModifier mouse_button_mods = Mod1Mask;
+static MetaKeyCombo overlay_key_combo = { 0, 0, 0 };
static GDesktopFocusMode focus_mode = G_DESKTOP_FOCUS_MODE_CLICK;
static GDesktopFocusNewWindows focus_new_windows = G_DESKTOP_FOCUS_NEW_WINDOWS_SMART;
static gboolean raise_on_click = TRUE;
@@ -132,6 +133,7 @@ static gboolean titlebar_handler (GVariant*, gpointer*, gpointer);
static gboolean theme_name_handler (GVariant*, gpointer*, gpointer);
static gboolean mouse_button_mods_handler (GVariant*, gpointer*, gpointer);
static gboolean button_layout_handler (GVariant*, gpointer*, gpointer);
+static gboolean overlay_key_handler (GVariant*, gpointer*, gpointer);
static void do_override (char *key, char *schema);
@@ -403,6 +405,14 @@ static MetaStringPreference preferences_string[] =
NULL,
&cursor_theme,
},
+ {
+ { "overlay-key",
+ SCHEMA_MUTTER,
+ META_PREF_KEYBINDINGS,
+ },
+ overlay_key_handler,
+ NULL,
+ },
{ { NULL, 0, 0 }, NULL },
};
@@ -1020,10 +1030,6 @@ settings_changed (GSettings *settings,
else
handle_preference_update_string (settings, key);
}
- else if (g_str_equal (key, KEY_OVERLAY_KEY))
- {
- queue_changed (META_PREF_KEYBINDINGS);
- }
else
{
/* Someone added a preference of an unhandled type */
@@ -1479,6 +1485,39 @@ button_layout_handler (GVariant *value,
return TRUE;
}
+static gboolean
+overlay_key_handler (GVariant *value,
+ gpointer *result,
+ gpointer data)
+{
+ MetaKeyCombo combo;
+ const gchar *string_value;
+
+ *result = NULL; /* ignored */
+ string_value = g_variant_get_string (value, NULL);
+
+ if (string_value && meta_ui_parse_accelerator (string_value, &combo.keysym,
+ &combo.keycode,
+ &combo.modifiers))
+ ;
+ else
+ {
+ meta_topic (META_DEBUG_KEYBINDINGS,
+ "Failed to parse value for overlay-key\n");
+ return FALSE;
+ }
+
+ if (overlay_key_combo.keysym != combo.keysym ||
+ overlay_key_combo.keycode != combo.keycode ||
+ overlay_key_combo.modifiers != combo.modifiers)
+ {
+ overlay_key_combo = combo;
+ queue_changed (META_PREF_KEYBINDINGS);
+ }
+
+ return TRUE;
+}
+
const PangoFontDescription*
meta_prefs_get_titlebar_font (void)
{
@@ -1637,8 +1676,6 @@ meta_prefs_set_num_workspaces (int n_workspaces)
static GHashTable *key_bindings;
-static MetaKeyCombo overlay_key_combo = { 0, 0, 0 };
-
static void
meta_key_pref_free (MetaKeyPref *pref)
{
@@ -1650,37 +1687,12 @@ meta_key_pref_free (MetaKeyPref *pref)
g_free (pref);
}
-/* These bindings are for modifiers alone, so they need special handling */
-static void
-init_special_bindings (void)
-{
- char *val;
-
- /* Default values for bindings which are global, but take special handling */
- meta_ui_parse_accelerator ("Super_L", &overlay_key_combo.keysym,
- &overlay_key_combo.keycode,
- &overlay_key_combo.modifiers);
-
- val = g_settings_get_string (SETTINGS (SCHEMA_MUTTER), KEY_OVERLAY_KEY);
-
- if (val && meta_ui_parse_accelerator (val, &overlay_key_combo.keysym,
- &overlay_key_combo.keycode,
- &overlay_key_combo.modifiers))
- ;
- else
- {
- meta_topic (META_DEBUG_KEYBINDINGS,
- "Failed to parse value for overlay_key\n");
- }
- g_free (val);
-}
static void
init_bindings (void)
{
key_bindings = g_hash_table_new_full (g_str_hash, g_str_equal, g_free,
(GDestroyNotify)meta_key_pref_free);
- init_special_bindings ();
}
static void
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]