raster pushed a commit to branch efl-1.24.

http://git.enlightenment.org/core/efl.git/commit/?id=323eb9fcff3c0d2b6957dbf2181d665fc97fef1a

commit 323eb9fcff3c0d2b6957dbf2181d665fc97fef1a
Author: Carsten Haitzler (Rasterman) <[email protected]>
Date:   Tue May 19 18:41:29 2020 +0100

    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
---
 src/lib/ecore_x/ecore_x.c        |  4 +++-
 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
           {

-- 


Reply via email to