update modifiers on mapping changes too.

SVN revision: 63665
This commit is contained in:
Carsten Haitzler 2011-09-29 09:56:07 +00:00
parent b70d6a0556
commit 8c26779f16
6 changed files with 49 additions and 31 deletions

View 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:

View 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)
{

View 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

View 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),

View 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)

View 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