[mutter] window: Be better at filtering window grab mods
- From: Jasper St. Pierre <jstpierre src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [mutter] window: Be better at filtering window grab mods
- Date: Fri, 15 Aug 2014 20:07:10 +0000 (UTC)
commit d233238c6462b0817dba34c078cd06c3ba3cf368
Author: Jasper St. Pierre <jstpierre mecheye net>
Date: Fri Aug 15 16:03:50 2014 -0400
window: Be better at filtering window grab mods
It turns out that Clutter doesn't actually filter NumLock / ScrollLock /
CapsLock from button events due to its terrible event translation code.
Check only the grab mods to check if it's unmodified.
src/core/window.c | 49 ++++++++++++++++++++-----------------------------
1 files changed, 20 insertions(+), 29 deletions(-)
---
diff --git a/src/core/window.c b/src/core/window.c
index 92ea731..5036818 100644
--- a/src/core/window.c
+++ b/src/core/window.c
@@ -6108,16 +6108,6 @@ end_grab_op (MetaWindow *window,
meta_display_end_grab_op (window->display, clutter_event_get_time (event));
}
-static gboolean
-button_event_is_window_grab (MetaDisplay *display,
- const ClutterEvent *event)
-{
- ClutterModifierType mods = event->button.modifier_state;
- ClutterModifierType grab_mods = meta_display_get_window_grab_modifiers (display);
-
- return (mods & grab_mods) == grab_mods;
-}
-
gboolean
meta_window_handle_mouse_grab_op_event (MetaWindow *window,
const ClutterEvent *event)
@@ -6129,19 +6119,23 @@ meta_window_handle_mouse_grab_op_event (MetaWindow *window,
switch (event->type)
{
case CLUTTER_BUTTON_PRESS:
- /* This is the keybinding or menu case where we've
- * been dragging around the window without the button
- * pressed. */
-
- if ((meta_grab_op_is_mouse (window->display->grab_op) &&
- button_event_is_window_grab (window->display, event) &&
- window->display->grab_button != (int) event->button.button) ||
- meta_grab_op_is_keyboard (window->display->grab_op))
- {
- end_grab_op (window, event);
- return FALSE;
- }
- return TRUE;
+ {
+ ClutterModifierType grab_mods = meta_display_get_window_grab_modifiers (display);
+
+ /* This is the keybinding or menu case where we've
+ * been dragging around the window without the button
+ * pressed. */
+
+ if ((meta_grab_op_is_mouse (window->display->grab_op) &&
+ (event->button.modifier_state & grab_mods) == grab_mods &&
+ window->display->grab_button != (int) event->button.button) ||
+ meta_grab_op_is_keyboard (window->display->grab_op))
+ {
+ end_grab_op (window, event);
+ return FALSE;
+ }
+ return TRUE;
+ }
case CLUTTER_TOUCH_END:
if (meta_display_is_pointer_emulating_sequence (window->display, sequence))
@@ -7912,12 +7906,9 @@ meta_window_handle_ungrabbed_event (MetaWindow *window,
* care about. Just let the event through.
*/
- const int CLUTTER_BUTTON_MASK = (CLUTTER_BUTTON1_MASK | CLUTTER_BUTTON2_MASK |
- CLUTTER_BUTTON3_MASK | CLUTTER_BUTTON4_MASK |
- CLUTTER_BUTTON5_MASK);
-
- unmodified = (event->button.modifier_state & ~CLUTTER_BUTTON_MASK) == 0;
- is_window_grab = button_event_is_window_grab (display, event);
+ ClutterModifierType grab_mods = meta_display_get_window_grab_modifiers (display);
+ unmodified = (event->button.modifier_state & grab_mods) == 0;
+ is_window_grab = (event->button.modifier_state & grab_mods) == grab_mods;
if (unmodified)
{
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]