* @cond LOCAL
*/
-static Ecore_WinCE_Window *_ecore_wince_mouse_down_last_window = NULL;
-static Ecore_WinCE_Window *_ecore_wince_mouse_down_last_last_window = NULL;
-static long _ecore_wince_mouse_down_last_time = 0;
-static long _ecore_wince_mouse_down_last_last_time = 0;
-static int _ecore_wince_mouse_down_did_triple = 0;
-static int _ecore_wince_mouse_up_count = 0;
+typedef enum
+{
+ ECORE_WINCE_KEY_MASK_LSHIFT = 1 << 0,
+ ECORE_WINCE_KEY_MASK_RSHIFT = 1 << 1,
+ ECORE_WINCE_KEY_MASK_LCONTROL = 1 << 2,
+ ECORE_WINCE_KEY_MASK_RCONTROL = 1 << 3,
+ ECORE_WINCE_KEY_MASK_LMENU = 1 << 4,
+ ECORE_WINCE_KEY_MASK_RMENU = 1 << 5
+} Ecore_Wince_Key_Mask;
+
+static Ecore_WinCE_Window *_ecore_wince_mouse_down_last_window = NULL;
+static Ecore_WinCE_Window *_ecore_wince_mouse_down_last_last_window = NULL;
+static long _ecore_wince_mouse_down_last_time = 0;
+static long _ecore_wince_mouse_down_last_last_time = 0;
+static int _ecore_wince_mouse_down_did_triple = 0;
+static int _ecore_wince_mouse_up_count = 0;
+static Ecore_Wince_Key_Mask _ecore_wince_key_mask = 0;
static void
_ecore_wince_event_free_key_down(void *data __UNUSED__,
}
static int
-_ecore_wince_event_keystroke_get(int key,
- char **keyname,
- char **keysymbol,
- char **keycompose)
+_ecore_wince_event_keystroke_get(int key,
+ Eina_Bool is_down,
+ char **keyname,
+ char **keysymbol,
+ char **keycompose)
{
char *kn;
char *ks;
kc = "";
break;
case VK_SHIFT:
- kn = "Shift";
- ks = "Shift";
- kc = "Shift";
- break;
+ {
+ SHORT res;
+
+ if (is_down)
+ {
+ res = GetKeyState(VK_LSHIFT);
+ if (res & 0x8000)
+ {
+ _ecore_wince_key_mask |= ECORE_WINCE_KEY_MASK_LSHIFT;
+ kn = "Shift_L";
+ ks = "Shift_L";
+ kc = "";
+ }
+ res = GetKeyState(VK_RSHIFT);
+ if (res & 0x8000)
+ {
+ _ecore_wince_key_mask |= ECORE_WINCE_KEY_MASK_RSHIFT;
+ kn = "Shift_R";
+ ks = "Shift_R";
+ kc = "";
+ }
+ }
+ else /* is_up */
+ {
+ res = GetKeyState(VK_LSHIFT);
+ if (!(res & 0x8000) &&
+ (_ecore_wince_key_mask & ECORE_WINCE_KEY_MASK_LSHIFT))
+ {
+ kn = "Shift_L";
+ ks = "Shift_L";
+ kc = "";
+ _ecore_wince_key_mask &= ~ECORE_WINCE_KEY_MASK_LSHIFT;
+ }
+ res = GetKeyState(VK_RSHIFT);
+ if (!(res & 0x8000) &&
+ (_ecore_wince_key_mask & ECORE_WINCE_KEY_MASK_RSHIFT))
+ {
+ kn = "Shift_R";
+ ks = "Shift_R";
+ kc = "";
+ _ecore_wince_key_mask &= ~ECORE_WINCE_KEY_MASK_RSHIFT;
+ }
+ }
+ break;
+ }
case VK_CONTROL:
- kn = "Control";
- ks = "Control";
- kc = "Control";
- break;
+ {
+ SHORT res;
+
+ if (is_down)
+ {
+ res = GetKeyState(VK_LCONTROL);
+ if (res & 0x8000)
+ {
+ _ecore_wince_key_mask |= ECORE_WINCE_KEY_MASK_LCONTROL;
+ kn = "Control_L";
+ ks = "Control_L";
+ kc = "";
+ break;
+ }
+ res = GetKeyState(VK_RCONTROL);
+ if (res & 0x8000)
+ {
+ _ecore_wince_key_mask |= ECORE_WINCE_KEY_MASK_RCONTROL;
+ kn = "Control_R";
+ ks = "Control_R";
+ kc = "";
+ break;
+ }
+ }
+ else /* is_up */
+ {
+ res = GetKeyState(VK_LCONTROL);
+ if (!(res & 0x8000) &&
+ (_ecore_wince_key_mask & ECORE_WINCE_KEY_MASK_LCONTROL))
+ {
+ kn = "Control_L";
+ ks = "Control_L";
+ kc = "";
+ _ecore_wince_key_mask &= ~ECORE_WINCE_KEY_MASK_LCONTROL;
+ break;
+ }
+ res = GetKeyState(VK_RCONTROL);
+ if (!(res & 0x8000) &&
+ (_ecore_wince_key_mask & ECORE_WINCE_KEY_MASK_RCONTROL))
+ {
+ kn = "Control_R";
+ ks = "Control_R";
+ kc = "";
+ _ecore_wince_key_mask &= ~ECORE_WINCE_KEY_MASK_RCONTROL;
+ break;
+ }
+ }
+ break;
+ }
case VK_MENU:
- kn = "Menu";
- ks = "Menu";
- kc = "";
- break;
+ {
+ SHORT res;
+
+ if (is_down)
+ {
+ res = GetKeyState(VK_LMENU);
+ if (res & 0x8000)
+ {
+ _ecore_wince_key_mask |= ECORE_WINCE_KEY_MASK_LMENU;
+ kn = "Alt_L";
+ ks = "Alt_L";
+ kc = "";
+ }
+ res = GetKeyState(VK_RMENU);
+ if (res & 0x8000)
+ {
+ _ecore_wince_key_mask |= ECORE_WINCE_KEY_MASK_RMENU;
+ kn = "Alt_R";
+ ks = "Alt_R";
+ kc = "";
+ }
+ }
+ else /* is_up */
+ {
+ res = GetKeyState(VK_LMENU);
+ if (!(res & 0x8000) &&
+ (_ecore_wince_key_mask & ECORE_WINCE_KEY_MASK_LMENU))
+ {
+ kn = "Alt_L";
+ ks = "Alt_L";
+ kc = "";
+ _ecore_wince_key_mask &= ~ECORE_WINCE_KEY_MASK_LMENU;
+ }
+ res = GetKeyState(VK_RMENU);
+ if (!(res & 0x8000) &&
+ (_ecore_wince_key_mask & ECORE_WINCE_KEY_MASK_RMENU))
+ {
+ kn = "Alt_R";
+ ks = "Alt_R";
+ kc = "";
+ _ecore_wince_key_mask &= ~ECORE_WINCE_KEY_MASK_RMENU;
+ }
+ }
+ break;
+ }
default:
/* other non keystroke characters */
return 0;
if (is_keystroke)
{
if (!_ecore_wince_event_keystroke_get(LOWORD(msg->window_param),
+ EINA_TRUE,
(char **)&e->keyname,
(char **)&e->key,
(char **)&e->string))
if (is_keystroke)
{
if (!_ecore_wince_event_keystroke_get(LOWORD(msg->window_param),
+ EINA_FALSE,
(char **)&e->keyname,
(char **)&e->key,
(char **)&e->string))