mutter/0001-frames-Allow-for-unknown-mouse-buttons.patch
2018-06-01 18:29:54 -07:00

72 lines
2.2 KiB
Diff

From 473bf38753221dc0002fae309d2f3f217e96c5f5 Mon Sep 17 00:00:00 2001
From: Olivier Fourdan <ofourdan@redhat.com>
Date: Tue, 22 May 2018 11:23:13 +0200
Subject: [PATCH] frames: Allow for unknown mouse buttons
Commit 47131b1d ("frames: Handle touch events") introduced an assert to
make sure that all mouse button actions are handled in mutter.
However, mice can have a more than 5 buttons, so simply ignore the
"other" actions instead of aborting.
Fixes: https://gitlab.gnome.org/GNOME/mutter/issues/160
---
src/ui/frames.c | 15 +++++++++++----
1 file changed, 11 insertions(+), 4 deletions(-)
diff --git a/src/ui/frames.c b/src/ui/frames.c
index 850f2850a..6d7b999be 100644
--- a/src/ui/frames.c
+++ b/src/ui/frames.c
@@ -75,7 +75,8 @@ enum {
META_ACTION_CLICK,
META_ACTION_RIGHT_CLICK,
META_ACTION_MIDDLE_CLICK,
- META_ACTION_DOUBLE_CLICK
+ META_ACTION_DOUBLE_CLICK,
+ META_ACTION_IGNORE
};
static GObject *
@@ -974,6 +975,10 @@ get_action (const ClutterEvent *event)
return META_ACTION_RIGHT_CLICK;
case CLUTTER_BUTTON_MIDDLE:
return META_ACTION_MIDDLE_CLICK;
+ default:
+ meta_verbose ("No action triggered for button %u %s\n",
+ event->button.button,
+ (event->type == CLUTTER_BUTTON_PRESS) ? "press" : "release");
}
}
else if (event->type == CLUTTER_TOUCH_BEGIN ||
@@ -983,7 +988,7 @@ get_action (const ClutterEvent *event)
return META_ACTION_CLICK;
}
- g_assert_not_reached ();
+ return META_ACTION_IGNORE;
}
static uint32_t
@@ -1115,13 +1120,15 @@ handle_press_event (MetaUIFrame *frame,
g_assert (event->type == CLUTTER_BUTTON_PRESS ||
event->type == CLUTTER_TOUCH_BEGIN);
+ action = get_action (event);
+ if (action == META_ACTION_IGNORE)
+ return FALSE;
+
display = GDK_DISPLAY_XDISPLAY (gdk_display_get_default ());
evtime = clutter_event_get_time (event);
clutter_event_get_coords (event, &x, &y);
control = get_control (frame, x, y);
- action = get_action (event);
-
/* don't do the rest of this if on client area */
if (control == META_FRAME_CONTROL_CLIENT_AREA)
return FALSE; /* not on the frame, just passed through from client */
--
2.17.0