From 8c26779f167d3cc0d4d3b48d730f7c47d623d138 Mon Sep 17 00:00:00 2001 From: Carsten Haitzler Date: Thu, 29 Sep 2011 09:56:07 +0000 Subject: [PATCH] update modifiers on mapping changes too. SVN revision: 63665 --- .../src/lib/ecore_x/xcb/ecore_xcb_events.c | 3 +- .../src/lib/ecore_x/xcb/ecore_xcb_keymap.c | 6 ++ .../src/lib/ecore_x/xcb/ecore_xcb_private.h | 2 + legacy/ecore/src/lib/ecore_x/xlib/ecore_x.c | 66 ++++++++++--------- .../src/lib/ecore_x/xlib/ecore_x_events.c | 1 + .../src/lib/ecore_x/xlib/ecore_x_private.h | 2 + 6 files changed, 49 insertions(+), 31 deletions(-) diff --git a/legacy/ecore/src/lib/ecore_x/xcb/ecore_xcb_events.c b/legacy/ecore/src/lib/ecore_x/xcb/ecore_xcb_events.c index ada381e502..819be1b68d 100644 --- a/legacy/ecore/src/lib/ecore_x/xcb/ecore_xcb_events.c +++ b/legacy/ecore/src/lib/ecore_x/xcb/ecore_xcb_events.c @@ -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: diff --git a/legacy/ecore/src/lib/ecore_x/xcb/ecore_xcb_keymap.c b/legacy/ecore/src/lib/ecore_x/xcb/ecore_xcb_keymap.c index 83fb2a231d..83f51c3ea6 100644 --- a/legacy/ecore/src/lib/ecore_x/xcb/ecore_xcb_keymap.c +++ b/legacy/ecore/src/lib/ecore_x/xcb/ecore_xcb_keymap.c @@ -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) { diff --git a/legacy/ecore/src/lib/ecore_x/xcb/ecore_xcb_private.h b/legacy/ecore/src/lib/ecore_x/xcb/ecore_xcb_private.h index c118c2e56b..c143d9d9b2 100644 --- a/legacy/ecore/src/lib/ecore_x/xcb/ecore_xcb_private.h +++ b/legacy/ecore/src/lib/ecore_x/xcb/ecore_xcb_private.h @@ -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 diff --git a/legacy/ecore/src/lib/ecore_x/xlib/ecore_x.c b/legacy/ecore/src/lib/ecore_x/xlib/ecore_x.c index 24ecbdcab2..29ba75120b 100644 --- a/legacy/ecore/src/lib/ecore_x/xlib/ecore_x.c +++ b/legacy/ecore/src/lib/ecore_x/xlib/ecore_x.c @@ -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), diff --git a/legacy/ecore/src/lib/ecore_x/xlib/ecore_x_events.c b/legacy/ecore/src/lib/ecore_x/xlib/ecore_x_events.c index b207748a07..cbfb02db37 100644 --- a/legacy/ecore/src/lib/ecore_x/xlib/ecore_x_events.c +++ b/legacy/ecore/src/lib/ecore_x/xlib/ecore_x_events.c @@ -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) diff --git a/legacy/ecore/src/lib/ecore_x/xlib/ecore_x_private.h b/legacy/ecore/src/lib/ecore_x/xlib/ecore_x_private.h index ea03d92b65..301af0ce7d 100644 --- a/legacy/ecore/src/lib/ecore_x/xlib/ecore_x_private.h +++ b/legacy/ecore/src/lib/ecore_x/xlib/ecore_x_private.h @@ -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