keyboard: avoid stray Meta modified

While using the Keyboard shortcut editor dialog under
Wayland, the user receives a <Meta> key even when this
key isn't present in the physical keyboard nor in the
keymap.

This is probably the result of Wayland inheriting from
X's xkb.

To work around that, simply filter out this modifier.

https://bugzilla.gnome.org/show_bug.cgi?id=769063
This commit is contained in:
Georges Basile Stavracas Neto 2016-07-28 13:29:20 -03:00
parent a0a155884e
commit 70bba2bbcd

View file

@ -24,6 +24,11 @@
#include "cc-keyboard-shortcut-editor.h" #include "cc-keyboard-shortcut-editor.h"
#include "keyboard-shortcuts.h" #include "keyboard-shortcuts.h"
/*
* Workaround to stop receiving a stray Meta modifier.
*/
#define ALL_ACCELS_MASK (GDK_CONTROL_MASK | GDK_SHIFT_MASK | GDK_MOD1_MASK)
struct _CcKeyboardShortcutEditor struct _CcKeyboardShortcutEditor
{ {
GtkDialog parent; GtkDialog parent;
@ -450,7 +455,7 @@ cc_keyboard_shortcut_editor_key_press_event (GtkWidget *widget,
if (!editing) if (!editing)
return GTK_WIDGET_CLASS (cc_keyboard_shortcut_editor_parent_class)->key_press_event (widget, event); return GTK_WIDGET_CLASS (cc_keyboard_shortcut_editor_parent_class)->key_press_event (widget, event);
real_mask = event->state & gtk_accelerator_get_default_mod_mask (); real_mask = event->state & gtk_accelerator_get_default_mod_mask () & ALL_ACCELS_MASK;
/* A single Escape press cancels the editing */ /* A single Escape press cancels the editing */
if (!event->is_modifier && real_mask == 0 && event->keyval == GDK_KEY_Escape) if (!event->is_modifier && real_mask == 0 && event->keyval == GDK_KEY_Escape)