[gnome-shell] Deal with unknown flags from ClutterEvent.get_state()



commit ff39edd1ee48ebe96a6441707f518af5c4ba1db0
Author: Owen W. Taylor <otaylor fishsoup net>
Date:   Wed Oct 7 17:20:33 2009 -0400

    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

 js/ui/altTab.js     |    2 +-
 js/ui/appDisplay.js |    2 +-
 js/ui/main.js       |    2 +-
 src/shell-global.c  |   19 +++++++++++++++++++
 src/shell-global.h  |    2 ++
 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__ */



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