summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorCarsten Haitzler (Rasterman) <raster@rasterman.com>2020-05-19 18:41:29 +0100
committerCarsten Haitzler (Rasterman) <raster@rasterman.com>2020-05-19 18:45:06 +0100
commit323eb9fcff3c0d2b6957dbf2181d665fc97fef1a (patch)
tree16672da0b5d919fc6d99d4316d326f86ddc06a55 /src
parenta030859f67493ff853a09e5806c7bafe7067fe21 (diff)
downloadefl-323eb9fcff3c0d2b6957dbf2181d665fc97fef1a.tar.gz
ecore-x - ensure we fully look at all xkb events and refresh all binds
this ensures for sure that we rebind known key/mouse grabs too for xkb mapping changes and force a get of the keymaps too @fix
Diffstat (limited to 'src')
-rw-r--r--src/lib/ecore_x/ecore_x.c4
-rw-r--r--src/lib/ecore_x/ecore_x_events.c10
2 files changed, 11 insertions, 3 deletions
diff --git a/src/lib/ecore_x/ecore_x.c b/src/lib/ecore_x/ecore_x.c
index ff603bb43b..fba37025e3 100644
--- a/src/lib/ecore_x/ecore_x.c
+++ b/src/lib/ecore_x/ecore_x.c
@@ -2540,8 +2540,10 @@ ecore_x_xkb_track_state(void)
{
Eina_Bool ret = EINA_FALSE;
#ifdef ECORE_XKB
+ unsigned mask = XkbNewKeyboardNotifyMask | XkbMapNotifyMask |
+ XkbStateNotifyMask | XkbCompatMapNotifyMask;
EINA_SAFETY_ON_NULL_RETURN_VAL(_ecore_x_disp, EINA_FALSE);
- ret = XkbSelectEvents(_ecore_x_disp, XkbUseCoreKbd, XkbStateNotifyMask, XkbStateNotifyMask);
+ ret = XkbSelectEvents(_ecore_x_disp, XkbUseCoreKbd, mask, mask);
if (_ecore_xlib_sync) ecore_x_sync();
#endif
return ret;
diff --git a/src/lib/ecore_x/ecore_x_events.c b/src/lib/ecore_x/ecore_x_events.c
index 6431bdd283..f200132c41 100644
--- a/src/lib/ecore_x/ecore_x_events.c
+++ b/src/lib/ecore_x/ecore_x_events.c
@@ -2511,10 +2511,16 @@ _ecore_x_event_handle_xkb(XEvent *xevent)
if (xkbev->any.xkb_type == XkbMapNotify)
{
- XkbMapNotifyEvent *xkbmapping;
+ XkbMapNotifyEvent *xkbmapping = (XkbMapNotifyEvent *)xkbev;
- xkbmapping = (XkbMapNotifyEvent *)xkbev;
+ _ecore_x_window_grab_suspend();
+ _ecore_x_key_grab_suspend();
+ XkbGetMap(_ecore_x_disp, XkbAllMapComponentsMask,
+ xkbmapping->device);
XkbRefreshKeyboardMapping(xkbmapping);
+ _ecore_x_modifiers_get();
+ _ecore_x_window_grab_resume();
+ _ecore_x_key_grab_resume();
}
else
{