From bff8077cc619ad415102d958d07b15d555a4069c Mon Sep 17 00:00:00 2001 From: Vincent Torri Date: Mon, 26 Mar 2012 06:31:39 +0000 Subject: [PATCH] Ecore_Win32/WinCE: do not autorepeat Ctrl, Shift and Alt keys Patch by Shinwoo Kim SVN revision: 69628 --- legacy/ecore/ChangeLog | 5 +++++ legacy/ecore/NEWS | 2 ++ legacy/ecore/src/lib/ecore_win32/ecore_win32_event.c | 5 +++++ legacy/ecore/src/lib/ecore_wince/ecore_wince_event.c | 6 ++++++ 4 files changed, 18 insertions(+) diff --git a/legacy/ecore/ChangeLog b/legacy/ecore/ChangeLog index dc855e0877..6187370592 100644 --- a/legacy/ecore/ChangeLog +++ b/legacy/ecore/ChangeLog @@ -586,3 +586,8 @@ to match ecore_x API. * Add ecore_wince_window_focus(), ecore_wince_window_focus_get() and ecore_win32_window_focus_get(). + +2012-03-26 Shinwoo Kim + + * Do not autorepeat Ctrl, Shift and Alt keys on Windows + diff --git a/legacy/ecore/NEWS b/legacy/ecore/NEWS index 22fd7a7afb..5d4ed62fc2 100644 --- a/legacy/ecore/NEWS +++ b/legacy/ecore/NEWS @@ -50,6 +50,8 @@ Fixes: - prevent double free that could cause crash when an Ecore_Thread stop. * ecore_x: - ecore_x_randr_modes_info_get does not cut off the trailing '\0' anymore. + * ecore_win32/wince: + - do not autorepeat Ctrl, Shift and Alt keys Improvements: * ecore: diff --git a/legacy/ecore/src/lib/ecore_win32/ecore_win32_event.c b/legacy/ecore/src/lib/ecore_win32/ecore_win32_event.c index 388776cd6b..348aaffc28 100644 --- a/legacy/ecore/src/lib/ecore_win32/ecore_win32_event.c +++ b/legacy/ecore/src/lib/ecore_win32/ecore_win32_event.c @@ -660,9 +660,11 @@ _ecore_win32_event_keystroke_get(Ecore_Win32_Callback_Data *msg, char *kc = NULL; int key; int is_extended; + int previous_key_state; key = msg->window_param; is_extended = msg->data_param & 0x01000000; + previous_key_state = msg->data_param & 0x40000000; *keyname = NULL; *keysymbol = NULL; @@ -817,6 +819,7 @@ _ecore_win32_event_keystroke_get(Ecore_Win32_Callback_Data *msg, if (is_down) { + if (previous_key_state) return 0; res = GetKeyState(VK_LSHIFT); if (res & 0x8000) { @@ -868,6 +871,7 @@ _ecore_win32_event_keystroke_get(Ecore_Win32_Callback_Data *msg, if (is_down) { + if (previous_key_state) return 0; res = GetKeyState(VK_LCONTROL); if (res & 0x8000) { @@ -920,6 +924,7 @@ _ecore_win32_event_keystroke_get(Ecore_Win32_Callback_Data *msg, if (is_down) { + if (previous_key_state) return 0; res = GetKeyState(VK_LMENU); if (res & 0x8000) { diff --git a/legacy/ecore/src/lib/ecore_wince/ecore_wince_event.c b/legacy/ecore/src/lib/ecore_wince/ecore_wince_event.c index 41c355bf6a..f4c0a2a345 100644 --- a/legacy/ecore/src/lib/ecore_wince/ecore_wince_event.c +++ b/legacy/ecore/src/lib/ecore_wince/ecore_wince_event.c @@ -77,6 +77,9 @@ _ecore_wince_event_keystroke_get(int key, char *kn; char *ks; char *kc; + int previous_key_state; + + previous_key_state = msg->data_param & 0x40000000; *keyname = NULL; *keysymbol = NULL; @@ -269,6 +272,7 @@ _ecore_wince_event_keystroke_get(int key, if (is_down) { + if (previous_key_state) return 0; res = GetKeyState(VK_LSHIFT); if (res & 0x8000) { @@ -315,6 +319,7 @@ _ecore_wince_event_keystroke_get(int key, if (is_down) { + if (previous_key_state) return 0; res = GetKeyState(VK_LCONTROL); if (res & 0x8000) { @@ -365,6 +370,7 @@ _ecore_wince_event_keystroke_get(int key, if (is_down) { + if (previous_key_state) return 0; res = GetKeyState(VK_LMENU); if (res & 0x8000) {