mirror of
https://github.com/brl/mutter.git
synced 2025-02-16 13:24:09 +00:00
Keybindings: uniquify the name for non-builtin keybindings
Multiple settings objects could have the same key, so that alone is not enough to identify the binding. Add also the pointer value of the GSettings object. https://bugzilla.gnome.org/show_bug.cgi?id=613543
This commit is contained in:
parent
53a17185a0
commit
9e2fc32395
@ -75,6 +75,7 @@ void meta_display_process_mapping_event (MetaDisplay *display,
|
|||||||
|
|
||||||
gboolean meta_prefs_add_keybinding (const char *name,
|
gboolean meta_prefs_add_keybinding (const char *name,
|
||||||
GSettings *settings,
|
GSettings *settings,
|
||||||
|
const char *setting_key,
|
||||||
const char *hardcoded_key,
|
const char *hardcoded_key,
|
||||||
MetaKeyBindingAction action,
|
MetaKeyBindingAction action,
|
||||||
MetaKeyBindingFlags flags);
|
MetaKeyBindingFlags flags);
|
||||||
|
@ -539,6 +539,7 @@ static gboolean
|
|||||||
add_keybinding_internal (MetaDisplay *display,
|
add_keybinding_internal (MetaDisplay *display,
|
||||||
const char *name,
|
const char *name,
|
||||||
GSettings *settings,
|
GSettings *settings,
|
||||||
|
const char *setting_key,
|
||||||
const char *hardcoded_key,
|
const char *hardcoded_key,
|
||||||
MetaKeyBindingFlags flags,
|
MetaKeyBindingFlags flags,
|
||||||
MetaKeyBindingAction action,
|
MetaKeyBindingAction action,
|
||||||
@ -549,7 +550,7 @@ add_keybinding_internal (MetaDisplay *display,
|
|||||||
{
|
{
|
||||||
MetaKeyHandler *handler;
|
MetaKeyHandler *handler;
|
||||||
|
|
||||||
if (!meta_prefs_add_keybinding (name, settings, hardcoded_key, action, flags))
|
if (!meta_prefs_add_keybinding (name, settings, setting_key, hardcoded_key, action, flags))
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
handler = g_new0 (MetaKeyHandler, 1);
|
handler = g_new0 (MetaKeyHandler, 1);
|
||||||
@ -568,16 +569,20 @@ add_keybinding_internal (MetaDisplay *display,
|
|||||||
|
|
||||||
static gboolean
|
static gboolean
|
||||||
add_builtin_keybinding (MetaDisplay *display,
|
add_builtin_keybinding (MetaDisplay *display,
|
||||||
const char *name,
|
const char *key,
|
||||||
GSettings *settings,
|
GSettings *settings,
|
||||||
MetaKeyBindingFlags flags,
|
MetaKeyBindingFlags flags,
|
||||||
MetaKeyBindingAction action,
|
MetaKeyBindingAction action,
|
||||||
MetaKeyHandlerFunc handler,
|
MetaKeyHandlerFunc handler,
|
||||||
int handler_arg)
|
int handler_arg)
|
||||||
{
|
{
|
||||||
return add_keybinding_internal (display, name, settings, NULL,
|
char *name = g_strdup_printf ("internal-keybinding-%s", key);
|
||||||
|
|
||||||
|
return add_keybinding_internal (display, name, settings, key, NULL,
|
||||||
flags | META_KEY_BINDING_BUILTIN,
|
flags | META_KEY_BINDING_BUILTIN,
|
||||||
action, handler, handler_arg, NULL, NULL);
|
action, handler, handler_arg, NULL, NULL);
|
||||||
|
|
||||||
|
g_free (name);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -609,16 +614,20 @@ add_builtin_keybinding (MetaDisplay *display,
|
|||||||
*/
|
*/
|
||||||
gboolean
|
gboolean
|
||||||
meta_display_add_keybinding (MetaDisplay *display,
|
meta_display_add_keybinding (MetaDisplay *display,
|
||||||
const char *name,
|
const char *key,
|
||||||
GSettings *settings,
|
GSettings *settings,
|
||||||
MetaKeyBindingFlags flags,
|
MetaKeyBindingFlags flags,
|
||||||
MetaKeyHandlerFunc handler,
|
MetaKeyHandlerFunc handler,
|
||||||
gpointer user_data,
|
gpointer user_data,
|
||||||
GDestroyNotify free_data)
|
GDestroyNotify free_data)
|
||||||
{
|
{
|
||||||
return add_keybinding_internal (display, name, settings, NULL,
|
char *name = g_strdup_printf("custom-keybinding-%p-%s", settings, key);
|
||||||
|
|
||||||
|
return add_keybinding_internal (display, name, settings, key, NULL,
|
||||||
flags, META_KEYBINDING_ACTION_NONE,
|
flags, META_KEYBINDING_ACTION_NONE,
|
||||||
handler, 0, user_data, free_data);
|
handler, 0, user_data, free_data);
|
||||||
|
|
||||||
|
g_free (name);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -644,7 +653,7 @@ meta_display_add_grabbed_key (MetaDisplay *display,
|
|||||||
gpointer user_data,
|
gpointer user_data,
|
||||||
GDestroyNotify free_data)
|
GDestroyNotify free_data)
|
||||||
{
|
{
|
||||||
return add_keybinding_internal (display, name, NULL, keyval,
|
return add_keybinding_internal (display, name, NULL, NULL, keyval,
|
||||||
flags, META_KEYBINDING_ACTION_NONE,
|
flags, META_KEYBINDING_ACTION_NONE,
|
||||||
handler, 0, user_data, free_data);
|
handler, 0, user_data, free_data);
|
||||||
}
|
}
|
||||||
@ -672,6 +681,7 @@ meta_display_remove_grabbed_key (MetaDisplay *display,
|
|||||||
* meta_display_remove_keybinding:
|
* meta_display_remove_keybinding:
|
||||||
* @display: the #MetaDisplay
|
* @display: the #MetaDisplay
|
||||||
* @name: name of the keybinding to remove
|
* @name: name of the keybinding to remove
|
||||||
|
* @settings: (allow-none): the #GSettings object on which the keybinding is registered
|
||||||
*
|
*
|
||||||
* Remove keybinding @name; the function will fail if @name is not a known
|
* Remove keybinding @name; the function will fail if @name is not a known
|
||||||
* keybinding or has not been added with meta_display_add_keybinding().
|
* keybinding or has not been added with meta_display_add_keybinding().
|
||||||
@ -681,14 +691,28 @@ meta_display_remove_grabbed_key (MetaDisplay *display,
|
|||||||
*/
|
*/
|
||||||
gboolean
|
gboolean
|
||||||
meta_display_remove_keybinding (MetaDisplay *display,
|
meta_display_remove_keybinding (MetaDisplay *display,
|
||||||
const char *name)
|
const char *key,
|
||||||
|
GSettings *settings)
|
||||||
{
|
{
|
||||||
|
gboolean retval;
|
||||||
|
char *name;
|
||||||
|
|
||||||
|
if (settings)
|
||||||
|
name = g_strdup_printf ("custom-keybinding-%p-%s", settings, key);
|
||||||
|
else
|
||||||
|
name = g_strdup (key);
|
||||||
|
|
||||||
|
retval = FALSE;
|
||||||
if (!meta_prefs_remove_keybinding (name))
|
if (!meta_prefs_remove_keybinding (name))
|
||||||
return FALSE;
|
goto out;
|
||||||
|
|
||||||
g_hash_table_remove (key_handlers, name);
|
g_hash_table_remove (key_handlers, name);
|
||||||
|
|
||||||
return TRUE;
|
retval = TRUE;
|
||||||
|
|
||||||
|
out:
|
||||||
|
g_free (name);
|
||||||
|
return retval;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -1711,6 +1711,7 @@ meta_key_pref_free (MetaKeyPref *pref)
|
|||||||
g_free (pref->name);
|
g_free (pref->name);
|
||||||
if (pref->settings)
|
if (pref->settings)
|
||||||
g_object_unref (pref->settings);
|
g_object_unref (pref->settings);
|
||||||
|
g_free (pref->setting_key);
|
||||||
g_free (pref->hardcoded_key);
|
g_free (pref->hardcoded_key);
|
||||||
|
|
||||||
g_free (pref);
|
g_free (pref);
|
||||||
@ -1935,6 +1936,7 @@ meta_prefs_get_visual_bell_type (void)
|
|||||||
gboolean
|
gboolean
|
||||||
meta_prefs_add_keybinding (const char *name,
|
meta_prefs_add_keybinding (const char *name,
|
||||||
GSettings *settings,
|
GSettings *settings,
|
||||||
|
const char *setting_key,
|
||||||
const char *hardcoded_key,
|
const char *hardcoded_key,
|
||||||
MetaKeyBindingAction action,
|
MetaKeyBindingAction action,
|
||||||
MetaKeyBindingFlags flags)
|
MetaKeyBindingFlags flags)
|
||||||
@ -1953,6 +1955,7 @@ meta_prefs_add_keybinding (const char *name,
|
|||||||
pref = g_new0 (MetaKeyPref, 1);
|
pref = g_new0 (MetaKeyPref, 1);
|
||||||
pref->name = g_strdup (name);
|
pref->name = g_strdup (name);
|
||||||
pref->settings = settings ? g_object_ref (settings) : NULL;
|
pref->settings = settings ? g_object_ref (settings) : NULL;
|
||||||
|
pref->setting_key = g_strdup (setting_key);
|
||||||
pref->hardcoded_key = g_strdup (hardcoded_key);
|
pref->hardcoded_key = g_strdup (hardcoded_key);
|
||||||
pref->action = action;
|
pref->action = action;
|
||||||
pref->bindings = NULL;
|
pref->bindings = NULL;
|
||||||
@ -1965,12 +1968,12 @@ meta_prefs_add_keybinding (const char *name,
|
|||||||
{
|
{
|
||||||
if (pref->is_single)
|
if (pref->is_single)
|
||||||
{
|
{
|
||||||
static_strokes[0] = g_settings_get_string (settings, name);
|
static_strokes[0] = g_settings_get_string (settings, setting_key);
|
||||||
static_strokes[1] = NULL;
|
static_strokes[1] = NULL;
|
||||||
strokes = static_strokes;
|
strokes = static_strokes;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
strokes = g_settings_get_strv (settings, name);
|
strokes = g_settings_get_strv (settings, setting_key);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -2001,7 +2004,7 @@ meta_prefs_add_keybinding (const char *name,
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
char *changed_signal = g_strdup_printf ("changed::%s", name);
|
char *changed_signal = g_strdup_printf ("changed::%s", setting_key);
|
||||||
id = g_signal_connect (settings, changed_signal,
|
id = g_signal_connect (settings, changed_signal,
|
||||||
G_CALLBACK (bindings_changed), NULL);
|
G_CALLBACK (bindings_changed), NULL);
|
||||||
g_free (changed_signal);
|
g_free (changed_signal);
|
||||||
|
@ -144,7 +144,8 @@ gboolean meta_display_add_grabbed_key (MetaDisplay *display,
|
|||||||
gboolean meta_display_remove_grabbed_key(MetaDisplay *display,
|
gboolean meta_display_remove_grabbed_key(MetaDisplay *display,
|
||||||
const char *name);
|
const char *name);
|
||||||
gboolean meta_display_remove_keybinding (MetaDisplay *display,
|
gboolean meta_display_remove_keybinding (MetaDisplay *display,
|
||||||
const char *name);
|
const char *name,
|
||||||
|
GSettings *settings);
|
||||||
|
|
||||||
MetaKeyBindingAction meta_display_get_keybinding_action (MetaDisplay *display,
|
MetaKeyBindingAction meta_display_get_keybinding_action (MetaDisplay *display,
|
||||||
unsigned int keycode,
|
unsigned int keycode,
|
||||||
|
@ -264,6 +264,7 @@ typedef struct
|
|||||||
{
|
{
|
||||||
char *name;
|
char *name;
|
||||||
GSettings *settings;
|
GSettings *settings;
|
||||||
|
char *setting_key;
|
||||||
char *hardcoded_key;
|
char *hardcoded_key;
|
||||||
|
|
||||||
MetaKeyBindingAction action;
|
MetaKeyBindingAction action;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user