7 #define WIN32_LEAN_AND_MEAN
9 #undef WIN32_LEAN_AND_MEAN
13 #include <Ecore_Input.h>
15 #include "Ecore_WinCE.h"
16 #include "ecore_wince_private.h"
19 /***** Private declarations *****/
21 static Ecore_WinCE_Window *_ecore_wince_mouse_down_last_window = NULL;
22 static Ecore_WinCE_Window *_ecore_wince_mouse_down_last_last_window = NULL;
23 static long _ecore_wince_mouse_down_last_time = 0;
24 static long _ecore_wince_mouse_down_last_last_time = 0;
25 static int _ecore_wince_mouse_down_did_triple = 0;
26 static int _ecore_wince_mouse_up_count = 0;
29 static void _ecore_wince_event_free_key_down(void *data,
32 static void _ecore_wince_event_free_key_up(void *data,
35 static int _ecore_wince_event_keystroke_get(int key,
40 static int _ecore_wince_event_char_get(int key,
46 /***** Global functions *****/
49 _ecore_wince_event_handle_key_press(Ecore_WinCE_Callback_Data *msg,
56 e = (Ecore_Event_Key *)malloc(sizeof(Ecore_Event_Key));
61 if (!_ecore_wince_event_keystroke_get(LOWORD(msg->window_param),
72 if (!_ecore_wince_event_char_get(LOWORD(msg->window_param),
82 e->window = (Ecore_Window)GetWindowLong(msg->window, GWL_USERDATA);
88 e->timestamp = msg->time;
90 _ecore_wince_event_last_time = e->timestamp;
92 ecore_event_add(ECORE_EVENT_KEY_DOWN, e, _ecore_wince_event_free_key_down, NULL);
96 _ecore_wince_event_handle_key_release(Ecore_WinCE_Callback_Data *msg,
103 e = (Ecore_Event_Key *)calloc(1, sizeof(Ecore_Event_Key));
108 if (!_ecore_wince_event_keystroke_get(LOWORD(msg->window_param),
109 (char **)&e->keyname,
111 (char **)&e->string))
119 if (!_ecore_wince_event_char_get(LOWORD(msg->window_param),
120 (char **)&e->keyname,
122 (char **)&e->string))
129 e->window = (Ecore_Window)GetWindowLong(msg->window, GWL_USERDATA);
135 e->timestamp = msg->time;
137 _ecore_wince_event_last_time = e->timestamp;
139 ecore_event_add(ECORE_EVENT_KEY_UP, e, _ecore_wince_event_free_key_up, NULL);
143 _ecore_wince_event_handle_button_press(Ecore_WinCE_Callback_Data *msg,
146 Ecore_WinCE_Window *window;
148 INF("mouse button pressed");
150 window = (Ecore_WinCE_Window *)GetWindowLong(msg->window, GWL_USERDATA);
153 Ecore_Event_Mouse_Move *e;
155 e = (Ecore_Event_Mouse_Move *)calloc(1, sizeof(Ecore_Event_Mouse_Move));
158 e->window = (Ecore_Window)window;
159 e->x = LOWORD(msg->data_param);
160 e->y = HIWORD(msg->data_param);
161 e->timestamp = msg->time;
163 _ecore_wince_event_last_time = e->timestamp;
164 _ecore_wince_event_last_window = (Ecore_WinCE_Window *)e->window;
166 ecore_event_add(ECORE_EVENT_MOUSE_MOVE, e, NULL, NULL);
170 Ecore_Event_Mouse_Button *e;
172 if (_ecore_wince_mouse_down_did_triple)
174 _ecore_wince_mouse_down_last_window = NULL;
175 _ecore_wince_mouse_down_last_last_window = NULL;
176 _ecore_wince_mouse_down_last_time = 0;
177 _ecore_wince_mouse_down_last_last_time = 0;
180 e = (Ecore_Event_Mouse_Button *)calloc(1, sizeof(Ecore_Event_Mouse_Button));
183 e->window = (Ecore_Window)window;
185 e->x = LOWORD(msg->data_param);
186 e->y = HIWORD(msg->data_param);
187 e->timestamp = msg->time;
189 if (((e->timestamp - _ecore_wince_mouse_down_last_time) <= (long)(1000 * _ecore_wince_double_click_time)) &&
190 (e->window == (Ecore_Window)_ecore_wince_mouse_down_last_window))
193 if (((e->timestamp - _ecore_wince_mouse_down_last_last_time) <= (long)(2 * 1000 * _ecore_wince_double_click_time)) &&
194 (e->window == (Ecore_Window)_ecore_wince_mouse_down_last_window) &&
195 (e->window == (Ecore_Window)_ecore_wince_mouse_down_last_last_window))
198 _ecore_wince_mouse_down_did_triple = 1;
201 _ecore_wince_mouse_down_did_triple = 0;
203 if (!e->double_click && !e->triple_click)
204 _ecore_wince_mouse_up_count = 0;
206 _ecore_wince_event_last_time = e->timestamp;
207 _ecore_wince_event_last_window = (Ecore_WinCE_Window *)e->window;
209 if (!_ecore_wince_mouse_down_did_triple)
211 _ecore_wince_mouse_down_last_last_window = _ecore_wince_mouse_down_last_window;
212 _ecore_wince_mouse_down_last_window = (Ecore_WinCE_Window *)e->window;
213 _ecore_wince_mouse_down_last_last_time = _ecore_wince_mouse_down_last_time;
214 _ecore_wince_mouse_down_last_time = e->timestamp;
217 ecore_event_add(ECORE_EVENT_MOUSE_BUTTON_DOWN, e, NULL, NULL);
222 _ecore_wince_event_handle_button_release(Ecore_WinCE_Callback_Data *msg,
225 Ecore_WinCE_Window *window;
227 INF("mouse button released");
229 window = (void *)GetWindowLong(msg->window, GWL_USERDATA);
232 Ecore_Event_Mouse_Move *e;
234 e = (Ecore_Event_Mouse_Move *)calloc(1, sizeof(Ecore_Event_Mouse_Move));
237 e->window = (Ecore_Window)window;
238 e->x = LOWORD(msg->data_param);
239 e->y = HIWORD(msg->data_param);
240 e->timestamp = msg->time;
242 _ecore_wince_event_last_time = e->timestamp;
243 _ecore_wince_event_last_window = (Ecore_WinCE_Window *)e->window;
245 ecore_event_add(ECORE_EVENT_MOUSE_MOVE, e, NULL, NULL);
249 Ecore_Event_Mouse_Button *e;
251 e = (Ecore_Event_Mouse_Button *)calloc(1, sizeof(Ecore_Event_Mouse_Button));
254 e->window = (Ecore_Window)window;
256 e->x = LOWORD(msg->data_param);
257 e->y = HIWORD(msg->data_param);
258 e->timestamp = msg->time;
260 _ecore_wince_mouse_up_count++;
262 if ((_ecore_wince_mouse_up_count >= 2) &&
263 ((e->timestamp - _ecore_wince_mouse_down_last_time) <= (long)(1000 * _ecore_wince_double_click_time)) &&
264 (e->window == (Ecore_Window)_ecore_wince_mouse_down_last_window))
267 if ((_ecore_wince_mouse_up_count >= 3) &&
268 ((e->timestamp - _ecore_wince_mouse_down_last_last_time) <= (long)(2 * 1000 * _ecore_wince_double_click_time)) &&
269 (e->window == (Ecore_Window)_ecore_wince_mouse_down_last_window) &&
270 (e->window == (Ecore_Window)_ecore_wince_mouse_down_last_last_window))
273 _ecore_wince_event_last_time = e->timestamp;
274 _ecore_wince_event_last_window = (Ecore_WinCE_Window *)e->window;
276 ecore_event_add(ECORE_EVENT_MOUSE_BUTTON_UP, e, NULL, NULL);
281 _ecore_wince_event_handle_motion_notify(Ecore_WinCE_Callback_Data *msg)
283 Ecore_Event_Mouse_Move *e;
287 e = (Ecore_Event_Mouse_Move *)calloc(1, sizeof(Ecore_Event_Mouse_Move));
290 e->window = (Ecore_Window)GetWindowLong(msg->window, GWL_USERDATA);
291 e->x = LOWORD(msg->data_param);
292 e->y = HIWORD(msg->data_param);
293 e->timestamp = msg->time;
295 ecore_event_add(ECORE_EVENT_MOUSE_MOVE, e, NULL, NULL);
299 _ecore_wince_event_handle_enter_notify(Ecore_WinCE_Callback_Data *msg)
301 Ecore_WinCE_Window *window;
305 window = (void *)GetWindowLong(msg->window, GWL_USERDATA);
308 Ecore_Event_Mouse_Move *e;
310 e = (Ecore_Event_Mouse_Move *)calloc(1, sizeof(Ecore_Event_Mouse_Move));
313 e->window = (Ecore_Window)window;
316 e->timestamp = msg->time;
318 _ecore_wince_event_last_time = e->timestamp;
319 _ecore_wince_event_last_window = (Ecore_WinCE_Window *)e->window;
321 ecore_event_add(ECORE_EVENT_MOUSE_MOVE, e, NULL, NULL);
325 Ecore_WinCE_Event_Mouse_In *e;
327 e = (Ecore_WinCE_Event_Mouse_In *)calloc(1, sizeof(Ecore_WinCE_Event_Mouse_In));
335 _ecore_wince_event_last_time = e->time;
337 ecore_event_add(ECORE_WINCE_EVENT_MOUSE_IN, e, NULL, NULL);
342 _ecore_wince_event_handle_leave_notify(Ecore_WinCE_Callback_Data *msg)
344 Ecore_WinCE_Window *window;
348 window = (void *)GetWindowLong(msg->window, GWL_USERDATA);
351 Ecore_Event_Mouse_Move *e;
353 e = (Ecore_Event_Mouse_Move *)calloc(1, sizeof(Ecore_Event_Mouse_Move));
356 e->window = (Ecore_Window)window;
359 e->timestamp = msg->time;
361 _ecore_wince_event_last_time = e->timestamp;
362 _ecore_wince_event_last_window = (Ecore_WinCE_Window *)e->window;
364 ecore_event_add(ECORE_EVENT_MOUSE_MOVE, e, NULL, NULL);
368 Ecore_WinCE_Event_Mouse_Out *e;
370 e = (Ecore_WinCE_Event_Mouse_Out *)calloc(1, sizeof(Ecore_WinCE_Event_Mouse_Out));
378 _ecore_wince_event_last_time = e->time;
380 ecore_event_add(ECORE_WINCE_EVENT_MOUSE_OUT, e, NULL, NULL);
385 _ecore_wince_event_handle_focus_in(Ecore_WinCE_Callback_Data *msg)
387 Ecore_WinCE_Event_Window_Focus_In *e;
388 struct _Ecore_WinCE_Window *window;
392 e = (Ecore_WinCE_Event_Window_Focus_In *)calloc(1, sizeof(Ecore_WinCE_Event_Window_Focus_In));
395 window = (void *)GetWindowLong(msg->window, GWL_USERDATA);
403 window->resume(window->backend);
407 e->time = _ecore_wince_event_last_time;
408 _ecore_wince_event_last_time = e->time;
410 ecore_event_add(ECORE_WINCE_EVENT_WINDOW_FOCUS_IN, e, NULL, NULL);
414 _ecore_wince_event_handle_focus_out(Ecore_WinCE_Callback_Data *msg)
416 Ecore_WinCE_Event_Window_Focus_Out *e;
417 struct _Ecore_WinCE_Window *window;
421 e = (Ecore_WinCE_Event_Window_Focus_Out *)calloc(1, sizeof(Ecore_WinCE_Event_Window_Focus_Out));
424 window = (void *)GetWindowLong(msg->window, GWL_USERDATA);
431 window->suspend(window->backend);
435 e->time = _ecore_wince_event_last_time;
436 _ecore_wince_event_last_time = e->time;
438 ecore_event_add(ECORE_WINCE_EVENT_WINDOW_FOCUS_OUT, e, NULL, NULL);
442 _ecore_wince_event_handle_expose(Ecore_WinCE_Callback_Data *msg)
444 Ecore_WinCE_Event_Window_Damage *e;
446 INF("window expose");
448 e = (Ecore_WinCE_Event_Window_Damage *)calloc(1, sizeof(Ecore_WinCE_Event_Window_Damage));
451 e->window = (void *)GetWindowLong(msg->window, GWL_USERDATA);
458 e->x = msg->update.left;
459 e->y = msg->update.top;
460 e->width = msg->update.right - msg->update.left;
461 e->height = msg->update.bottom - msg->update.top;
462 INF("window expose size: %dx%d", e->width, e->height);
464 e->time = _ecore_wince_event_last_time;
466 ecore_event_add(ECORE_WINCE_EVENT_WINDOW_DAMAGE, e, NULL, NULL);
470 _ecore_wince_event_handle_create_notify(Ecore_WinCE_Callback_Data *msg)
472 Ecore_WinCE_Event_Window_Create *e;
474 INF("window create notify");
476 e = calloc(1, sizeof(Ecore_WinCE_Event_Window_Create));
479 e->window = (void *)GetWindowLong(msg->window, GWL_USERDATA);
486 e->time = _ecore_wince_event_last_time;
488 ecore_event_add(ECORE_WINCE_EVENT_WINDOW_CREATE, e, NULL, NULL);
492 _ecore_wince_event_handle_destroy_notify(Ecore_WinCE_Callback_Data *msg)
494 Ecore_WinCE_Event_Window_Destroy *e;
496 INF("window destroy notify");
498 e = calloc(1, sizeof(Ecore_WinCE_Event_Window_Destroy));
501 e->window = (void *)GetWindowLong(msg->window, GWL_USERDATA);
508 e->time = _ecore_wince_event_last_time;
509 /* if (e->window == _ecore_wince_event_last_window) _ecore_wince_event_last_window = NULL; */
511 ecore_event_add(ECORE_WINCE_EVENT_WINDOW_DESTROY, e, NULL, NULL);
515 _ecore_wince_event_handle_map_notify(Ecore_WinCE_Callback_Data *msg)
517 Ecore_WinCE_Event_Window_Show *e;
519 INF("window map notify");
521 e = calloc(1, sizeof(Ecore_WinCE_Event_Window_Show));
524 e->window = (void *)GetWindowLong(msg->window, GWL_USERDATA);
531 e->time = _ecore_wince_event_last_time;
533 ecore_event_add(ECORE_WINCE_EVENT_WINDOW_SHOW, e, NULL, NULL);
537 _ecore_wince_event_handle_unmap_notify(Ecore_WinCE_Callback_Data *msg)
539 Ecore_WinCE_Event_Window_Hide *e;
541 INF("window unmap notify");
543 e = calloc(1, sizeof(Ecore_WinCE_Event_Window_Hide));
546 e->window = (void *)GetWindowLong(msg->window, GWL_USERDATA);
553 e->time = _ecore_wince_event_last_time;
555 ecore_event_add(ECORE_WINCE_EVENT_WINDOW_HIDE, e, NULL, NULL);
559 _ecore_wince_event_handle_delete_request(Ecore_WinCE_Callback_Data *msg)
561 Ecore_WinCE_Event_Window_Delete_Request *e;
563 INF("window delete request");
565 e = calloc(1, sizeof(Ecore_WinCE_Event_Window_Delete_Request));
568 e->window = (void *)GetWindowLong(msg->window, GWL_USERDATA);
575 e->time = _ecore_wince_event_last_time;
577 ecore_event_add(ECORE_WINCE_EVENT_WINDOW_DELETE_REQUEST, e, NULL, NULL);
581 /***** Private functions definitions *****/
584 _ecore_wince_event_free_key_down(void *data __UNUSED__,
590 if (e->keyname) free((char *)e->keyname);
591 if (e->key) free((char *)e->key);
592 if (e->string) free((char *)e->string);
597 _ecore_wince_event_free_key_up(void *data __UNUSED__,
603 if (e->keyname) free((char *)e->keyname);
604 if (e->key) free((char *)e->key);
605 if (e->string) free((char *)e->string);
610 _ecore_wince_event_keystroke_get(int key,
773 * VK_F20 indicates that an arrow key came from a rocker.
774 * This can safely be ignored.
779 * VK_F21 indicates that an arrow key came from a directional
780 * pad. This can safely be ignored.
790 * Sent with VK_RETURN when doing an action (usually the middle
791 * button on a directional pad. This can safely be ignored.
810 /* other non keystroke characters */
813 *keyname = strdup(kn);
814 if (!*keyname) return 0;
815 *keysymbol = strdup(ks);
822 *keycompose = strdup(kc);
836 _ecore_wince_event_char_get(int key,
853 strncpy(kn, "BackSpace", 32);
854 strncpy(ks, "BackSpace", 32);
855 strncpy(kc, "BackSpace", 32);
859 strncpy(kn, "Tab", 32);
860 strncpy(ks, "Tab", 32);
861 strncpy(kc, "Tab", 32);
865 /* Line feed (Shift + Enter) */
866 strncpy(kn, "LineFeed", 32);
867 strncpy(ks, "LineFeed", 32);
868 strncpy(kc, "LineFeed", 32);
872 strncpy(kn, "Return", 32);
873 strncpy(ks, "Return", 32);
874 strncpy(kc, "Return", 32);
878 strncpy(kn, "Escape", 32);
879 strncpy(ks, "Escape", 32);
880 strncpy(kc, "Escape", 32);
883 /* displayable characters */
884 printf (" * key : %d\n", key);
893 *keyname = strdup(kn);
894 if (!*keyname) return 0;
895 *keysymbol = strdup(ks);
902 *keycompose = strdup(kc);