* ecore_xcb: Fix key grab too.
authorcedric <cedric@7cbeb6ba-43b4-40fd-8cce-4c39aea84d33>
Tue, 17 Mar 2009 13:34:40 +0000 (13:34 +0000)
committercedric <cedric@7cbeb6ba-43b4-40fd-8cce-4c39aea84d33>
Tue, 17 Mar 2009 13:34:40 +0000 (13:34 +0000)
git-svn-id: svn+ssh://svn.enlightenment.org/var/svn/e/trunk/ecore@39518 7cbeb6ba-43b4-40fd-8cce-4c39aea84d33

src/lib/ecore_x/xcb/ecore_xcb.c

index d5aa77f..f01de4b 100644 (file)
@@ -1445,7 +1445,7 @@ ecore_x_window_button_grab(Ecore_X_Window     window,
    uint16_t locks[8];
    uint16_t ev;
 
-   m = mod;
+   m = _ecore_x_event_modifier(mod);
    if (any_mod) m = XCB_BUTTON_MASK_ANY;
    locks[0] = 0;
    locks[1] = ECORE_X_LOCK_CAPS;
@@ -1516,7 +1516,7 @@ ecore_x_window_button_ungrab(Ecore_X_Window window,
    uint16_t m;
    uint16_t locks[8];
 
-   m = mod;
+   m = _ecore_x_event_modifier(mod);
    if (any_mod) m = XCB_BUTTON_MASK_ANY;
    locks[0] = 0;
    locks[1] = ECORE_X_LOCK_CAPS;
@@ -1559,7 +1559,7 @@ ecore_x_window_key_grab(Ecore_X_Window window,
 /*      } */
    if (keycode == 0) return;
 
-   m = mod;
+   m = _ecore_x_event_modifier(mod);
    if (any_mod) m = XCB_BUTTON_MASK_ANY;
    locks[0] = 0;
    locks[1] = ECORE_X_LOCK_CAPS;
@@ -1625,7 +1625,7 @@ ecore_x_window_key_ungrab(Ecore_X_Window window,
 /*      } */
    if (keycode == 0) return;
 
-   m = mod;
+   m = _ecore_x_event_modifier(mod);
    if (any_mod) m = XCB_BUTTON_MASK_ANY;
    locks[0] = 0;
    locks[1] = ECORE_X_LOCK_CAPS;
@@ -1877,3 +1877,19 @@ ecore_x_pointer_last_xy_get(int *x,
 /*****************************************************************************/
 /*****************************************************************************/
 /*****************************************************************************/
+
+static int
+_ecore_x_event_modifier(unsigned int state)
+{
+   int xmodifiers = 0;
+
+   if (state & ECORE_EVENT_MODIFIER_SHIFT) xmodifiers |= ECORE_X_MODIFIER_SHIFT;
+   if (state & ECORE_EVENT_MODIFIER_CTRL) xmodifiers |= ECORE_X_MODIFIER_CTRL;
+   if (state & ECORE_EVENT_MODIFIER_ALT) xmodifiers |= ECORE_X_MODIFIER_ALT;
+   if (state & ECORE_EVENT_MODIFIER_WIN) xmodifiers |= ECORE_X_MODIFIER_WIN;
+   if (state & ECORE_EVENT_LOCK_SCROLL) xmodifiers |= ECORE_X_LOCK_SCROLL;
+   if (state & ECORE_EVENT_LOCK_NUM) xmodifiers |= ECORE_X_LOCK_NUM;
+   if (state & ECORE_EVENT_LOCK_CAPS) xmodifiers |= ECORE_X_LOCK_CAPS;
+
+   return xmodifiers;
+}