update modifiers on mapping changes too.
authorraster <raster@7cbeb6ba-43b4-40fd-8cce-4c39aea84d33>
Thu, 29 Sep 2011 09:56:07 +0000 (09:56 +0000)
committerraster <raster@7cbeb6ba-43b4-40fd-8cce-4c39aea84d33>
Thu, 29 Sep 2011 09:56:07 +0000 (09:56 +0000)
git-svn-id: svn+ssh://svn.enlightenment.org/var/svn/e/trunk/ecore@63665 7cbeb6ba-43b4-40fd-8cce-4c39aea84d33

src/lib/ecore_x/xcb/ecore_xcb_events.c
src/lib/ecore_x/xcb/ecore_xcb_keymap.c
src/lib/ecore_x/xcb/ecore_xcb_private.h
src/lib/ecore_x/xlib/ecore_x.c
src/lib/ecore_x/xlib/ecore_x_events.c
src/lib/ecore_x/xlib/ecore_x_private.h

index ada381e..819be1b 100644 (file)
@@ -1706,7 +1706,8 @@ _ecore_xcb_event_handle_mapping_notify(xcb_generic_event_t *event)
    if (!(e = calloc(1, sizeof(Ecore_X_Event_Mapping_Change)))) return;
 
    _ecore_xcb_keymap_refresh(ev);
-
+   _ecore_xcb_modifiers_get();
+   
    switch (ev->request) 
      {
       case XCB_MAPPING_MODIFIER:
index 83fb2a2..83f51c3 100644 (file)
@@ -78,6 +78,12 @@ _ecore_xcb_keymap_finalize(void)
    ECORE_X_LOCK_SHIFT = _ecore_xcb_keymap_mask_get(reply, XK_Shift_Lock);
 }
 
