From a524ab1fe3c20f194d1df5d8f6603593cf5872e3 Mon Sep 17 00:00:00 2001 From: Mike Blumenkrantz Date: Wed, 24 Jan 2018 16:07:36 -0500 Subject: [PATCH] ecore-x: add some useful xkb function wrappers @feature --- src/lib/ecore_x/Ecore_X.h | 2 ++ src/lib/ecore_x/ecore_x.c | 36 ++++++++++++++++++++++++++++++++++++ 2 files changed, 38 insertions(+) diff --git a/src/lib/ecore_x/Ecore_X.h b/src/lib/ecore_x/Ecore_X.h index b0955553ee..cb55dfa3ee 100644 --- a/src/lib/ecore_x/Ecore_X.h +++ b/src/lib/ecore_x/Ecore_X.h @@ -2729,6 +2729,8 @@ EAPI Ecore_X_Illume_Window_State ecore_x_e_illume_window_state_get(Eco EAPI void ecore_x_e_illume_window_state_send(Ecore_X_Window win, Ecore_X_Illume_Window_State state); /**< @since 1.9 */ EAPI void ecore_x_xkb_select_group(int group); /* @since 1.7 */ +EAPI Eina_Bool ecore_x_xkb_track_state(void); /** @since 1.21 */ +EAPI Eina_Bool ecore_x_xkb_state_get(Ecore_X_Xkb_State *state); /** @since 1.21 */ EAPI void ecore_x_e_window_rotation_supported_set(Ecore_X_Window root, Eina_Bool enabled); /**< @since 1.9 */ EAPI Eina_Bool ecore_x_e_window_rotation_supported_get(Ecore_X_Window root); /**< @since 1.9 */ diff --git a/src/lib/ecore_x/ecore_x.c b/src/lib/ecore_x/ecore_x.c index 81eae65294..bab8a41f6d 100644 --- a/src/lib/ecore_x/ecore_x.c +++ b/src/lib/ecore_x/ecore_x.c @@ -2536,6 +2536,42 @@ ecore_x_xkb_select_group(int group) #endif } +EAPI Eina_Bool +ecore_x_xkb_track_state(void) +{ + Eina_Bool ret = EINA_FALSE; +#ifdef ECORE_XKB + EINA_SAFETY_ON_NULL_RETURN_VAL(_ecore_x_disp, EINA_FALSE); + ret = XkbSelectEvents(_ecore_x_disp, XkbUseCoreKbd, XkbStateNotifyMask, XkbStateNotifyMask); + if (_ecore_xlib_sync) ecore_x_sync(); +#endif + return ret; +} + +EAPI Eina_Bool +ecore_x_xkb_state_get(Ecore_X_Xkb_State *state) +{ + Eina_Bool ret = EINA_FALSE; +#ifdef ECORE_XKB + XkbStateRec xkbstate; + + EINA_SAFETY_ON_NULL_RETURN_VAL(_ecore_x_disp, EINA_FALSE); + ret = XkbGetState(_ecore_x_disp, XkbUseCoreKbd, &xkbstate); + if (!ret) return ret; + + state->group = xkbstate.group; + state->base_group = xkbstate.base_group; + state->latched_group = xkbstate.latched_group; + state->locked_group = xkbstate.locked_group; + + state->mods = xkbstate.mods; + state->base_mods = xkbstate.base_mods; + state->latched_mods = xkbstate.latched_mods; + state->locked_mods = xkbstate.locked_mods; +#endif + return ret; +} + /*****************************************************************************/ /*****************************************************************************/ /*****************************************************************************/