diff options
author | Carsten Haitzler (Rasterman) <raster@rasterman.com> | 2020-05-19 18:41:29 +0100 |
---|---|---|
committer | Carsten Haitzler (Rasterman) <raster@rasterman.com> | 2020-05-19 18:45:06 +0100 |
commit | 323eb9fcff3c0d2b6957dbf2181d665fc97fef1a (patch) | |
tree | 16672da0b5d919fc6d99d4316d326f86ddc06a55 /src | |
parent | a030859f67493ff853a09e5806c7bafe7067fe21 (diff) | |
download | efl-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.c | 4 | ||||
-rw-r--r-- | src/lib/ecore_x/ecore_x_events.c | 10 |
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 { |