+void
+_ecore_xcb_modifiers_get(void)
+{
+   _ecore_xcb_keymap_finalize();
+}
+
 void 
 _ecore_xcb_keymap_shutdown(void) 
 {
index c118c2e..c143d9d 100644 (file)
@@ -351,4 +351,6 @@ void _ecore_xcb_xdefaults_shutdown(void);
 char *_ecore_xcb_xdefaults_string_get(const char *prog, const char *param);
 int _ecore_xcb_xdefaults_int_get(const char *prog, const char *param);
 
+void _ecore_xcb_modifiers_get(void);
+
 #endif
index 24ecbdc..29ba751 100644 (file)
@@ -195,6 +195,41 @@ _XReply(Display *disp, void *rep, int extra, Bool discard)
 
 #endif /* ifdef LOGRT */
 
+void
+_ecore_x_modifiers_get(void)
+{
+   /* everything has these... unless its like a pda... :) */
+   ECORE_X_MODIFIER_SHIFT = _ecore_x_key_mask_get(XK_Shift_L);
+   ECORE_X_MODIFIER_CTRL = _ecore_x_key_mask_get(XK_Control_L);
+
+   /* apple's xdarwin has no alt!!!! */
+   ECORE_X_MODIFIER_ALT = _ecore_x_key_mask_get(XK_Alt_L);
+   if (!ECORE_X_MODIFIER_ALT)
+      ECORE_X_MODIFIER_ALT = _ecore_x_key_mask_get(XK_Meta_L);
+   
+   if (!ECORE_X_MODIFIER_ALT)
+      ECORE_X_MODIFIER_ALT = _ecore_x_key_mask_get(XK_Super_L);
+   
+   /* the windows key... a valid modifier :) */
+   ECORE_X_MODIFIER_WIN = _ecore_x_key_mask_get(XK_Super_L);
+   if (!ECORE_X_MODIFIER_WIN)
+      ECORE_X_MODIFIER_WIN = _ecore_x_key_mask_get(XK_Mode_switch);
+
+   if (!ECORE_X_MODIFIER_WIN)
+      ECORE_X_MODIFIER_WIN = _ecore_x_key_mask_get(XK_Meta_L);
+
+   if (ECORE_X_MODIFIER_WIN == ECORE_X_MODIFIER_ALT)
+      ECORE_X_MODIFIER_WIN = 0;
+
+   if (ECORE_X_MODIFIER_ALT == ECORE_X_MODIFIER_CTRL)
+      ECORE_X_MODIFIER_ALT = 0;
+
+   ECORE_X_LOCK_SCROLL = _ecore_x_key_mask_get(XK_Scroll_Lock);
+   ECORE_X_LOCK_NUM = _ecore_x_key_mask_get(XK_Num_Lock);
+   ECORE_X_LOCK_CAPS = _ecore_x_key_mask_get(XK_Caps_Lock);
+   ECORE_X_LOCK_SHIFT = _ecore_x_key_mask_get(XK_Shift_Lock);
+}
+
 /**
  * @defgroup Ecore_X_Init_Group X Library Init and Shutdown Functions
  *
@@ -487,36 +522,7 @@ ecore_x_init(const char *name)
         ECORE_X_EVENT_GENERIC = ecore_event_type_new();
      }
 
-   /* everything has these... unless its like a pda... :) */
-   ECORE_X_MODIFIER_SHIFT = _ecore_x_key_mask_get(XK_Shift_L);
-   ECORE_X_MODIFIER_CTRL = _ecore_x_key_mask_get(XK_Control_L);
-
-   /* apple's xdarwin has no alt!!!! */
-   ECORE_X_MODIFIER_ALT = _ecore_x_key_mask_get(XK_Alt_L);
-   if (!ECORE_X_MODIFIER_ALT)
-      ECORE_X_MODIFIER_ALT = _ecore_x_key_mask_get(XK_Meta_L);
-
-   if (!ECORE_X_MODIFIER_ALT)
-      ECORE_X_MODIFIER_ALT = _ecore_x_key_mask_get(XK_Super_L);
-
-   /* the windows key... a valid modifier :) */
-   ECORE_X_MODIFIER_WIN = _ecore_x_key_mask_get(XK_Super_L);
-   if (!ECORE_X_MODIFIER_WIN)
-      ECORE_X_MODIFIER_WIN = _ecore_x_key_mask_get(XK_Mode_switch);
-
-   if (!ECORE_X_MODIFIER_WIN)
-      ECORE_X_MODIFIER_WIN = _ecore_x_key_mask_get(XK_Meta_L);
-
-   if (ECORE_X_MODIFIER_WIN == ECORE_X_MODIFIER_ALT)
-      ECORE_X_MODIFIER_WIN = 0;
-
-   if (ECORE_X_MODIFIER_ALT == ECORE_X_MODIFIER_CTRL)
-      ECORE_X_MODIFIER_ALT = 0;
-
-   ECORE_X_LOCK_SCROLL = _ecore_x_key_mask_get(XK_Scroll_Lock);
-   ECORE_X_LOCK_NUM = _ecore_x_key_mask_get(XK_Num_Lock);
-   ECORE_X_LOCK_CAPS = _ecore_x_key_mask_get(XK_Caps_Lock);
-   ECORE_X_LOCK_SHIFT = _ecore_x_key_mask_get(XK_Shift_Lock);
+   _ecore_x_modifiers_get();
 
    _ecore_x_fd_handler_handle =
       ecore_main_fd_handler_add(ConnectionNumber(_ecore_x_disp),
index b207748..cbfb02d 100644 (file)
@@ -1910,6 +1910,7 @@ _ecore_x_event_handle_mapping_notify(XEvent *xevent)
 
    _ecore_x_last_event_mouse_move = 0;
    XRefreshKeyboardMapping((XMappingEvent *)xevent);
+   _ecore_x_modifiers_get();
    e = calloc(1, sizeof(Ecore_X_Event_Mapping_Change));
    if (!e) return;
    switch (xevent->xmapping.request)
index ea03d92..301af0c 100644 (file)
@@ -363,6 +363,8 @@ Ecore_Event_Mouse_Button *    _ecore_mouse_button(int          event,
                                                   double       mrx,
                                                   double       mry);
 
+void _ecore_x_modifiers_get(void);
+
 //#define LOGFNS 1
 
 #ifdef LOGFNS