summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCarlos Garnacho <carlosg@gnome.org>2019-12-16 13:53:26 +0100
committerCarlos Garnacho <carlosg@gnome.org>2020-03-25 19:56:09 +0100
commit3c4f5ddcb4702ef5129022055b50ac267840c469 (patch)
tree7e7ba30b796c516b793a13a924d21de970855d34
parent3aece844990e49a115dc399c1f7745264b88e62a (diff)
downloadmutter-3c4f5ddcb4702ef5129022055b50ac267840c469.tar.gz
core: Let pad mode switch events always go through MetaInputSettings
We used to inhibit all pad actions while the OSD is shown, but one we would actually want to handle are mode switches while the OSD is open. So it has an opportunity to catch up to the mode switch. This lets MetaInputSettings reflect the mode switch (eg. when querying action labels), so the OSD has an opportunity to update the current actions. https://gitlab.gnome.org/GNOME/mutter/merge_requests/975
-rw-r--r--src/core/events.c30
1 files changed, 24 insertions, 6 deletions
diff --git a/src/core/events.c b/src/core/events.c
index eedb04a01..47b97c328 100644
--- a/src/core/events.c
+++ b/src/core/events.c
@@ -240,13 +240,31 @@ meta_display_handle_event (MetaDisplay *display,
}
#endif
- if (!display->current_pad_osd &&
- (event->type == CLUTTER_PAD_BUTTON_PRESS ||
- event->type == CLUTTER_PAD_BUTTON_RELEASE ||
- event->type == CLUTTER_PAD_RING ||
- event->type == CLUTTER_PAD_STRIP))
+ if (event->type == CLUTTER_PAD_BUTTON_PRESS ||
+ event->type == CLUTTER_PAD_BUTTON_RELEASE ||
+ event->type == CLUTTER_PAD_RING ||
+ event->type == CLUTTER_PAD_STRIP)
{
- if (meta_input_settings_handle_pad_event (meta_backend_get_input_settings (backend),
+ gboolean handle_pad_event;
+ gboolean is_mode_switch = FALSE;
+
+ if (event->type == CLUTTER_PAD_BUTTON_PRESS ||
+ event->type == CLUTTER_PAD_BUTTON_RELEASE)
+ {
+ ClutterInputDevice *pad;
+ uint32_t button;
+
+ pad = clutter_event_get_source_device (event);
+ button = clutter_event_get_button (event);
+
+ is_mode_switch =
+ clutter_input_device_get_mode_switch_button_group (pad, button) >= 0;
+ }
+
+ handle_pad_event = !display->current_pad_osd || is_mode_switch;
+
+ if (handle_pad_event &&
+ meta_input_settings_handle_pad_event (meta_backend_get_input_settings (backend),
event))
{
bypass_wayland = bypass_clutter = TRUE;