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
This commit is contained in:
Carlos Garnacho 2019-12-16 13:53:26 +01:00
parent 3aece84499
commit 3c4f5ddcb4

View File

@ -240,13 +240,31 @@ meta_display_handle_event (MetaDisplay *display,
} }
#endif #endif
if (!display->current_pad_osd && if (event->type == CLUTTER_PAD_BUTTON_PRESS ||
(event->type == CLUTTER_PAD_BUTTON_PRESS || event->type == CLUTTER_PAD_BUTTON_RELEASE ||
event->type == CLUTTER_PAD_BUTTON_RELEASE || event->type == CLUTTER_PAD_RING ||
event->type == CLUTTER_PAD_RING || event->type == CLUTTER_PAD_STRIP)
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)) event))
{ {
bypass_wayland = bypass_clutter = TRUE; bypass_wayland = bypass_clutter = TRUE;