forked from enlightenment/efl
Ecore_WinCE: fix Shift, Control and Alt detection
SVN revision: 65423
This commit is contained in:
parent
2a930d615c
commit
1171e9f029
|
@ -23,12 +23,23 @@
|
|||
* @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__,
|
||||
|
@ -57,10 +68,11 @@ _ecore_wince_event_free_key_up(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;
|
||||
|
@ -252,20 +264,147 @@ _ecore_wince_event_keystroke_get(int key,
|
|||
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;
|
||||
|
@ -400,6 +539,7 @@ _ecore_wince_event_handle_key_press(Ecore_WinCE_Callback_Data *msg,
|
|||
if (is_keystroke)
|
||||
{
|
||||
if (!_ecore_wince_event_keystroke_get(LOWORD(msg->window_param),
|
||||
EINA_TRUE,
|
||||
(char **)&e->keyname,
|
||||
(char **)&e->key,
|
||||
(char **)&e->string))
|
||||
|
@ -448,6 +588,7 @@ _ecore_wince_event_handle_key_release(Ecore_WinCE_Callback_Data *msg,
|
|||
if (is_keystroke)
|
||||
{
|
||||
if (!_ecore_wince_event_keystroke_get(LOWORD(msg->window_param),
|
||||
EINA_FALSE,
|
||||
(char **)&e->keyname,
|
||||
(char **)&e->key,
|
||||
(char **)&e->string))
|
||||
|
|
Loading…
Reference in New Issue