diff --git a/src/lib/ecore_win32/ecore_win32.c b/src/lib/ecore_win32/ecore_win32.c index 7b170c954d..bbcb22d177 100644 --- a/src/lib/ecore_win32/ecore_win32.c +++ b/src/lib/ecore_win32/ecore_win32.c @@ -75,14 +75,14 @@ _ecore_win32_window_procedure(HWND window, { /* Keyboard input notifications */ case WM_KEYDOWN: - /*case WM_SYSKEYDOWN:*/ + case WM_SYSKEYDOWN: INF("key down message"); _ecore_win32_event_handle_key_press(data); return 0; /* case WM_CHAR: */ /* case WM_SYSCHAR: */ case WM_KEYUP: - /*case WM_SYSKEYUP:*/ + case WM_SYSKEYUP: INF("key up message"); _ecore_win32_event_handle_key_release(data); return 0; diff --git a/src/lib/elementary/efl_ui_win.c b/src/lib/elementary/efl_ui_win.c index a47d5f3e5f..baa84bac47 100644 --- a/src/lib/elementary/efl_ui_win.c +++ b/src/lib/elementary/efl_ui_win.c @@ -97,6 +97,7 @@ struct _Efl_Ui_Win_Data struct { Ecore_Win32_Window *win; + Ecore_Event_Handler *key_down_handler; } win32; #endif @@ -2803,6 +2804,9 @@ _efl_ui_win_efl_canvas_group_group_del(Eo *obj, Efl_Ui_Win_Data *sd) if (sd->pointer.ee) ecore_evas_free(sd->pointer.ee); sd->pointer.surf = NULL; #endif +#ifdef HAVE_ELEMENTARY_WIN32 + ecore_event_handler_del(sd->win32.key_down_handler); +#endif if (sd->type == ELM_WIN_INLINED_IMAGE) { @@ -3715,6 +3719,23 @@ _elm_win_property_change(void *data, } #endif +#ifdef HAVE_ELEMENTARY_WIN32 +static Eina_Bool +_elm_win_key_down(void *data, + int type EINA_UNUSED, + void *event) +{ + ELM_WIN_DATA_GET(data, sd); + Ecore_Event_Key *e = event; + if ((e->modifiers & ECORE_EVENT_MODIFIER_ALT) && + (strcmp(e->key, "F4") == 0)) + _elm_win_delete_request(sd->ee); + + return ECORE_CALLBACK_PASS_ON; +} + +#endif + static void _elm_win_focus_highlight_hide(void *data EINA_UNUSED, Evas_Object *obj, @@ -5012,6 +5033,8 @@ _elm_win_finalize_internal(Eo *obj, Efl_Ui_Win_Data *sd, const char *name, Elm_W _elm_win_cocoawindow_get(sd); #endif #ifdef HAVE_ELEMENTARY_WIN32 + sd->win32.key_down_handler = ecore_event_handler_add(ECORE_EVENT_KEY_DOWN, + _elm_win_key_down, obj); _internal_elm_win_win32window_get(sd); #endif