2 * vim:ts=8:sw=3:sts=8:noexpandtab:cino=>5n-3f0^-2{2
6 #include <stdio.h> /* for printf */
8 #define WIN32_LEAN_AND_MEAN
10 #undef WIN32_LEAN_AND_MEAN
13 #include "Ecore_WinCE.h"
14 #include "ecore_wince_private.h"
17 /***** Private declarations *****/
19 static Ecore_WinCE_Window *_ecore_wince_mouse_down_last_window = NULL;
20 static Ecore_WinCE_Window *_ecore_wince_mouse_down_last_last_window = NULL;
21 static double _ecore_wince_mouse_down_last_time = 0;
22 static double _ecore_wince_mouse_down_last_last_time = 0;
23 static int _ecore_wince_mouse_down_did_triple = 0;
24 static int _ecore_wince_mouse_up_count = 0;
27 static void _ecore_wince_event_free_key_down(void *data,
30 static void _ecore_wince_event_free_key_up(void *data,
33 static int _ecore_wince_event_keystroke_get(int key,
38 static int _ecore_wince_event_char_get(int key,
44 /***** Global functions *****/
47 _ecore_wince_event_handle_key_press(Ecore_WinCE_Callback_Data *msg)
49 Ecore_WinCE_Event_Key_Down *e;
51 e = (Ecore_WinCE_Event_Key_Down *)malloc(sizeof(Ecore_WinCE_Event_Key_Down));
54 if (!_ecore_wince_event_keystroke_get(LOWORD(msg->window_param),
63 e->window = (void *)GetWindowLong(msg->window, GWL_USERDATA);
69 e->time = (double)msg->time / 1000.0;
71 _ecore_wince_event_last_time = e->time;
73 ecore_event_add(ECORE_WINCE_EVENT_KEY_DOWN, e, _ecore_wince_event_free_key_down, NULL);
77 _ecore_wince_event_handle_key_release(Ecore_WinCE_Callback_Data *msg)
79 Ecore_WinCE_Event_Key_Up *e;
81 e = (Ecore_WinCE_Event_Key_Up *)calloc(1, sizeof(Ecore_WinCE_Event_Key_Up));
84 if (!_ecore_wince_event_keystroke_get(LOWORD(msg->window_param),
93 e->window = (void *)GetWindowLong(msg->window, GWL_USERDATA);
99 e->time = (double)msg->time / 1000.0;
101 _ecore_wince_event_last_time = e->time;
103 ecore_event_add(ECORE_WINCE_EVENT_KEY_UP, e, _ecore_wince_event_free_key_up, NULL);
107 _ecore_wince_event_handle_button_press(Ecore_WinCE_Callback_Data *msg,
110 Ecore_WinCE_Window *window;
112 window = (void *)GetWindowLong(msg->window, GWL_USERDATA);
115 Ecore_WinCE_Event_Mouse_Move *e;
117 e = (Ecore_WinCE_Event_Mouse_Move *)calloc(1, sizeof(Ecore_WinCE_Event_Mouse_Move));
121 e->x = LOWORD(msg->data_param);
122 e->y = HIWORD(msg->data_param);
123 e->time = (double)msg->time / 1000.0;
125 _ecore_wince_event_last_time = e->time;
126 _ecore_wince_event_last_window = e->window;
128 ecore_event_add(ECORE_WINCE_EVENT_MOUSE_MOVE, e, NULL, NULL);
132 Ecore_WinCE_Event_Mouse_Button_Down *e;
134 if (_ecore_wince_mouse_down_did_triple)
136 _ecore_wince_mouse_down_last_window = NULL;
137 _ecore_wince_mouse_down_last_last_window = NULL;
138 _ecore_wince_mouse_down_last_time = 0.0;
139 _ecore_wince_mouse_down_last_last_time = 0.0;
142 e = (Ecore_WinCE_Event_Mouse_Button_Down *)calloc(1, sizeof(Ecore_WinCE_Event_Mouse_Button_Down));
147 e->x = LOWORD(msg->data_param);
148 e->y = HIWORD(msg->data_param);
149 e->time = (double)msg->time / 1000.0;
151 if (((e->time - _ecore_wince_mouse_down_last_time) <= _ecore_wince_double_click_time) &&
152 (e->window == _ecore_wince_mouse_down_last_window))
155 if (((e->time - _ecore_wince_mouse_down_last_last_time) <= (2.0 * _ecore_wince_double_click_time)) &&
156 (e->window == _ecore_wince_mouse_down_last_window) &&
157 (e->window == _ecore_wince_mouse_down_last_last_window))
160 _ecore_wince_mouse_down_did_triple = 1;
163 _ecore_wince_mouse_down_did_triple = 0;
165 if (!e->double_click && !e->triple_click)
166 _ecore_wince_mouse_up_count = 0;
168 _ecore_wince_event_last_time = e->time;
169 _ecore_wince_event_last_window = e->window;
171 if (!_ecore_wince_mouse_down_did_triple)
173 _ecore_wince_mouse_down_last_last_window = _ecore_wince_mouse_down_last_window;
174 _ecore_wince_mouse_down_last_window = e->window;
175 _ecore_wince_mouse_down_last_last_time = _ecore_wince_mouse_down_last_time;
176 _ecore_wince_mouse_down_last_time = e->time;
179 ecore_event_add(ECORE_WINCE_EVENT_MOUSE_BUTTON_DOWN, e, NULL, NULL);
181 printf (" * ecore event button press\n");
185 _ecore_wince_event_handle_button_release(Ecore_WinCE_Callback_Data *msg,
188 Ecore_WinCE_Window *window;
190 window = (void *)GetWindowLong(msg->window, GWL_USERDATA);
193 Ecore_WinCE_Event_Mouse_Move *e;
195 e = (Ecore_WinCE_Event_Mouse_Move *)calloc(1, sizeof(Ecore_WinCE_Event_Mouse_Move));
199 e->x = LOWORD(msg->data_param);
200 e->y = HIWORD(msg->data_param);
201 e->time = (double)msg->time / 1000.0;
203 _ecore_wince_event_last_time = e->time;
204 _ecore_wince_event_last_window = e->window;
206 ecore_event_add(ECORE_WINCE_EVENT_MOUSE_MOVE, e, NULL, NULL);
210 Ecore_WinCE_Event_Mouse_Button_Up *e;
212 e = (Ecore_WinCE_Event_Mouse_Button_Up *)calloc(1, sizeof(Ecore_WinCE_Event_Mouse_Button_Up));
217 e->x = LOWORD(msg->data_param);
218 e->y = HIWORD(msg->data_param);
219 e->time = (double)msg->time / 1000.0;
221 _ecore_wince_mouse_up_count++;
223 if ((_ecore_wince_mouse_up_count >= 2) &&
224 ((e->time - _ecore_wince_mouse_down_last_time) <= _ecore_wince_double_click_time) &&
225 (e->window == _ecore_wince_mouse_down_last_window))
228 if ((_ecore_wince_mouse_up_count >= 3) &&
229 ((e->time - _ecore_wince_mouse_down_last_last_time) <= (2.0 * _ecore_wince_double_click_time)) &&
230 (e->window == _ecore_wince_mouse_down_last_window) &&
231 (e->window == _ecore_wince_mouse_down_last_last_window))
234 _ecore_wince_event_last_time = e->time;
235 _ecore_wince_event_last_window = e->window;
237 ecore_event_add(ECORE_WINCE_EVENT_MOUSE_BUTTON_UP, e, NULL, NULL);
240 printf (" * ecore event button release\n");
244 _ecore_wince_event_handle_motion_notify(Ecore_WinCE_Callback_Data *msg)
246 Ecore_WinCE_Event_Mouse_Move *e;
248 e = (Ecore_WinCE_Event_Mouse_Move *)calloc(1, sizeof(Ecore_WinCE_Event_Mouse_Move));
251 e->window = (void *)GetWindowLong(msg->window, GWL_USERDATA);
252 e->x = LOWORD(msg->data_param);
253 e->y = HIWORD(msg->data_param);
254 e->time = (double)msg->time / 1000.0;
256 ecore_event_add(ECORE_WINCE_EVENT_MOUSE_MOVE, e, NULL, NULL);
257 printf (" * ecore event motion notify\n");
261 _ecore_wince_event_handle_enter_notify(Ecore_WinCE_Callback_Data *msg)
263 Ecore_WinCE_Window *window;
265 window = (void *)GetWindowLong(msg->window, GWL_USERDATA);
266 printf (" * ecore event enter notify 0\n");
269 Ecore_WinCE_Event_Mouse_Move *e;
271 e = (Ecore_WinCE_Event_Mouse_Move *)calloc(1, sizeof(Ecore_WinCE_Event_Mouse_Move));
277 e->time = (double)msg->time / 1000.0;
279 _ecore_wince_event_last_time = e->time;
280 _ecore_wince_event_last_window = e->window;
282 ecore_event_add(ECORE_WINCE_EVENT_MOUSE_MOVE, e, NULL, NULL);
286 Ecore_WinCE_Event_Mouse_In *e;
288 e = (Ecore_WinCE_Event_Mouse_In *)calloc(1, sizeof(Ecore_WinCE_Event_Mouse_In));
294 e->time = (double)msg->time / 1000.0;
296 _ecore_wince_event_last_time = e->time;
298 ecore_event_add(ECORE_WINCE_EVENT_MOUSE_IN, e, NULL, NULL);
300 printf (" * ecore event enter notify 1\n");
304 _ecore_wince_event_handle_leave_notify(Ecore_WinCE_Callback_Data *msg)
306 Ecore_WinCE_Window *window;
308 window = (void *)GetWindowLong(msg->window, GWL_USERDATA);
311 Ecore_WinCE_Event_Mouse_Move *e;
313 e = (Ecore_WinCE_Event_Mouse_Move *)calloc(1, sizeof(Ecore_WinCE_Event_Mouse_Move));
319 e->time = (double)msg->time / 1000.0;
321 _ecore_wince_event_last_time = e->time;
322 _ecore_wince_event_last_window = e->window;
324 ecore_event_add(ECORE_WINCE_EVENT_MOUSE_MOVE, e, NULL, NULL);
328 Ecore_WinCE_Event_Mouse_Out *e;
330 e = (Ecore_WinCE_Event_Mouse_Out *)calloc(1, sizeof(Ecore_WinCE_Event_Mouse_Out));
336 e->time = (double)msg->time / 1000.0;
338 _ecore_wince_event_last_time = e->time;
340 ecore_event_add(ECORE_WINCE_EVENT_MOUSE_OUT, e, NULL, NULL);
342 printf (" * ecore event leave notify\n");
346 _ecore_wince_event_handle_focus_in(Ecore_WinCE_Callback_Data *msg)
348 Ecore_WinCE_Event_Window_Focus_In *e;
349 struct _Ecore_WinCE_Window *window;
351 e = (Ecore_WinCE_Event_Window_Focus_In *)calloc(1, sizeof(Ecore_WinCE_Event_Window_Focus_In));
354 window = (void *)GetWindowLong(msg->window, GWL_USERDATA);
362 window->resume(window->backend);
366 e->time = _ecore_wince_event_last_time;
367 _ecore_wince_event_last_time = e->time;
369 ecore_event_add(ECORE_WINCE_EVENT_WINDOW_FOCUS_IN, e, NULL, NULL);
373 _ecore_wince_event_handle_focus_out(Ecore_WinCE_Callback_Data *msg)
375 Ecore_WinCE_Event_Window_Focus_Out *e;
376 struct _Ecore_WinCE_Window *window;
378 e = (Ecore_WinCE_Event_Window_Focus_Out *)calloc(1, sizeof(Ecore_WinCE_Event_Window_Focus_Out));
381 window = (void *)GetWindowLong(msg->window, GWL_USERDATA);
388 window->suspend(window->backend);
392 e->time = _ecore_wince_event_last_time;
393 _ecore_wince_event_last_time = e->time;
395 ecore_event_add(ECORE_WINCE_EVENT_WINDOW_FOCUS_OUT, e, NULL, NULL);
399 _ecore_wince_event_handle_expose(Ecore_WinCE_Callback_Data *msg)
401 Ecore_WinCE_Event_Window_Damage *e;
403 e = (Ecore_WinCE_Event_Window_Damage *)calloc(1, sizeof(Ecore_WinCE_Event_Window_Damage));
406 e->window = (void *)GetWindowLong(msg->window, GWL_USERDATA);
413 e->x = msg->update.left;
414 e->y = msg->update.top;
415 e->width = msg->update.right - msg->update.left;
416 e->height = msg->update.bottom - msg->update.top;
417 printf (" * ecore : event expose %d %d\n", e->width, e->height);
419 e->time = _ecore_wince_event_last_time;
421 ecore_event_add(ECORE_WINCE_EVENT_WINDOW_DAMAGE, e, NULL, NULL);
425 _ecore_wince_event_handle_create_notify(Ecore_WinCE_Callback_Data *msg)
427 Ecore_WinCE_Event_Window_Create *e;
429 e = calloc(1, sizeof(Ecore_WinCE_Event_Window_Create));
432 e->window = (void *)GetWindowLong(msg->window, GWL_USERDATA);
439 e->time = _ecore_wince_event_last_time;
441 ecore_event_add(ECORE_WINCE_EVENT_WINDOW_CREATE, e, NULL, NULL);
445 _ecore_wince_event_handle_destroy_notify(Ecore_WinCE_Callback_Data *msg)
447 Ecore_WinCE_Event_Window_Destroy *e;
449 e = calloc(1, sizeof(Ecore_WinCE_Event_Window_Destroy));
452 e->window = (void *)GetWindowLong(msg->window, GWL_USERDATA);
459 e->time = _ecore_wince_event_last_time;
460 /* if (e->window == _ecore_wince_event_last_window) _ecore_wince_event_last_window = NULL; */
462 ecore_event_add(ECORE_WINCE_EVENT_WINDOW_DESTROY, e, NULL, NULL);
466 _ecore_wince_event_handle_map_notify(Ecore_WinCE_Callback_Data *msg)
468 Ecore_WinCE_Event_Window_Show *e;
470 e = calloc(1, sizeof(Ecore_WinCE_Event_Window_Show));
473 e->window = (void *)GetWindowLong(msg->window, GWL_USERDATA);
480 e->time = _ecore_wince_event_last_time;
482 ecore_event_add(ECORE_WINCE_EVENT_WINDOW_SHOW, e, NULL, NULL);
486 _ecore_wince_event_handle_unmap_notify(Ecore_WinCE_Callback_Data *msg)
488 Ecore_WinCE_Event_Window_Hide *e;
490 e = calloc(1, sizeof(Ecore_WinCE_Event_Window_Hide));
493 e->window = (void *)GetWindowLong(msg->window, GWL_USERDATA);
500 e->time = _ecore_wince_event_last_time;
502 ecore_event_add(ECORE_WINCE_EVENT_WINDOW_HIDE, e, NULL, NULL);
506 _ecore_wince_event_handle_delete_request(Ecore_WinCE_Callback_Data *msg)
508 Ecore_WinCE_Event_Window_Delete_Request *e;
510 e = calloc(1, sizeof(Ecore_WinCE_Event_Window_Delete_Request));
513 e->window = (void *)GetWindowLong(msg->window, GWL_USERDATA);
520 e->time = _ecore_wince_event_last_time;
522 ecore_event_add(ECORE_WINCE_EVENT_WINDOW_DELETE_REQUEST, e, NULL, NULL);
526 /***** Private functions definitions *****/
529 _ecore_wince_event_free_key_down(void *data,
532 Ecore_WinCE_Event_Key_Down *e;
535 if (e->keyname) free(e->keyname);
536 if (e->keysymbol) free(e->keysymbol);
537 if (e->keycompose) free(e->keycompose);
542 _ecore_wince_event_free_key_up(void *data,
545 Ecore_WinCE_Event_Key_Up *e;
548 if (e->keyname) free(e->keyname);
549 if (e->keysymbol) free(e->keysymbol);
550 if (e->keycompose) free(e->keycompose);
555 _ecore_wince_event_keystroke_get(int key,
742 /* other non keystroke characters */
745 *keyname = strdup(kn);
746 if (!*keyname) return 0;
747 *keysymbol = strdup(ks);
754 *keycompose = strdup(kc);
768 _ecore_wince_event_char_get(int key,
785 strncpy(kn, "Backspace", 32);
786 strncpy(ks, "Backspace", 32);
791 strncpy(kn, "Tab", 32);
792 strncpy(ks, "Tab", 32);
797 /* Line feed (Shift + Enter) */
798 strncpy(kn, "LineFeed", 32);
799 strncpy(ks, "LineFeed", 32);
804 strncpy(kn, "Return", 32);
805 strncpy(ks, "Return", 32);
810 strncpy(kn, "Escape", 32);
811 strncpy(ks, "Escape", 32);
815 /* displayable characters */
816 printf (" * key : %d\n", key);
824 *keyname = strdup(kn);
825 if (!*keyname) return 0;
826 *keysymbol = strdup(ks);
833 *keycompose = strdup(kc);