diff options
author | Rui Matos <tiagomatos@gmail.com> | 2016-11-24 19:56:18 +0100 |
---|---|---|
committer | Adam Jackson <ajax@redhat.com> | 2017-01-11 14:58:44 -0500 |
commit | 738c17b7ef4c70ad00c7bc01cf64edb770dda840 (patch) | |
tree | a83fa7ba1266691903bd828cafe1cf0f842c05ec /dix | |
parent | cd8f43e1b06aee8500548a94e3743cf153591683 (diff) |
xwayland: Don't send KeyRelease events on wl_keyboard::leave
Commits 816015648ffe660ddaa0f7d4d192e555b723c372 and
fee0827a9a695600765f3d04376fc9babe497401 made it so that
wl_keyboard::enter doesn't result in X clients getting KeyPress events
while still updating our internal xkb state to be in sync with the
host compositor.
wl_keyboard::leave needs to be handled in the same way as its
semantics from an X client POV should be the same as an X grab getting
triggered, i.e. X clients shouldn't get KeyRelease events for keys
that are still down at that point.
This patch uses LeaveNotify for these events on wl_keyboard::leave and
changes the current use of KeymapNotify to EnterNotify instead just to
keep some symmetry between both cases.
On ProcessDeviceEvent() we still need to deactivate X grabs if needed
for KeyReleases.
Signed-off-by: Rui Matos <tiagomatos@gmail.com>
Reviewed-by: Peter Hutterer <peter.hutterer@who-t.net>
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
(cherry picked from commit 5611585b87ce48428a66f98ece319a083f55d205)
Diffstat (limited to 'dix')
-rw-r--r-- | dix/getevents.c | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/dix/getevents.c b/dix/getevents.c index 4d06818cf..0d87453e5 100644 --- a/dix/getevents.c +++ b/dix/getevents.c @@ -1101,9 +1101,12 @@ GetKeyboardEvents(InternalEvent *events, DeviceIntPtr pDev, int type, } #endif - if (type == KeymapNotify) { + if (type == EnterNotify) { source_type = EVENT_SOURCE_FOCUS; type = KeyPress; + } else if (type == LeaveNotify) { + source_type = EVENT_SOURCE_FOCUS; + type = KeyRelease; } /* refuse events from disabled devices */ |