The following patch fixes key modifiers for Ecore using SDL. The patch
is probably not complete, but it does and and is an improvement.

-Ryan

diff --git a/src/lib/ecore_sdl/ecore_sdl.c b/src/lib/ecore_sdl/ecore_sdl.c
index f2d9c4f..88bad56 100755
--- a/src/lib/ecore_sdl/ecore_sdl.c
+++ b/src/lib/ecore_sdl/ecore_sdl.c
@@ -108,6 +108,23 @@ ecore_sdl_shutdown(void)
    return _ecore_sdl_init_count;
 }

+static unsigned int
+_ecore_sdl_event_modifiers(int mod)
+{
+   unsigned int        modifiers = 0;
+
+   if(mod & KMOD_LSHIFT) modifiers |= ECORE_EVENT_MODIFIER_SHIFT;
+   if(mod & KMOD_RSHIFT) modifiers |= ECORE_EVENT_MODIFIER_SHIFT;
+   if(mod & KMOD_LCTRL) modifiers |= ECORE_EVENT_MODIFIER_CTRL;
+   if(mod & KMOD_RCTRL) modifiers |= ECORE_EVENT_MODIFIER_CTRL;
+   if(mod & KMOD_LALT) modifiers |= ECORE_EVENT_MODIFIER_ALT;
+   if(mod & KMOD_RALT) modifiers |= ECORE_EVENT_MODIFIER_ALT;
+   if(mod & KMOD_NUM) modifiers |= ECORE_EVENT_LOCK_NUM;
+   if(mod & KMOD_CAPS) modifiers |= ECORE_EVENT_LOCK_CAPS;
+
+   return modifiers;
+}
+
 static Ecore_Event_Key*
 _ecore_sdl_event_key(SDL_Event *event, double time)
 {
@@ -119,7 +136,7 @@ _ecore_sdl_event_key(SDL_Event *event, double time)

    ev->timestamp = time;
    ev->window = 0;
-   ev->modifiers = 0; /* FIXME: keep modifier around. */
+   ev->modifiers = _ecore_sdl_event_modifiers(SDL_GetModState());
    ev->key = NULL;
    ev->compose = NULL;

------------------------------------------------------------------------------
Throughout its 18-year history, RSA Conference consistently attracts the
world's best and brightest in the field, creating opportunities for Conference
attendees to learn about information security's most important issues through
interactions with peers, luminaries and emerging and established companies.
http://p.sf.net/sfu/rsaconf-dev2dev
_______________________________________________
enlightenment-devel mailing list
enlightenment-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/enlightenment-devel

Reply via email to