Enlightenment CVS committal Author : moom Project : e17 Module : libs/ecore
Dir : e17/libs/ecore/src/lib/ecore_x Modified Files: Ecore_X.h ecore_x_events.c Log Message: * [Ecore_X] "mouse up" events have now double/triple click flags, and those flags are feeded to the Evas =================================================================== RCS file: /cvs/e/e17/libs/ecore/src/lib/ecore_x/Ecore_X.h,v retrieving revision 1.170 retrieving revision 1.171 diff -u -3 -r1.170 -r1.171 --- Ecore_X.h 14 Jul 2006 09:37:11 -0000 1.170 +++ Ecore_X.h 25 Aug 2006 17:27:08 -0000 1.171 @@ -329,6 +329,8 @@ Ecore_X_Window win; Ecore_X_Window event_win; Ecore_X_Time time; + int double_click : 1; + int triple_click : 1; }; struct _Ecore_X_Event_Mouse_Move =================================================================== RCS file: /cvs/e/e17/libs/ecore/src/lib/ecore_x/ecore_x_events.c,v retrieving revision 1.83 retrieving revision 1.84 diff -u -3 -r1.83 -r1.84 --- ecore_x_events.c 19 May 2006 14:23:04 -0000 1.83 +++ ecore_x_events.c 25 Aug 2006 17:27:08 -0000 1.84 @@ -27,6 +27,15 @@ static void _ecore_x_event_free_key_down(void *data, void *ev); static void _ecore_x_event_free_key_up(void *data, void *ev); +static Window _ecore_x_mouse_down_last_win = 0; +static Window _ecore_x_mouse_down_last_last_win = 0; +static Window _ecore_x_mouse_down_last_event_win = 0; +static Window _ecore_x_mouse_down_last_last_event_win = 0; +static Time _ecore_x_mouse_down_last_time = 0; +static Time _ecore_x_mouse_down_last_last_time = 0; +static int _ecore_x_mouse_up_count = 0; +static int _ecore_x_mouse_down_did_triple = 0; + EAPI void ecore_x_event_mask_set(Ecore_X_Window w, Ecore_X_Event_Mask mask) { @@ -276,13 +285,6 @@ void _ecore_x_event_handle_button_press(XEvent *xevent) { - static Window last_win = 0; - static Window last_last_win = 0; - static Window last_event_win = 0; - static Window last_last_event_win = 0; - static Time last_time = 0; - static Time last_last_time = 0; - int did_triple = 0; int i; if ((xevent->xbutton.button > 3) && (xevent->xbutton.button < 8)) @@ -381,6 +383,16 @@ } { Ecore_X_Event_Mouse_Button_Down *e; + + if (_ecore_x_mouse_down_did_triple) + { + _ecore_x_mouse_down_last_win = 0; + _ecore_x_mouse_down_last_last_win = 0; + _ecore_x_mouse_down_last_event_win = 0; + _ecore_x_mouse_down_last_last_event_win = 0; + _ecore_x_mouse_down_last_time = 0; + _ecore_x_mouse_down_last_last_time = 0; + } e = calloc(1, sizeof(Ecore_X_Event_Mouse_Button_Down)); if (!e) return; @@ -396,22 +408,28 @@ e->time = xevent->xbutton.time; if (e->win == e->event_win) { - if (((int)(e->time - last_time) <= + if (((int)(e->time - _ecore_x_mouse_down_last_time) <= (int)(1000 * _ecore_x_double_click_time)) && - (e->win == last_win) - && (e->event_win == last_event_win) + (e->win == _ecore_x_mouse_down_last_win) && + (e->event_win == _ecore_x_mouse_down_last_event_win) ) e->double_click = 1; - if (((int)(e->time - last_last_time) <= + if (((int)(e->time - _ecore_x_mouse_down_last_last_time) <= (int)(2 * 1000 * _ecore_x_double_click_time)) && - (e->win == last_win) && (e->win == last_last_win) - && (e->event_win == last_event_win) && (e->event_win == last_last_event_win) + (e->win == _ecore_x_mouse_down_last_win) && + (e->win == _ecore_x_mouse_down_last_last_win) && + (e->event_win == _ecore_x_mouse_down_last_event_win) && + (e->event_win == _ecore_x_mouse_down_last_last_event_win) ) { - did_triple = 1; - e->triple_click = 1; + e->triple_click = 1; + _ecore_x_mouse_down_did_triple = 1; } + else + _ecore_x_mouse_down_did_triple = 0; } + if (!e->double_click && !e->triple_click) + _ecore_x_mouse_up_count = 0; _ecore_x_event_last_time = e->time; _ecore_x_event_last_win = e->win; _ecore_x_event_last_root_x = e->root.x; @@ -441,26 +459,17 @@ } if (e->win == e->event_win) { - if (did_triple) - { - last_win = 0; - last_last_win = 0; - last_event_win = 0; - last_last_event_win = 0; - last_time = 0; - last_last_time = 0; - } - else + if (!_ecore_x_mouse_down_did_triple) { - last_last_win = last_win; + _ecore_x_mouse_down_last_last_win = _ecore_x_mouse_down_last_win; if (xevent->xbutton.subwindow) - last_win = xevent->xbutton.subwindow; + _ecore_x_mouse_down_last_win = xevent->xbutton.subwindow; else - last_win = xevent->xbutton.window; - last_last_event_win = last_event_win; - last_event_win = xevent->xbutton.window; - last_last_time = last_time; - last_time = xevent->xbutton.time; + _ecore_x_mouse_down_last_win = xevent->xbutton.window; + _ecore_x_mouse_down_last_last_event_win = _ecore_x_mouse_down_last_event_win; + _ecore_x_mouse_down_last_event_win = xevent->xbutton.window; + _ecore_x_mouse_down_last_last_time = _ecore_x_mouse_down_last_time; + _ecore_x_mouse_down_last_time = xevent->xbutton.time; } } } @@ -508,6 +517,26 @@ else e->win = xevent->xbutton.window; e->event_win = xevent->xbutton.window; e->time = xevent->xbutton.time; + _ecore_x_mouse_up_count++; + if (e->win == e->event_win) + { + if ((_ecore_x_mouse_up_count >= 2) && + ((int)(e->time - _ecore_x_mouse_down_last_time) <= + (int)(1000 * _ecore_x_double_click_time)) && + (e->win == _ecore_x_mouse_down_last_win) && + (e->event_win == _ecore_x_mouse_down_last_event_win) + ) + e->double_click = 1; + if ((_ecore_x_mouse_up_count >= 3) && + ((int)(e->time - _ecore_x_mouse_down_last_last_time) <= + (int)(2 * 1000 * _ecore_x_double_click_time)) && + (e->win == _ecore_x_mouse_down_last_win) && + (e->win == _ecore_x_mouse_down_last_last_win) && + (e->event_win == _ecore_x_mouse_down_last_event_win) && + (e->event_win == _ecore_x_mouse_down_last_last_event_win) + ) + e->triple_click = 1; + } _ecore_x_event_last_time = e->time; _ecore_x_event_last_win = e->win; _ecore_x_event_last_root_x = e->root.x; ------------------------------------------------------------------------- Using Tomcat but need to do more? Need to support web services, security? Get stuff done quickly with pre-integrated technology to make your job easier Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642 _______________________________________________ enlightenment-cvs mailing list enlightenment-cvs@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs