diff options
Diffstat (limited to '')
-rw-r--r-- | libraries/ecore/src/lib/ecore_win32/Ecore_Win32.h | 36 | ||||
-rw-r--r-- | libraries/ecore/src/lib/ecore_win32/Makefile.in | 14 | ||||
-rw-r--r-- | libraries/ecore/src/lib/ecore_win32/ecore_win32.c | 61 | ||||
-rw-r--r-- | libraries/ecore/src/lib/ecore_win32/ecore_win32_event.c | 192 | ||||
-rw-r--r-- | libraries/ecore/src/lib/ecore_win32/ecore_win32_private.h | 19 |
5 files changed, 225 insertions, 97 deletions
diff --git a/libraries/ecore/src/lib/ecore_win32/Ecore_Win32.h b/libraries/ecore/src/lib/ecore_win32/Ecore_Win32.h index bdfb1c8..95e3749 100644 --- a/libraries/ecore/src/lib/ecore_win32/Ecore_Win32.h +++ b/libraries/ecore/src/lib/ecore_win32/Ecore_Win32.h | |||
@@ -221,7 +221,7 @@ struct _Ecore_Win32_Event_Mouse_In | |||
221 | Ecore_Win32_Window *window; /**< The window that received the event */ | 221 | Ecore_Win32_Window *window; /**< The window that received the event */ |
222 | int x; /**< The x coordinate where the mouse leaved */ | 222 | int x; /**< The x coordinate where the mouse leaved */ |
223 | int y; /**< The y coordinate where the mouse entered */ | 223 | int y; /**< The y coordinate where the mouse entered */ |
224 | long time; /**< The time the event occurred */ | 224 | unsigned long timestamp; /**< The time the event occurred */ |
225 | }; | 225 | }; |
226 | 226 | ||
227 | /** | 227 | /** |
@@ -233,7 +233,7 @@ struct _Ecore_Win32_Event_Mouse_Out | |||
233 | Ecore_Win32_Window *window; /**< The window that received the event */ | 233 | Ecore_Win32_Window *window; /**< The window that received the event */ |
234 | int x; /**< The x coordinate where the mouse leaved */ | 234 | int x; /**< The x coordinate where the mouse leaved */ |
235 | int y; /**< The y coordinate where the mouse leaved */ | 235 | int y; /**< The y coordinate where the mouse leaved */ |
236 | long time; /**< The time the event occurred */ | 236 | unsigned long timestamp; /**< The time the event occurred */ |
237 | }; | 237 | }; |
238 | 238 | ||
239 | /** | 239 | /** |
@@ -243,7 +243,7 @@ struct _Ecore_Win32_Event_Mouse_Out | |||
243 | struct _Ecore_Win32_Event_Window_Focus_In | 243 | struct _Ecore_Win32_Event_Window_Focus_In |
244 | { | 244 | { |
245 | Ecore_Win32_Window *window; /**< The window that received the event */ | 245 | Ecore_Win32_Window *window; /**< The window that received the event */ |
246 | long long time; /**< The time the event occurred */ | 246 | unsigned long timestamp; /**< The time the event occurred */ |
247 | }; | 247 | }; |
248 | 248 | ||
249 | /** | 249 | /** |
@@ -253,7 +253,7 @@ struct _Ecore_Win32_Event_Window_Focus_In | |||
253 | struct _Ecore_Win32_Event_Window_Focus_Out | 253 | struct _Ecore_Win32_Event_Window_Focus_Out |
254 | { | 254 | { |
255 | Ecore_Win32_Window *window; /**< The window that received the event */ | 255 | Ecore_Win32_Window *window; /**< The window that received the event */ |
256 | long time; /**< The time the event occurred */ | 256 | unsigned long timestamp; /**< The time the event occurred */ |
257 | }; | 257 | }; |
258 | 258 | ||
259 | /** | 259 | /** |
@@ -267,7 +267,7 @@ struct _Ecore_Win32_Event_Window_Damage | |||
267 | int y; /**< The y coordinate of the top left corner of the damaged region */ | 267 | int y; /**< The y coordinate of the top left corner of the damaged region */ |
268 | int width; /**< The width of the damaged region */ | 268 | int width; /**< The width of the damaged region */ |
269 | int height; /**< The time the event occurred */ | 269 | int height; /**< The time the event occurred */ |
270 | long time; /**< The time the event occurred */ | 270 | unsigned long timestamp; /**< The time the event occurred */ |
271 | }; | 271 | }; |
272 | 272 | ||
273 | /** | 273 | /** |
@@ -277,7 +277,7 @@ struct _Ecore_Win32_Event_Window_Damage | |||
277 | struct _Ecore_Win32_Event_Window_Create | 277 | struct _Ecore_Win32_Event_Window_Create |
278 | { | 278 | { |
279 | Ecore_Win32_Window *window; /**< The window that received the event */ | 279 | Ecore_Win32_Window *window; /**< The window that received the event */ |
280 | long time; /**< The time the event occurred */ | 280 | unsigned long timestamp; /**< The time the event occurred */ |
281 | }; | 281 | }; |
282 | 282 | ||
283 | /** | 283 | /** |
@@ -287,7 +287,7 @@ struct _Ecore_Win32_Event_Window_Create | |||
287 | struct _Ecore_Win32_Event_Window_Destroy | 287 | struct _Ecore_Win32_Event_Window_Destroy |
288 | { | 288 | { |
289 | Ecore_Win32_Window *window; /**< The window that received the event */ | 289 | Ecore_Win32_Window *window; /**< The window that received the event */ |
290 | long time; /**< The time the event occurred */ | 290 | unsigned long timestamp; /**< The time the event occurred */ |
291 | }; | 291 | }; |
292 | 292 | ||
293 | /** | 293 | /** |
@@ -297,7 +297,7 @@ struct _Ecore_Win32_Event_Window_Destroy | |||
297 | struct _Ecore_Win32_Event_Window_Hide | 297 | struct _Ecore_Win32_Event_Window_Hide |
298 | { | 298 | { |
299 | Ecore_Win32_Window *window; /**< The window that received the event */ | 299 | Ecore_Win32_Window *window; /**< The window that received the event */ |
300 | long time; /**< The time the event occurred */ | 300 | unsigned long timestamp; /**< The time the event occurred */ |
301 | }; | 301 | }; |
302 | 302 | ||
303 | /** | 303 | /** |
@@ -307,7 +307,7 @@ struct _Ecore_Win32_Event_Window_Hide | |||
307 | struct _Ecore_Win32_Event_Window_Show | 307 | struct _Ecore_Win32_Event_Window_Show |
308 | { | 308 | { |
309 | Ecore_Win32_Window *window; /**< The window that received the event */ | 309 | Ecore_Win32_Window *window; /**< The window that received the event */ |
310 | long time; /**< The time the event occurred */ | 310 | unsigned long timestamp; /**< The time the event occurred */ |
311 | }; | 311 | }; |
312 | 312 | ||
313 | /** | 313 | /** |
@@ -322,7 +322,7 @@ struct _Ecore_Win32_Event_Window_Configure | |||
322 | int y; /**< The new y coordinate of the top left corner */ | 322 | int y; /**< The new y coordinate of the top left corner */ |
323 | int width; /**< The new width */ | 323 | int width; /**< The new width */ |
324 | int height; /**< The new height */ | 324 | int height; /**< The new height */ |
325 | long time; /**< The time the event occurred */ | 325 | unsigned long timestamp; /**< The time the event occurred */ |
326 | }; | 326 | }; |
327 | 327 | ||
328 | /** | 328 | /** |
@@ -334,7 +334,7 @@ struct _Ecore_Win32_Event_Window_Resize | |||
334 | Ecore_Win32_Window *window; /**< The window that received the event */ | 334 | Ecore_Win32_Window *window; /**< The window that received the event */ |
335 | int width; /**< The new width */ | 335 | int width; /**< The new width */ |
336 | int height; /**< The new height */ | 336 | int height; /**< The new height */ |
337 | long time; /**< The time the event occurred */ | 337 | unsigned long timestamp; /**< The time the event occurred */ |
338 | }; | 338 | }; |
339 | 339 | ||
340 | /** | 340 | /** |
@@ -344,7 +344,7 @@ struct _Ecore_Win32_Event_Window_Resize | |||
344 | struct _Ecore_Win32_Event_Window_Delete_Request | 344 | struct _Ecore_Win32_Event_Window_Delete_Request |
345 | { | 345 | { |
346 | Ecore_Win32_Window *window; /**< The window that received the event */ | 346 | Ecore_Win32_Window *window; /**< The window that received the event */ |
347 | long time; /**< The time the event occurred */ | 347 | unsigned long timestamp; /**< The time the event occurred */ |
348 | }; | 348 | }; |
349 | 349 | ||
350 | /** | 350 | /** |
@@ -369,12 +369,12 @@ EAPI extern int ECORE_WIN32_EVENT_WINDOW_DELETE_REQUEST; /**< Ecore_Event for th | |||
369 | 369 | ||
370 | /* Core */ | 370 | /* Core */ |
371 | 371 | ||
372 | EAPI int ecore_win32_init(); | 372 | EAPI int ecore_win32_init(); |
373 | EAPI int ecore_win32_shutdown(); | 373 | EAPI int ecore_win32_shutdown(); |
374 | EAPI int ecore_win32_screen_depth_get(); | 374 | EAPI int ecore_win32_screen_depth_get(); |
375 | EAPI void ecore_win32_double_click_time_set(double t); | 375 | EAPI void ecore_win32_double_click_time_set(double t); |
376 | EAPI double ecore_win32_double_click_time_get(void); | 376 | EAPI double ecore_win32_double_click_time_get(void); |
377 | EAPI long ecore_win32_current_time_get(void); | 377 | EAPI unsigned long ecore_win32_current_time_get(void); |
378 | 378 | ||
379 | /* Window */ | 379 | /* Window */ |
380 | 380 | ||
diff --git a/libraries/ecore/src/lib/ecore_win32/Makefile.in b/libraries/ecore/src/lib/ecore_win32/Makefile.in index 4e4f363..9994ee7 100644 --- a/libraries/ecore/src/lib/ecore_win32/Makefile.in +++ b/libraries/ecore/src/lib/ecore_win32/Makefile.in | |||
@@ -268,10 +268,10 @@ PATH_SEPARATOR = @PATH_SEPARATOR@ | |||
268 | PIXMAN_CFLAGS = @PIXMAN_CFLAGS@ | 268 | PIXMAN_CFLAGS = @PIXMAN_CFLAGS@ |
269 | PIXMAN_LIBS = @PIXMAN_LIBS@ | 269 | PIXMAN_LIBS = @PIXMAN_LIBS@ |
270 | PKG_CONFIG = @PKG_CONFIG@ | 270 | PKG_CONFIG = @PKG_CONFIG@ |
271 | PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ | ||
272 | PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ | ||
273 | POSUB = @POSUB@ | 271 | POSUB = @POSUB@ |
274 | RANLIB = @RANLIB@ | 272 | RANLIB = @RANLIB@ |
273 | SCIM_CFLAGS = @SCIM_CFLAGS@ | ||
274 | SCIM_LIBS = @SCIM_LIBS@ | ||
275 | SDL_CFLAGS = @SDL_CFLAGS@ | 275 | SDL_CFLAGS = @SDL_CFLAGS@ |
276 | SDL_CONFIG = @SDL_CONFIG@ | 276 | SDL_CONFIG = @SDL_CONFIG@ |
277 | SDL_LIBS = @SDL_LIBS@ | 277 | SDL_LIBS = @SDL_LIBS@ |
@@ -290,6 +290,10 @@ TSLIB_LIBS = @TSLIB_LIBS@ | |||
290 | USE_NLS = @USE_NLS@ | 290 | USE_NLS = @USE_NLS@ |
291 | VERSION = @VERSION@ | 291 | VERSION = @VERSION@ |
292 | VMAJ = @VMAJ@ | 292 | VMAJ = @VMAJ@ |
293 | WAYLAND_CFLAGS = @WAYLAND_CFLAGS@ | ||
294 | WAYLAND_EGL_CFLAGS = @WAYLAND_EGL_CFLAGS@ | ||
295 | WAYLAND_EGL_LIBS = @WAYLAND_EGL_LIBS@ | ||
296 | WAYLAND_LIBS = @WAYLAND_LIBS@ | ||
293 | WIN32_CFLAGS = @WIN32_CFLAGS@ | 297 | WIN32_CFLAGS = @WIN32_CFLAGS@ |
294 | WIN32_CPPFLAGS = @WIN32_CPPFLAGS@ | 298 | WIN32_CPPFLAGS = @WIN32_CPPFLAGS@ |
295 | WIN32_LIBS = @WIN32_LIBS@ | 299 | WIN32_LIBS = @WIN32_LIBS@ |
@@ -403,6 +407,8 @@ ecore_imf_cflags = @ecore_imf_cflags@ | |||
403 | ecore_imf_evas_cflags = @ecore_imf_evas_cflags@ | 407 | ecore_imf_evas_cflags = @ecore_imf_evas_cflags@ |
404 | ecore_imf_evas_libs = @ecore_imf_evas_libs@ | 408 | ecore_imf_evas_libs = @ecore_imf_evas_libs@ |
405 | ecore_imf_libs = @ecore_imf_libs@ | 409 | ecore_imf_libs = @ecore_imf_libs@ |
410 | ecore_imf_scim_cflags = @ecore_imf_scim_cflags@ | ||
411 | ecore_imf_scim_libs = @ecore_imf_scim_libs@ | ||
406 | ecore_imf_xim_cflags = @ecore_imf_xim_cflags@ | 412 | ecore_imf_xim_cflags = @ecore_imf_xim_cflags@ |
407 | ecore_imf_xim_libs = @ecore_imf_xim_libs@ | 413 | ecore_imf_xim_libs = @ecore_imf_xim_libs@ |
408 | ecore_input_cflags = @ecore_input_cflags@ | 414 | ecore_input_cflags = @ecore_input_cflags@ |
@@ -415,6 +421,8 @@ ecore_psl1ght_cflags = @ecore_psl1ght_cflags@ | |||
415 | ecore_psl1ght_libs = @ecore_psl1ght_libs@ | 421 | ecore_psl1ght_libs = @ecore_psl1ght_libs@ |
416 | ecore_sdl_cflags = @ecore_sdl_cflags@ | 422 | ecore_sdl_cflags = @ecore_sdl_cflags@ |
417 | ecore_sdl_libs = @ecore_sdl_libs@ | 423 | ecore_sdl_libs = @ecore_sdl_libs@ |
424 | ecore_wayland_cflags = @ecore_wayland_cflags@ | ||
425 | ecore_wayland_libs = @ecore_wayland_libs@ | ||
418 | ecore_win32_cflags = @ecore_win32_cflags@ | 426 | ecore_win32_cflags = @ecore_win32_cflags@ |
419 | ecore_win32_libs = @ecore_win32_libs@ | 427 | ecore_win32_libs = @ecore_win32_libs@ |
420 | ecore_wince_cflags = @ecore_wince_cflags@ | 428 | ecore_wince_cflags = @ecore_wince_cflags@ |
@@ -459,12 +467,14 @@ requirements_ecore_fb = @requirements_ecore_fb@ | |||
459 | requirements_ecore_file = @requirements_ecore_file@ | 467 | requirements_ecore_file = @requirements_ecore_file@ |
460 | requirements_ecore_imf = @requirements_ecore_imf@ | 468 | requirements_ecore_imf = @requirements_ecore_imf@ |
461 | requirements_ecore_imf_evas = @requirements_ecore_imf_evas@ | 469 | requirements_ecore_imf_evas = @requirements_ecore_imf_evas@ |
470 | requirements_ecore_imf_scim = @requirements_ecore_imf_scim@ | ||
462 | requirements_ecore_imf_xim = @requirements_ecore_imf_xim@ | 471 | requirements_ecore_imf_xim = @requirements_ecore_imf_xim@ |
463 | requirements_ecore_input = @requirements_ecore_input@ | 472 | requirements_ecore_input = @requirements_ecore_input@ |
464 | requirements_ecore_input_evas = @requirements_ecore_input_evas@ | 473 | requirements_ecore_input_evas = @requirements_ecore_input_evas@ |
465 | requirements_ecore_ipc = @requirements_ecore_ipc@ | 474 | requirements_ecore_ipc = @requirements_ecore_ipc@ |
466 | requirements_ecore_psl1ght = @requirements_ecore_psl1ght@ | 475 | requirements_ecore_psl1ght = @requirements_ecore_psl1ght@ |
467 | requirements_ecore_sdl = @requirements_ecore_sdl@ | 476 | requirements_ecore_sdl = @requirements_ecore_sdl@ |
477 | requirements_ecore_wayland = @requirements_ecore_wayland@ | ||
468 | requirements_ecore_win32 = @requirements_ecore_win32@ | 478 | requirements_ecore_win32 = @requirements_ecore_win32@ |
469 | requirements_ecore_wince = @requirements_ecore_wince@ | 479 | requirements_ecore_wince = @requirements_ecore_wince@ |
470 | requirements_ecore_x = @requirements_ecore_x@ | 480 | requirements_ecore_x = @requirements_ecore_x@ |
diff --git a/libraries/ecore/src/lib/ecore_win32/ecore_win32.c b/libraries/ecore/src/lib/ecore_win32/ecore_win32.c index 19ca3ed..b571d74 100644 --- a/libraries/ecore/src/lib/ecore_win32/ecore_win32.c +++ b/libraries/ecore/src/lib/ecore_win32/ecore_win32.c | |||
@@ -73,18 +73,44 @@ _ecore_win32_window_procedure(HWND window, | |||
73 | data->message = message; | 73 | data->message = message; |
74 | data->window_param = window_param; | 74 | data->window_param = window_param; |
75 | data->data_param = data_param; | 75 | data->data_param = data_param; |
76 | data->time = GetMessageTime(); | 76 | data->timestamp = GetMessageTime(); |
77 | coord = GetMessagePos(); | 77 | coord = GetMessagePos(); |
78 | point = MAKEPOINTS(coord); | 78 | point = MAKEPOINTS(coord); |
79 | data->x = point.x; | 79 | data->x = point.x; |
80 | data->y = point.y; | 80 | data->y = point.y; |
81 | data->discard_ctrl = EINA_FALSE; | ||
81 | 82 | ||
82 | switch (data->message) | 83 | switch (data->message) |
83 | { | 84 | { |
84 | /* Keyboard input notifications */ | 85 | /* Keyboard input notifications */ |
85 | case WM_KEYDOWN: | 86 | case WM_KEYDOWN: |
86 | case WM_SYSKEYDOWN: | 87 | case WM_SYSKEYDOWN: |
87 | INF("keydown message"); | 88 | if ((data->message == WM_KEYDOWN) && |
89 | (data->window_param == VK_CONTROL) && | ||
90 | ((HIWORD(data->data_param) & KF_EXTENDED) == 0)) | ||
91 | { | ||
92 | /* Ctrl left key is pressed */ | ||
93 | BOOL res; | ||
94 | MSG next_msg; | ||
95 | |||
96 | /* | ||
97 | * we check if the next message | ||
98 | * - is a WM_KEYDOWN | ||
99 | * - has the same timestamp than the Ctrl one | ||
100 | * - is the key press of the right Alt key | ||
101 | */ | ||
102 | res = PeekMessage(&next_msg, data->window, | ||
103 | WM_KEYDOWN, WM_KEYDOWN, | ||
104 | PM_NOREMOVE); | ||
105 | if (res && | ||
106 | (next_msg.wParam == VK_MENU) && | ||
107 | (next_msg.time == data->timestamp) && | ||
108 | (HIWORD(next_msg.lParam) & KF_EXTENDED)) | ||
109 | { | ||
110 | INF("discard left Ctrl key press (sent by AltGr key press)"); | ||
111 | data->discard_ctrl = EINA_TRUE; | ||
112 | } | ||
113 | } | ||
88 | _ecore_win32_event_handle_key_press(data, 1); | 114 | _ecore_win32_event_handle_key_press(data, 1); |
89 | return 0; | 115 | return 0; |
90 | case WM_CHAR: | 116 | case WM_CHAR: |
@@ -95,6 +121,33 @@ _ecore_win32_window_procedure(HWND window, | |||
95 | case WM_KEYUP: | 121 | case WM_KEYUP: |
96 | case WM_SYSKEYUP: | 122 | case WM_SYSKEYUP: |
97 | INF("keyup message"); | 123 | INF("keyup message"); |
124 | if ((data->window_param == VK_CONTROL) && | ||
125 | ((HIWORD(data->data_param) & KF_EXTENDED) == 0)) | ||
126 | { | ||
127 | /* Ctrl left key is pressed */ | ||
128 | BOOL res; | ||
129 | MSG next_msg; | ||
130 | |||
131 | /* | ||
132 | * we check if the next message | ||
133 | * - is a WM_KEYUP or WM_SYSKEYUP | ||
134 | * - has the same timestamp than the Ctrl one | ||
135 | * - is the key release of the right Alt key | ||
136 | */ | ||
137 | res = PeekMessage(&next_msg, data->window, | ||
138 | WM_KEYUP, WM_SYSKEYUP, | ||
139 | PM_NOREMOVE); | ||
140 | if (res && | ||
141 | ((next_msg.message == WM_KEYUP) || | ||
142 | (next_msg.message == WM_SYSKEYUP)) && | ||
143 | (next_msg.wParam == VK_MENU) && | ||
144 | (next_msg.time == data->timestamp) && | ||
145 | (HIWORD(next_msg.lParam) & KF_EXTENDED)) | ||
146 | { | ||
147 | INF("discard left Ctrl key release (sent by AltGr key release)"); | ||
148 | data->discard_ctrl = EINA_TRUE; | ||
149 | } | ||
150 | } | ||
98 | _ecore_win32_event_handle_key_release(data); | 151 | _ecore_win32_event_handle_key_release(data); |
99 | return 0; | 152 | return 0; |
100 | case WM_SETFOCUS: | 153 | case WM_SETFOCUS: |
@@ -492,7 +545,7 @@ _ecore_win32_window_procedure(HWND window, | |||
492 | 545 | ||
493 | HINSTANCE _ecore_win32_instance = NULL; | 546 | HINSTANCE _ecore_win32_instance = NULL; |
494 | double _ecore_win32_double_click_time = 0.25; | 547 | double _ecore_win32_double_click_time = 0.25; |
495 | long _ecore_win32_event_last_time = 0; | 548 | unsigned long _ecore_win32_event_last_time = 0; |
496 | Ecore_Win32_Window *_ecore_win32_event_last_window = NULL; | 549 | Ecore_Win32_Window *_ecore_win32_event_last_window = NULL; |
497 | int _ecore_win32_log_dom_global = -1; | 550 | int _ecore_win32_log_dom_global = -1; |
498 | 551 | ||
@@ -777,7 +830,7 @@ ecore_win32_double_click_time_get(void) | |||
777 | * | 830 | * |
778 | * This function returns the last event time. | 831 | * This function returns the last event time. |
779 | */ | 832 | */ |
780 | EAPI long | 833 | EAPI unsigned long |
781 | ecore_win32_current_time_get(void) | 834 | ecore_win32_current_time_get(void) |
782 | { | 835 | { |
783 | return _ecore_win32_event_last_time; | 836 | return _ecore_win32_event_last_time; |
diff --git a/libraries/ecore/src/lib/ecore_win32/ecore_win32_event.c b/libraries/ecore/src/lib/ecore_win32/ecore_win32_event.c index 63356d3..388776c 100644 --- a/libraries/ecore/src/lib/ecore_win32/ecore_win32_event.c +++ b/libraries/ecore/src/lib/ecore_win32/ecore_win32_event.c | |||
@@ -45,18 +45,18 @@ static void _ecore_win32_event_free_key_down(void *data, | |||
45 | static void _ecore_win32_event_free_key_up(void *data, | 45 | static void _ecore_win32_event_free_key_up(void *data, |
46 | void *ev); | 46 | void *ev); |
47 | 47 | ||
48 | static int _ecore_win32_event_keystroke_get(int key, | 48 | static int _ecore_win32_event_keystroke_get(Ecore_Win32_Callback_Data *msg, |
49 | int is_extended, | 49 | Eina_Bool is_down, |
50 | Eina_Bool is_down, | 50 | char **keyname, |
51 | char **keyname, | 51 | char **keysymbol, |
52 | char **keysymbol, | 52 | char **keycompose, |
53 | char **keycompose, | 53 | unsigned int *modifiers); |
54 | unsigned int *modifiers); | ||
55 | 54 | ||
56 | static int _ecore_win32_event_char_get(int key, | 55 | static int _ecore_win32_event_char_get(int key, |
57 | char **keyname, | 56 | char **keyname, |
58 | char **keysymbol, | 57 | char **keysymbol, |
59 | char **keycompose); | 58 | char **keycompose, |
59 | unsigned int *modifiers); | ||
60 | 60 | ||
61 | 61 | ||
62 | /***** Global functions definitions *****/ | 62 | /***** Global functions definitions *****/ |
@@ -74,8 +74,7 @@ _ecore_win32_event_handle_key_press(Ecore_Win32_Callback_Data *msg, | |||
74 | 74 | ||
75 | if (is_keystroke) | 75 | if (is_keystroke) |
76 | { | 76 | { |
77 | if (!_ecore_win32_event_keystroke_get(msg->window_param, | 77 | if (!_ecore_win32_event_keystroke_get(msg, |
78 | msg->data_param & 0x01000000, | ||
79 | EINA_TRUE, | 78 | EINA_TRUE, |
80 | (char **)&e->keyname, | 79 | (char **)&e->keyname, |
81 | (char **)&e->key, | 80 | (char **)&e->key, |
@@ -91,7 +90,8 @@ _ecore_win32_event_handle_key_press(Ecore_Win32_Callback_Data *msg, | |||
91 | if (!_ecore_win32_event_char_get(LOWORD(msg->window_param), | 90 | if (!_ecore_win32_event_char_get(LOWORD(msg->window_param), |
92 | (char **)&e->keyname, | 91 | (char **)&e->keyname, |
93 | (char **)&e->key, | 92 | (char **)&e->key, |
94 | (char **)&e->string)) | 93 | (char **)&e->string, |
94 | &e->modifiers)) | ||
95 | { | 95 | { |
96 | free(e); | 96 | free(e); |
97 | return; | 97 | return; |
@@ -105,7 +105,7 @@ _ecore_win32_event_handle_key_press(Ecore_Win32_Callback_Data *msg, | |||
105 | return; | 105 | return; |
106 | } | 106 | } |
107 | e->event_window = e->window; | 107 | e->event_window = e->window; |
108 | e->timestamp = msg->time; | 108 | e->timestamp = msg->timestamp; |
109 | 109 | ||
110 | _ecore_win32_event_last_time = e->timestamp; | 110 | _ecore_win32_event_last_time = e->timestamp; |
111 | 111 | ||
@@ -122,18 +122,19 @@ _ecore_win32_event_handle_key_release(Ecore_Win32_Callback_Data *msg) | |||
122 | e = (Ecore_Event_Key *)calloc(1, sizeof(Ecore_Event_Key)); | 122 | e = (Ecore_Event_Key *)calloc(1, sizeof(Ecore_Event_Key)); |
123 | if (!e) return; | 123 | if (!e) return; |
124 | 124 | ||
125 | if (!_ecore_win32_event_keystroke_get(LOWORD(msg->window_param), | 125 | if (!_ecore_win32_event_keystroke_get(msg, |
126 | msg->data_param & 0x01000000, | ||
127 | EINA_FALSE, | 126 | EINA_FALSE, |
128 | (char **)&e->keyname, | 127 | (char **)&e->keyname, |
129 | (char **)&e->key, | 128 | (char **)&e->key, |
130 | (char **)&e->string, | 129 | (char **)&e->string, |
131 | &e->modifiers)) | 130 | &e->modifiers)) |
132 | { | 131 | { |
133 | if (!_ecore_win32_event_char_get(LOWORD(msg->window_param), | 132 | if (msg->discard_ctrl || |
133 | !_ecore_win32_event_char_get(LOWORD(msg->window_param), | ||
134 | (char **)&e->keyname, | 134 | (char **)&e->keyname, |
135 | (char **)&e->key, | 135 | (char **)&e->key, |
136 | (char **)&e->string)) | 136 | (char **)&e->string, |
137 | &e->modifiers)) | ||
137 | { | 138 | { |
138 | free(e); | 139 | free(e); |
139 | return; | 140 | return; |
@@ -147,7 +148,7 @@ _ecore_win32_event_handle_key_release(Ecore_Win32_Callback_Data *msg) | |||
147 | return; | 148 | return; |
148 | } | 149 | } |
149 | e->event_window = e->window; | 150 | e->event_window = e->window; |
150 | e->timestamp = msg->time; | 151 | e->timestamp = msg->timestamp; |
151 | 152 | ||
152 | _ecore_win32_event_last_time = e->timestamp; | 153 | _ecore_win32_event_last_time = e->timestamp; |
153 | 154 | ||
@@ -178,7 +179,7 @@ _ecore_win32_event_handle_button_press(Ecore_Win32_Callback_Data *msg, | |||
178 | e->z = GET_WHEEL_DELTA_WPARAM(msg->window_param) > 0 ? -1 : 1; | 179 | e->z = GET_WHEEL_DELTA_WPARAM(msg->window_param) > 0 ? -1 : 1; |
179 | e->x = GET_X_LPARAM(msg->data_param); | 180 | e->x = GET_X_LPARAM(msg->data_param); |
180 | e->y = GET_Y_LPARAM(msg->data_param); | 181 | e->y = GET_Y_LPARAM(msg->data_param); |
181 | e->timestamp = msg->time; | 182 | e->timestamp = msg->timestamp; |
182 | 183 | ||
183 | _ecore_win32_event_last_time = e->timestamp; | 184 | _ecore_win32_event_last_time = e->timestamp; |
184 | _ecore_win32_event_last_window = (Ecore_Win32_Window *)e->window; | 185 | _ecore_win32_event_last_window = (Ecore_Win32_Window *)e->window; |
@@ -197,7 +198,7 @@ _ecore_win32_event_handle_button_press(Ecore_Win32_Callback_Data *msg, | |||
197 | e->event_window = e->window; | 198 | e->event_window = e->window; |
198 | e->x = GET_X_LPARAM(msg->data_param); | 199 | e->x = GET_X_LPARAM(msg->data_param); |
199 | e->y = GET_Y_LPARAM(msg->data_param); | 200 | e->y = GET_Y_LPARAM(msg->data_param); |
200 | e->timestamp = msg->time; | 201 | e->timestamp = msg->timestamp; |
201 | 202 | ||
202 | _ecore_win32_event_last_time = e->timestamp; | 203 | _ecore_win32_event_last_time = e->timestamp; |
203 | _ecore_win32_event_last_window = (Ecore_Win32_Window *)e->window; | 204 | _ecore_win32_event_last_window = (Ecore_Win32_Window *)e->window; |
@@ -224,7 +225,7 @@ _ecore_win32_event_handle_button_press(Ecore_Win32_Callback_Data *msg, | |||
224 | e->buttons = button; | 225 | e->buttons = button; |
225 | e->x = GET_X_LPARAM(msg->data_param); | 226 | e->x = GET_X_LPARAM(msg->data_param); |
226 | e->y = GET_Y_LPARAM(msg->data_param); | 227 | e->y = GET_Y_LPARAM(msg->data_param); |
227 | e->timestamp = msg->time; | 228 | e->timestamp = msg->timestamp; |
228 | 229 | ||
229 | if (((e->timestamp - _ecore_win32_mouse_down_last_time) <= (unsigned long)(1000 * _ecore_win32_double_click_time)) && | 230 | if (((e->timestamp - _ecore_win32_mouse_down_last_time) <= (unsigned long)(1000 * _ecore_win32_double_click_time)) && |
230 | (e->window == (Ecore_Window)_ecore_win32_mouse_down_last_window)) | 231 | (e->window == (Ecore_Window)_ecore_win32_mouse_down_last_window)) |
@@ -279,7 +280,7 @@ _ecore_win32_event_handle_button_release(Ecore_Win32_Callback_Data *msg, | |||
279 | e->event_window = e->window; | 280 | e->event_window = e->window; |
280 | e->x = GET_X_LPARAM(msg->data_param); | 281 | e->x = GET_X_LPARAM(msg->data_param); |
281 | e->y = GET_Y_LPARAM(msg->data_param); | 282 | e->y = GET_Y_LPARAM(msg->data_param); |
282 | e->timestamp = msg->time; | 283 | e->timestamp = msg->timestamp; |
283 | 284 | ||
284 | _ecore_win32_event_last_time = e->timestamp; | 285 | _ecore_win32_event_last_time = e->timestamp; |
285 | _ecore_win32_event_last_window = (Ecore_Win32_Window *)e->window; | 286 | _ecore_win32_event_last_window = (Ecore_Win32_Window *)e->window; |
@@ -298,7 +299,7 @@ _ecore_win32_event_handle_button_release(Ecore_Win32_Callback_Data *msg, | |||
298 | e->buttons = button; | 299 | e->buttons = button; |
299 | e->x = GET_X_LPARAM(msg->data_param); | 300 | e->x = GET_X_LPARAM(msg->data_param); |
300 | e->y = GET_Y_LPARAM(msg->data_param); | 301 | e->y = GET_Y_LPARAM(msg->data_param); |
301 | e->timestamp = msg->time; | 302 | e->timestamp = msg->timestamp; |
302 | 303 | ||
303 | _ecore_win32_mouse_up_count++; | 304 | _ecore_win32_mouse_up_count++; |
304 | 305 | ||
@@ -334,7 +335,7 @@ _ecore_win32_event_handle_motion_notify(Ecore_Win32_Callback_Data *msg) | |||
334 | e->event_window = e->window; | 335 | e->event_window = e->window; |
335 | e->x = GET_X_LPARAM(msg->data_param); | 336 | e->x = GET_X_LPARAM(msg->data_param); |
336 | e->y = GET_Y_LPARAM(msg->data_param); | 337 | e->y = GET_Y_LPARAM(msg->data_param); |
337 | e->timestamp = msg->time; | 338 | e->timestamp = msg->timestamp; |
338 | 339 | ||
339 | ecore_event_add(ECORE_EVENT_MOUSE_MOVE, e, NULL, NULL); | 340 | ecore_event_add(ECORE_EVENT_MOUSE_MOVE, e, NULL, NULL); |
340 | } | 341 | } |
@@ -354,7 +355,7 @@ _ecore_win32_event_handle_enter_notify(Ecore_Win32_Callback_Data *msg) | |||
354 | e->event_window = e->window; | 355 | e->event_window = e->window; |
355 | e->x = msg->x; | 356 | e->x = msg->x; |
356 | e->y = msg->y; | 357 | e->y = msg->y; |
357 | e->timestamp = msg->time; | 358 | e->timestamp = msg->timestamp; |
358 | 359 | ||
359 | _ecore_win32_event_last_time = e->timestamp; | 360 | _ecore_win32_event_last_time = e->timestamp; |
360 | _ecore_win32_event_last_window = (Ecore_Win32_Window *)e->window; | 361 | _ecore_win32_event_last_window = (Ecore_Win32_Window *)e->window; |
@@ -371,9 +372,9 @@ _ecore_win32_event_handle_enter_notify(Ecore_Win32_Callback_Data *msg) | |||
371 | e->window = (void *)GetWindowLongPtr(msg->window, GWLP_USERDATA); | 372 | e->window = (void *)GetWindowLongPtr(msg->window, GWLP_USERDATA); |
372 | e->x = msg->x; | 373 | e->x = msg->x; |
373 | e->y = msg->y; | 374 | e->y = msg->y; |
374 | e->time = msg->time ; | 375 | e->timestamp = msg->timestamp ; |
375 | 376 | ||
376 | _ecore_win32_event_last_time = e->time; | 377 | _ecore_win32_event_last_time = e->timestamp; |
377 | 378 | ||
378 | ecore_event_add(ECORE_WIN32_EVENT_MOUSE_IN, e, NULL, NULL); | 379 | ecore_event_add(ECORE_WIN32_EVENT_MOUSE_IN, e, NULL, NULL); |
379 | } | 380 | } |
@@ -394,7 +395,7 @@ _ecore_win32_event_handle_leave_notify(Ecore_Win32_Callback_Data *msg) | |||
394 | e->event_window = e->window; | 395 | e->event_window = e->window; |
395 | e->x = msg->x; | 396 | e->x = msg->x; |
396 | e->y = msg->y; | 397 | e->y = msg->y; |
397 | e->timestamp = msg->time; | 398 | e->timestamp = msg->timestamp; |
398 | 399 | ||
399 | _ecore_win32_event_last_time = e->timestamp; | 400 | _ecore_win32_event_last_time = e->timestamp; |
400 | _ecore_win32_event_last_window = (Ecore_Win32_Window *)e->window; | 401 | _ecore_win32_event_last_window = (Ecore_Win32_Window *)e->window; |
@@ -411,9 +412,9 @@ _ecore_win32_event_handle_leave_notify(Ecore_Win32_Callback_Data *msg) | |||
411 | e->window = (void *)GetWindowLongPtr(msg->window, GWLP_USERDATA); | 412 | e->window = (void *)GetWindowLongPtr(msg->window, GWLP_USERDATA); |
412 | e->x = msg->x; | 413 | e->x = msg->x; |
413 | e->y = msg->y; | 414 | e->y = msg->y; |
414 | e->time = msg->time; | 415 | e->timestamp = msg->timestamp; |
415 | 416 | ||
416 | _ecore_win32_event_last_time = e->time; | 417 | _ecore_win32_event_last_time = e->timestamp; |
417 | 418 | ||
418 | ecore_event_add(ECORE_WIN32_EVENT_MOUSE_OUT, e, NULL, NULL); | 419 | ecore_event_add(ECORE_WIN32_EVENT_MOUSE_OUT, e, NULL, NULL); |
419 | } | 420 | } |
@@ -431,8 +432,8 @@ _ecore_win32_event_handle_focus_in(Ecore_Win32_Callback_Data *msg) | |||
431 | 432 | ||
432 | e->window = (void *)GetWindowLongPtr(msg->window, GWLP_USERDATA); | 433 | e->window = (void *)GetWindowLongPtr(msg->window, GWLP_USERDATA); |
433 | 434 | ||
434 | e->time = _ecore_win32_event_last_time; | 435 | e->timestamp = _ecore_win32_event_last_time; |
435 | _ecore_win32_event_last_time = e->time; | 436 | _ecore_win32_event_last_time = e->timestamp; |
436 | 437 | ||
437 | ecore_event_add(ECORE_WIN32_EVENT_WINDOW_FOCUS_IN, e, NULL, NULL); | 438 | ecore_event_add(ECORE_WIN32_EVENT_WINDOW_FOCUS_IN, e, NULL, NULL); |
438 | } | 439 | } |
@@ -449,8 +450,8 @@ _ecore_win32_event_handle_focus_out(Ecore_Win32_Callback_Data *msg) | |||
449 | 450 | ||
450 | e->window = (void *)GetWindowLongPtr(msg->window, GWLP_USERDATA); | 451 | e->window = (void *)GetWindowLongPtr(msg->window, GWLP_USERDATA); |
451 | 452 | ||
452 | e->time = _ecore_win32_event_last_time; | 453 | e->timestamp = _ecore_win32_event_last_time; |
453 | _ecore_win32_event_last_time = e->time; | 454 | _ecore_win32_event_last_time = e->timestamp; |
454 | 455 | ||
455 | ecore_event_add(ECORE_WIN32_EVENT_WINDOW_FOCUS_OUT, e, NULL, NULL); | 456 | ecore_event_add(ECORE_WIN32_EVENT_WINDOW_FOCUS_OUT, e, NULL, NULL); |
456 | } | 457 | } |
@@ -472,7 +473,7 @@ _ecore_win32_event_handle_expose(Ecore_Win32_Callback_Data *msg) | |||
472 | e->width = msg->update.right - msg->update.left; | 473 | e->width = msg->update.right - msg->update.left; |
473 | e->height = msg->update.bottom - msg->update.top; | 474 | e->height = msg->update.bottom - msg->update.top; |
474 | 475 | ||
475 | e->time = _ecore_win32_event_last_time; | 476 | e->timestamp = _ecore_win32_event_last_time; |
476 | 477 | ||
477 | ecore_event_add(ECORE_WIN32_EVENT_WINDOW_DAMAGE, e, NULL, NULL); | 478 | ecore_event_add(ECORE_WIN32_EVENT_WINDOW_DAMAGE, e, NULL, NULL); |
478 | } | 479 | } |
@@ -489,7 +490,7 @@ _ecore_win32_event_handle_create_notify(Ecore_Win32_Callback_Data *msg) | |||
489 | 490 | ||
490 | e->window = (void *)GetWindowLongPtr(msg->window, GWLP_USERDATA); | 491 | e->window = (void *)GetWindowLongPtr(msg->window, GWLP_USERDATA); |
491 | 492 | ||
492 | e->time = _ecore_win32_event_last_time; | 493 | e->timestamp = _ecore_win32_event_last_time; |
493 | 494 | ||
494 | ecore_event_add(ECORE_WIN32_EVENT_WINDOW_CREATE, e, NULL, NULL); | 495 | ecore_event_add(ECORE_WIN32_EVENT_WINDOW_CREATE, e, NULL, NULL); |
495 | } | 496 | } |
@@ -506,7 +507,7 @@ _ecore_win32_event_handle_destroy_notify(Ecore_Win32_Callback_Data *msg) | |||
506 | 507 | ||
507 | e->window = (void *)GetWindowLongPtr(msg->window, GWLP_USERDATA); | 508 | e->window = (void *)GetWindowLongPtr(msg->window, GWLP_USERDATA); |
508 | 509 | ||
509 | e->time = _ecore_win32_event_last_time; | 510 | e->timestamp = _ecore_win32_event_last_time; |
510 | if (e->window == _ecore_win32_event_last_window) _ecore_win32_event_last_window = NULL; | 511 | if (e->window == _ecore_win32_event_last_window) _ecore_win32_event_last_window = NULL; |
511 | 512 | ||
512 | ecore_event_add(ECORE_WIN32_EVENT_WINDOW_DESTROY, e, NULL, NULL); | 513 | ecore_event_add(ECORE_WIN32_EVENT_WINDOW_DESTROY, e, NULL, NULL); |
@@ -524,7 +525,7 @@ _ecore_win32_event_handle_map_notify(Ecore_Win32_Callback_Data *msg) | |||
524 | 525 | ||
525 | e->window = (void *)GetWindowLongPtr(msg->window, GWLP_USERDATA); | 526 | e->window = (void *)GetWindowLongPtr(msg->window, GWLP_USERDATA); |
526 | 527 | ||
527 | e->time = _ecore_win32_event_last_time; | 528 | e->timestamp = _ecore_win32_event_last_time; |
528 | 529 | ||
529 | ecore_event_add(ECORE_WIN32_EVENT_WINDOW_SHOW, e, NULL, NULL); | 530 | ecore_event_add(ECORE_WIN32_EVENT_WINDOW_SHOW, e, NULL, NULL); |
530 | } | 531 | } |
@@ -541,7 +542,7 @@ _ecore_win32_event_handle_unmap_notify(Ecore_Win32_Callback_Data *msg) | |||
541 | 542 | ||
542 | e->window = (void *)GetWindowLongPtr(msg->window, GWLP_USERDATA); | 543 | e->window = (void *)GetWindowLongPtr(msg->window, GWLP_USERDATA); |
543 | 544 | ||
544 | e->time = _ecore_win32_event_last_time; | 545 | e->timestamp = _ecore_win32_event_last_time; |
545 | 546 | ||
546 | ecore_event_add(ECORE_WIN32_EVENT_WINDOW_HIDE, e, NULL, NULL); | 547 | ecore_event_add(ECORE_WIN32_EVENT_WINDOW_HIDE, e, NULL, NULL); |
547 | } | 548 | } |
@@ -572,7 +573,7 @@ _ecore_win32_event_handle_configure_notify(Ecore_Win32_Callback_Data *msg) | |||
572 | e->y = wi.rcClient.top; | 573 | e->y = wi.rcClient.top; |
573 | e->width = wi.rcClient.right - wi.rcClient.left; | 574 | e->width = wi.rcClient.right - wi.rcClient.left; |
574 | e->height = wi.rcClient.bottom - wi.rcClient.top; | 575 | e->height = wi.rcClient.bottom - wi.rcClient.top; |
575 | e->time = _ecore_win32_event_last_time; | 576 | e->timestamp = _ecore_win32_event_last_time; |
576 | 577 | ||
577 | ecore_event_add(ECORE_WIN32_EVENT_WINDOW_CONFIGURE, e, NULL, NULL); | 578 | ecore_event_add(ECORE_WIN32_EVENT_WINDOW_CONFIGURE, e, NULL, NULL); |
578 | } | 579 | } |
@@ -594,7 +595,7 @@ _ecore_win32_event_handle_resize(Ecore_Win32_Callback_Data *msg) | |||
594 | e->window = (void *)GetWindowLongPtr(msg->window, GWLP_USERDATA); | 595 | e->window = (void *)GetWindowLongPtr(msg->window, GWLP_USERDATA); |
595 | e->width = rect.right - rect.left; | 596 | e->width = rect.right - rect.left; |
596 | e->height = rect.bottom - rect.top; | 597 | e->height = rect.bottom - rect.top; |
597 | e->time = _ecore_win32_event_last_time; | 598 | e->timestamp = _ecore_win32_event_last_time; |
598 | 599 | ||
599 | ecore_event_add(ECORE_WIN32_EVENT_WINDOW_RESIZE, e, NULL, NULL); | 600 | ecore_event_add(ECORE_WIN32_EVENT_WINDOW_RESIZE, e, NULL, NULL); |
600 | } | 601 | } |
@@ -610,7 +611,7 @@ _ecore_win32_event_handle_delete_request(Ecore_Win32_Callback_Data *msg) | |||
610 | if (!e) return; | 611 | if (!e) return; |
611 | 612 | ||
612 | e->window = (void *)GetWindowLongPtr(msg->window, GWLP_USERDATA); | 613 | e->window = (void *)GetWindowLongPtr(msg->window, GWLP_USERDATA); |
613 | e->time = _ecore_win32_event_last_time; | 614 | e->timestamp = _ecore_win32_event_last_time; |
614 | 615 | ||
615 | ecore_event_add(ECORE_WIN32_EVENT_WINDOW_DELETE_REQUEST, e, NULL, NULL); | 616 | ecore_event_add(ECORE_WIN32_EVENT_WINDOW_DELETE_REQUEST, e, NULL, NULL); |
616 | } | 617 | } |
@@ -645,24 +646,28 @@ _ecore_win32_event_free_key_up(void *data __UNUSED__, | |||
645 | } | 646 | } |
646 | 647 | ||
647 | static int | 648 | static int |
648 | _ecore_win32_event_keystroke_get(int key, | 649 | _ecore_win32_event_keystroke_get(Ecore_Win32_Callback_Data *msg, |
649 | int is_extended, | ||
650 | Eina_Bool is_down, | 650 | Eina_Bool is_down, |
651 | char **keyname, | 651 | char **keyname, |
652 | char **keysymbol, | 652 | char **keysymbol, |
653 | char **keycompose, | 653 | char **keycompose, |
654 | unsigned int *modifiers) | 654 | unsigned int *modifiers) |
655 | { | 655 | { |
656 | WCHAR buf[3]; | ||
657 | char delete_string[2] = { 0x7f, 0 }; | ||
656 | char *kn = NULL; | 658 | char *kn = NULL; |
657 | char *ks = NULL; | 659 | char *ks = NULL; |
658 | char *kc = NULL; | 660 | char *kc = NULL; |
661 | int key; | ||
662 | int is_extended; | ||
663 | |||
664 | key = msg->window_param; | ||
665 | is_extended = msg->data_param & 0x01000000; | ||
659 | 666 | ||
660 | *keyname = NULL; | 667 | *keyname = NULL; |
661 | *keysymbol = NULL; | 668 | *keysymbol = NULL; |
662 | *keycompose = NULL; | 669 | *keycompose = NULL; |
663 | 670 | ||
664 | |||
665 | printf("vk key 0x%x\n", key); | ||
666 | switch (key) | 671 | switch (key) |
667 | { | 672 | { |
668 | /* Keystroke */ | 673 | /* Keystroke */ |
@@ -751,7 +756,6 @@ _ecore_win32_event_keystroke_get(int key, | |||
751 | } | 756 | } |
752 | break; | 757 | break; |
753 | case VK_RIGHT: | 758 | case VK_RIGHT: |
754 | printf("vk val 0x%x (right)\n", VK_RIGHT); | ||
755 | if (is_extended) | 759 | if (is_extended) |
756 | { | 760 | { |
757 | kn = "Right"; | 761 | kn = "Right"; |
@@ -798,8 +802,7 @@ _ecore_win32_event_keystroke_get(int key, | |||
798 | { | 802 | { |
799 | kn = "Delete"; | 803 | kn = "Delete"; |
800 | ks = "Delete"; | 804 | ks = "Delete"; |
801 | /* FIXME: kc is wrong, here */ | 805 | kc = delete_string; |
802 | kc = "Delete"; | ||
803 | } | 806 | } |
804 | else | 807 | else |
805 | { | 808 | { |
@@ -830,7 +833,7 @@ _ecore_win32_event_keystroke_get(int key, | |||
830 | ks = "Shift_R"; | 833 | ks = "Shift_R"; |
831 | kc = ""; | 834 | kc = ""; |
832 | } | 835 | } |
833 | *modifiers |= ECORE_EVENT_MODIFIER_SHIFT; | 836 | *modifiers &= ~ECORE_EVENT_MODIFIER_SHIFT; |
834 | } | 837 | } |
835 | else /* is_up */ | 838 | else /* is_up */ |
836 | { | 839 | { |
@@ -852,7 +855,7 @@ _ecore_win32_event_keystroke_get(int key, | |||
852 | kc = ""; | 855 | kc = ""; |
853 | _ecore_win32_key_mask &= ~ECORE_WIN32_KEY_MASK_RSHIFT; | 856 | _ecore_win32_key_mask &= ~ECORE_WIN32_KEY_MASK_RSHIFT; |
854 | } | 857 | } |
855 | *modifiers &= ~ECORE_EVENT_MODIFIER_SHIFT; | 858 | *modifiers |= ECORE_EVENT_MODIFIER_SHIFT; |
856 | } | 859 | } |
857 | break; | 860 | break; |
858 | } | 861 | } |
@@ -860,6 +863,9 @@ _ecore_win32_event_keystroke_get(int key, | |||
860 | { | 863 | { |
861 | SHORT res; | 864 | SHORT res; |
862 | 865 | ||
866 | if (msg->discard_ctrl) | ||
867 | return 0; | ||
868 | |||
863 | if (is_down) | 869 | if (is_down) |
864 | { | 870 | { |
865 | res = GetKeyState(VK_LCONTROL); | 871 | res = GetKeyState(VK_LCONTROL); |
@@ -1113,11 +1119,53 @@ _ecore_win32_event_keystroke_get(int key, | |||
1113 | kc = ""; | 1119 | kc = ""; |
1114 | break; | 1120 | break; |
1115 | default: | 1121 | default: |
1116 | /* other non keystroke characters */ | 1122 | { |
1117 | return 0; | 1123 | /* other non keystroke characters */ |
1124 | BYTE kbd_state[256]; | ||
1125 | int res; | ||
1126 | |||
1127 | if (is_down) | ||
1128 | return 0; | ||
1129 | |||
1130 | if (!GetKeyboardState(kbd_state)) | ||
1131 | return 0; | ||
1132 | |||
1133 | res = ToUnicode(msg->window_param, | ||
1134 | MapVirtualKey(msg->window_param, 2), | ||
1135 | kbd_state, buf, 3, 0); | ||
1136 | if (res == 1) | ||
1137 | { | ||
1138 | /* FIXME: might be troublesome for non european languages */ | ||
1139 | /* in that case, UNICODE should be used, I guess */ | ||
1140 | buf[1] = '\0'; | ||
1141 | kn = (char *)buf; | ||
1142 | ks = (char *)buf; | ||
1143 | kc = (char *)buf; | ||
1144 | |||
1145 | res = GetAsyncKeyState(VK_SHIFT); | ||
1146 | if (res & 0x8000) | ||
1147 | *modifiers |= ECORE_EVENT_MODIFIER_SHIFT; | ||
1148 | else | ||
1149 | *modifiers &= ~ECORE_EVENT_MODIFIER_SHIFT; | ||
1150 | |||
1151 | res = GetKeyState(VK_CONTROL); | ||
1152 | if (res & 0x8000) | ||
1153 | *modifiers |= ECORE_EVENT_MODIFIER_CTRL; | ||
1154 | else | ||
1155 | *modifiers &= ~ECORE_EVENT_MODIFIER_CTRL; | ||
1156 | |||
1157 | res = GetKeyState(VK_MENU); | ||
1158 | if (res & 0x8000) | ||
1159 | *modifiers |= ECORE_EVENT_MODIFIER_ALT; | ||
1160 | else | ||
1161 | *modifiers &= ~ECORE_EVENT_MODIFIER_ALT; | ||
1162 | |||
1163 | break; | ||
1164 | } | ||
1165 | return 0; | ||
1166 | } | ||
1118 | } | 1167 | } |
1119 | 1168 | ||
1120 | printf("sortie...\n"); | ||
1121 | *keyname = strdup(kn); | 1169 | *keyname = strdup(kn); |
1122 | if (!*keyname) return 0; | 1170 | if (!*keyname) return 0; |
1123 | *keysymbol = strdup(ks); | 1171 | *keysymbol = strdup(ks); |
@@ -1141,28 +1189,27 @@ _ecore_win32_event_keystroke_get(int key, | |||
1141 | return 0; | 1189 | return 0; |
1142 | } | 1190 | } |
1143 | } | 1191 | } |
1144 | printf("sortie 2 ...\n"); | ||
1145 | 1192 | ||
1146 | return 1; | 1193 | return 1; |
1147 | } | 1194 | } |
1148 | 1195 | ||
1149 | static int | 1196 | static int |
1150 | _ecore_win32_event_char_get(int key, | 1197 | _ecore_win32_event_char_get(int key, |
1151 | char **keyname, | 1198 | char **keyname, |
1152 | char **keysymbol, | 1199 | char **keysymbol, |
1153 | char **keycompose) | 1200 | char **keycompose, |
1201 | unsigned int *modifiers) | ||
1154 | { | 1202 | { |
1155 | char *kn = NULL; | 1203 | char *kn = NULL; |
1156 | char *ks = NULL; | 1204 | char *ks = NULL; |
1157 | char *kc = NULL; | 1205 | char *kc = NULL; |
1158 | char buf[2]; | 1206 | char buf[2]; |
1207 | SHORT res; | ||
1159 | 1208 | ||
1160 | *keyname = NULL; | 1209 | *keyname = NULL; |
1161 | *keysymbol = NULL; | 1210 | *keysymbol = NULL; |
1162 | *keycompose = NULL; | 1211 | *keycompose = NULL; |
1163 | 1212 | ||
1164 | printf("char key 0x%x\n", key); | ||
1165 | |||
1166 | switch (key) | 1213 | switch (key) |
1167 | { | 1214 | { |
1168 | case VK_PROCESSKEY: | 1215 | case VK_PROCESSKEY: |
@@ -1200,7 +1247,6 @@ _ecore_win32_event_char_get(int key, | |||
1200 | break; | 1247 | break; |
1201 | default: | 1248 | default: |
1202 | /* displayable characters */ | 1249 | /* displayable characters */ |
1203 | printf (" * key : %d\n", key); | ||
1204 | buf[0] = key; | 1250 | buf[0] = key; |
1205 | buf[1] = '\0'; | 1251 | buf[1] = '\0'; |
1206 | kn = buf; | 1252 | kn = buf; |
@@ -1227,5 +1273,23 @@ _ecore_win32_event_char_get(int key, | |||
1227 | return 0; | 1273 | return 0; |
1228 | } | 1274 | } |
1229 | 1275 | ||
1276 | res = GetAsyncKeyState(VK_SHIFT); | ||
1277 | if (res & 0x8000) | ||
1278 | *modifiers |= ECORE_EVENT_MODIFIER_SHIFT; | ||
1279 | else | ||
1280 | *modifiers &= ~ECORE_EVENT_MODIFIER_SHIFT; | ||
1281 | |||
1282 | res = GetKeyState(VK_CONTROL); | ||
1283 | if (res & 0x8000) | ||
1284 | *modifiers |= ECORE_EVENT_MODIFIER_CTRL; | ||
1285 | else | ||
1286 | *modifiers &= ~ECORE_EVENT_MODIFIER_CTRL; | ||
1287 | |||
1288 | res = GetKeyState(VK_MENU); | ||
1289 | if (res & 0x8000) | ||
1290 | *modifiers |= ECORE_EVENT_MODIFIER_ALT; | ||
1291 | else | ||
1292 | *modifiers &= ~ECORE_EVENT_MODIFIER_ALT; | ||
1293 | |||
1230 | return 1; | 1294 | return 1; |
1231 | } | 1295 | } |
diff --git a/libraries/ecore/src/lib/ecore_win32/ecore_win32_private.h b/libraries/ecore/src/lib/ecore_win32/ecore_win32_private.h index 4533169..ab54763 100644 --- a/libraries/ecore/src/lib/ecore_win32/ecore_win32_private.h +++ b/libraries/ecore/src/lib/ecore_win32/ecore_win32_private.h | |||
@@ -49,14 +49,15 @@ typedef struct _Ecore_Win32_Callback_Data Ecore_Win32_Callback_Data; | |||
49 | 49 | ||
50 | struct _Ecore_Win32_Callback_Data | 50 | struct _Ecore_Win32_Callback_Data |
51 | { | 51 | { |
52 | RECT update; | 52 | RECT update; |
53 | HWND window; | 53 | HWND window; |
54 | unsigned int message; | 54 | unsigned int message; |
55 | WPARAM window_param; | 55 | WPARAM window_param; |
56 | LPARAM data_param; | 56 | LPARAM data_param; |
57 | long time; | 57 | unsigned long timestamp; |
58 | int x; | 58 | int x; |
59 | int y; | 59 | int y; |
60 | Eina_Bool discard_ctrl; | ||
60 | }; | 61 | }; |
61 | 62 | ||
62 | struct _Ecore_Win32_Window | 63 | struct _Ecore_Win32_Window |
@@ -130,7 +131,7 @@ struct _Ecore_Win32_Window | |||
130 | 131 | ||
131 | extern HINSTANCE _ecore_win32_instance; | 132 | extern HINSTANCE _ecore_win32_instance; |
132 | extern double _ecore_win32_double_click_time; | 133 | extern double _ecore_win32_double_click_time; |
133 | extern long _ecore_win32_event_last_time; | 134 | extern unsigned long _ecore_win32_event_last_time; |
134 | extern Ecore_Win32_Window *_ecore_win32_event_last_window; | 135 | extern Ecore_Win32_Window *_ecore_win32_event_last_window; |
135 | 136 | ||
136 | 137 | ||