summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorOwen W. Taylor <otaylor@fishsoup.net>2009-10-07 21:20:33 (GMT)
committerOwen W. Taylor <otaylor@fishsoup.net>2009-10-07 21:22:37 (GMT)
commitff39edd1ee48ebe96a6441707f518af5c4ba1db0 (patch)
tree6d9487a17861816ed997909728db4b3c1cd89c51
parenta81a16801d1f422e279e68739e652269d20193ae (diff)
downloadgnome-shell-ff39edd1ee48ebe96a6441707f518af5c4ba1db0.tar.gz
gnome-shell-ff39edd1ee48ebe96a6441707f518af5c4ba1db0.tar.xz
Deal with unknown flags from ClutterEvent.get_state()
When we get a ClutterModifierType from Clutter, it might contain bits not in the enumeration. See bug 59771 for a similar problem with GdkModifierType. Add a wrapper Shell.get_event_state() around clutter_event_get_state() to mask these bits out and only return approved bits. https://bugzilla.gnome.org/show_bug.cgi?id=597735
-rw-r--r--js/ui/altTab.js2
-rw-r--r--js/ui/appDisplay.js2
-rw-r--r--js/ui/main.js2
-rw-r--r--src/shell-global.c19
-rw-r--r--src/shell-global.h2
5 files changed, 24 insertions, 3 deletions
diff --git a/js/ui/altTab.js b/js/ui/altTab.js
index a437313..90e7562 100644
--- a/js/ui/altTab.js
+++ b/js/ui/altTab.js
@@ -148,7 +148,7 @@ AltTabPopup.prototype = {
_keyPressEvent : function(actor, event) {
let keysym = event.get_key_symbol();
- let shift = (event.get_state() & Clutter.ModifierType.SHIFT_MASK);
+ let shift = (Shell.get_event_state(event) & Clutter.ModifierType.SHIFT_MASK);
// The WASD stuff is for debugging in Xephyr, where the arrow
// keys aren't mapped correctly
diff --git a/js/ui/appDisplay.js b/js/ui/appDisplay.js
index f114b51..e24ffc2 100644
--- a/js/ui/appDisplay.js
+++ b/js/ui/appDisplay.js
@@ -554,7 +554,7 @@ RunningWellItem.prototype = {
},
_onActivate: function (actor, event) {
- let modifiers = event.get_state();
+ let modifiers = Shell.get_event_state(event);
if (modifiers & Clutter.ModifierType.CONTROL_MASK) {
this.appInfo.launch();
diff --git a/js/ui/main.js b/js/ui/main.js
index 2a0d73b..6235846 100644
--- a/js/ui/main.js
+++ b/js/ui/main.js
@@ -201,7 +201,7 @@ function _globalKeyPressHandler(actor, event) {
overview.hide();
return true;
- } else if (symbol == Clutter.F2 && (event.get_state() & Clutter.ModifierType.MOD1_MASK)) {
+ } else if (symbol == Clutter.F2 && (Shell.get_event_state(event) & Clutter.ModifierType.MOD1_MASK)) {
getRunDialog().open();
}
}
diff --git a/src/shell-global.c b/src/shell-global.c
index 65688e7..bad1706 100644
--- a/src/shell-global.c
+++ b/src/shell-global.c
@@ -998,3 +998,22 @@ shell_global_get_modifier_keys (ShellGlobal *global)
gdk_display_get_pointer (gdk_display_get_default (), NULL, NULL, NULL, &mods);
return mods & GDK_MODIFIER_MASK;
}
+
+/**
+ * shell_get_event_state:
+ * @event: a #ClutterEvent
+ *
+ * Gets the current state of the event (the set of modifier keys that
+ * are pressed down). Thhis is a wrapper around
+ * clutter_event_get_state() that strips out any un-declared modifier
+ * flags, to make gjs happy; see
+ * https://bugzilla.gnome.org/show_bug.cgi?id=597292.
+ *
+ * Return value: the state from the event
+ */
+ClutterModifierType
+shell_get_event_state (ClutterEvent *event)
+{
+ ClutterModifierType state = clutter_event_get_state (event);
+ return state & CLUTTER_MODIFIER_MASK;
+}
diff --git a/src/shell-global.h b/src/shell-global.h
index fe01aeb..d081cff 100644
--- a/src/shell-global.h
+++ b/src/shell-global.h
@@ -79,6 +79,8 @@ GdkRectangle *shell_global_get_focus_monitor (ShellGlobal *global);
GdkModifierType shell_global_get_modifier_keys (ShellGlobal *global);
+ClutterModifierType shell_get_event_state (ClutterEvent *event);
+
G_END_DECLS
#endif /* __SHELL_GLOBAL_H__ */