From 5ea28a9f21917b3ee3c22ce64570a495d8e644d7 Mon Sep 17 00:00:00 2001 From: Vincent Torri Date: Thu, 26 Feb 2009 07:24:50 +0000 Subject: [PATCH] add more keyboard support on Windows CE SVN revision: 39238 --- .../ecore/src/lib/ecore_wince/ecore_wince.c | 11 +++- .../src/lib/ecore_wince/ecore_wince_event.c | 64 +++++++++++++++---- .../src/lib/ecore_wince/ecore_wince_private.h | 4 +- 3 files changed, 62 insertions(+), 17 deletions(-) diff --git a/legacy/ecore/src/lib/ecore_wince/ecore_wince.c b/legacy/ecore/src/lib/ecore_wince/ecore_wince.c index 4a3d59e0a3..02966d9e8f 100644 --- a/legacy/ecore/src/lib/ecore_wince/ecore_wince.c +++ b/legacy/ecore/src/lib/ecore_wince/ecore_wince.c @@ -232,14 +232,19 @@ _ecore_wince_window_procedure(HWND window, switch (data->message) { /* Keyboard input notifications */ + case WM_CHAR: + _ecore_wince_event_handle_key_press(data, 0); + break; case WM_HOTKEY: - _ecore_wince_event_handle_key_press(data); + _ecore_wince_event_handle_key_press(data, 1); break; case WM_KEYDOWN: - _ecore_wince_event_handle_key_press(data); + case WM_SYSKEYDOWN: + _ecore_wince_event_handle_key_press(data, 1); break; case WM_KEYUP: - _ecore_wince_event_handle_key_release(data); + case WM_SYSKEYUP: + _ecore_wince_event_handle_key_release(data, 1); break; case WM_SETFOCUS: _ecore_wince_event_handle_focus_in(data); 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 8f2e97ab6b..7d8b1987d7 100644 --- a/legacy/ecore/src/lib/ecore_wince/ecore_wince_event.c +++ b/legacy/ecore/src/lib/ecore_wince/ecore_wince_event.c @@ -49,7 +49,8 @@ static int _ecore_wince_event_char_get(int key, /***** Global functions *****/ void -_ecore_wince_event_handle_key_press(Ecore_WinCE_Callback_Data *msg) +_ecore_wince_event_handle_key_press(Ecore_WinCE_Callback_Data *msg, + int is_keystroke) { Ecore_WinCE_Event_Key_Down *e; @@ -58,13 +59,27 @@ _ecore_wince_event_handle_key_press(Ecore_WinCE_Callback_Data *msg) e = (Ecore_WinCE_Event_Key_Down *)malloc(sizeof(Ecore_WinCE_Event_Key_Down)); if (!e) return; - if (!_ecore_wince_event_keystroke_get(LOWORD(msg->window_param), + if (is_keystroke) + { + if (!_ecore_wince_event_keystroke_get(LOWORD(msg->window_param), + &e->keyname, + &e->keysymbol, + &e->keycompose)) + { + free(e); + return; + } + } + else + { + if (!_ecore_wince_event_char_get(LOWORD(msg->window_param), &e->keyname, &e->keysymbol, &e->keycompose)) - { - free(e); - return; + { + free(e); + return; + } } e->window = (void *)GetWindowLong(msg->window, GWL_USERDATA); @@ -81,7 +96,8 @@ _ecore_wince_event_handle_key_press(Ecore_WinCE_Callback_Data *msg) } void -_ecore_wince_event_handle_key_release(Ecore_WinCE_Callback_Data *msg) +_ecore_wince_event_handle_key_release(Ecore_WinCE_Callback_Data *msg, + int is_keystroke) { Ecore_WinCE_Event_Key_Up *e; @@ -90,13 +106,27 @@ _ecore_wince_event_handle_key_release(Ecore_WinCE_Callback_Data *msg) e = (Ecore_WinCE_Event_Key_Up *)calloc(1, sizeof(Ecore_WinCE_Event_Key_Up)); if (!e) return; - if (!_ecore_wince_event_keystroke_get(LOWORD(msg->window_param), + if (is_keystroke) + { + if (!_ecore_wince_event_keystroke_get(LOWORD(msg->window_param), + &e->keyname, + &e->keysymbol, + &e->keycompose)) + { + free(e); + return; + } + } + else + { + if (!_ecore_wince_event_char_get(LOWORD(msg->window_param), &e->keyname, &e->keysymbol, &e->keycompose)) - { - free(e); - return; + { + free(e); + return; + } } e->window = (void *)GetWindowLong(msg->window, GWL_USERDATA); @@ -554,7 +584,7 @@ _ecore_wince_event_handle_delete_request(Ecore_WinCE_Callback_Data *msg) /***** Private functions definitions *****/ static void -_ecore_wince_event_free_key_down(void *data, +_ecore_wince_event_free_key_down(void *data __UNUSED__, void *ev) { Ecore_WinCE_Event_Key_Down *e; @@ -567,7 +597,7 @@ _ecore_wince_event_free_key_down(void *data, } static void -_ecore_wince_event_free_key_up(void *data, +_ecore_wince_event_free_key_up(void *data __UNUSED__, void *ev) { Ecore_WinCE_Event_Key_Up *e; @@ -766,6 +796,16 @@ _ecore_wince_event_keystroke_get(int key, ks = "F24"; kc = ""; break; + case VK_APPS: + kn = "Application"; + ks = "Application"; + kc = ""; + break; + case VK_MENU: + kn = "Menu"; + ks = "Menu"; + kc = ""; + break; default: /* other non keystroke characters */ return 0; diff --git a/legacy/ecore/src/lib/ecore_wince/ecore_wince_private.h b/legacy/ecore/src/lib/ecore_wince/ecore_wince_private.h index 85ad0f73e7..eedab27e8d 100644 --- a/legacy/ecore/src/lib/ecore_wince/ecore_wince_private.h +++ b/legacy/ecore/src/lib/ecore_wince/ecore_wince_private.h @@ -49,8 +49,8 @@ extern Ecore_WinCE_Window *_ecore_wince_event_last_window; extern HINSTANCE _ecore_wince_instance; -void _ecore_wince_event_handle_key_press(Ecore_WinCE_Callback_Data *msg); -void _ecore_wince_event_handle_key_release(Ecore_WinCE_Callback_Data *msg); +void _ecore_wince_event_handle_key_press(Ecore_WinCE_Callback_Data *msg, int is_keystroke); +void _ecore_wince_event_handle_key_release(Ecore_WinCE_Callback_Data *msg, int is_keystroke); void _ecore_wince_event_handle_button_press(Ecore_WinCE_Callback_Data *msg, int button); void _ecore_wince_event_handle_button_release(Ecore_WinCE_Callback_Data *msg, int button); void _ecore_wince_event_handle_motion_notify(Ecore_WinCE_Callback_Data *msg);