forked from enlightenment/efl
* [Ecore_X] "mouse up" events have now double/triple click flags, and
those flags are feeded to the Evas SVN revision: 25105
This commit is contained in:
parent
7837b6f53a
commit
992bf08f32
|
@ -511,13 +511,16 @@ _ecore_evas_x_event_mouse_button_up(void *data __UNUSED__, int type __UNUSED__,
|
||||||
{
|
{
|
||||||
Ecore_Evas *ee;
|
Ecore_Evas *ee;
|
||||||
Ecore_X_Event_Mouse_Button_Up *e;
|
Ecore_X_Event_Mouse_Button_Up *e;
|
||||||
|
Evas_Button_Flags flags = EVAS_BUTTON_NONE;
|
||||||
|
|
||||||
e = event;
|
e = event;
|
||||||
ee = _ecore_evas_x_match(e->win);
|
ee = _ecore_evas_x_match(e->win);
|
||||||
if ((!ee) || (ee->ignore_events)) return 1; /* pass on event */
|
if ((!ee) || (ee->ignore_events)) return 1; /* pass on event */
|
||||||
if (e->win != ee->engine.x.win) return 1;
|
if (e->win != ee->engine.x.win) return 1;
|
||||||
_ecore_evas_x_modifier_locks_update(ee, e->modifiers);
|
_ecore_evas_x_modifier_locks_update(ee, e->modifiers);
|
||||||
evas_event_feed_mouse_up(ee->evas, e->button, EVAS_BUTTON_NONE, e->time, NULL);
|
if (e->double_click) flags |= EVAS_BUTTON_DOUBLE_CLICK;
|
||||||
|
if (e->triple_click) flags |= EVAS_BUTTON_TRIPLE_CLICK;
|
||||||
|
evas_event_feed_mouse_up(ee->evas, e->button, flags, e->time, NULL);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -329,6 +329,8 @@ struct _Ecore_X_Event_Mouse_Button_Up
|
||||||
Ecore_X_Window win;
|
Ecore_X_Window win;
|
||||||
Ecore_X_Window event_win;
|
Ecore_X_Window event_win;
|
||||||
Ecore_X_Time time;
|
Ecore_X_Time time;
|
||||||
|
int double_click : 1;
|
||||||
|
int triple_click : 1;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct _Ecore_X_Event_Mouse_Move
|
struct _Ecore_X_Event_Mouse_Move
|
||||||
|
|
|
@ -27,6 +27,15 @@ static void _ecore_x_event_free_window_prop_client_machine_change(void *data, vo
|
||||||
static void _ecore_x_event_free_key_down(void *data, void *ev);
|
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 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
|
EAPI void
|
||||||
ecore_x_event_mask_set(Ecore_X_Window w, Ecore_X_Event_Mask mask)
|
ecore_x_event_mask_set(Ecore_X_Window w, Ecore_X_Event_Mask mask)
|
||||||
{
|
{
|
||||||
|
@ -276,13 +285,6 @@ _ecore_x_event_handle_key_release(XEvent *xevent)
|
||||||
void
|
void
|
||||||
_ecore_x_event_handle_button_press(XEvent *xevent)
|
_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;
|
int i;
|
||||||
|
|
||||||
if ((xevent->xbutton.button > 3) && (xevent->xbutton.button < 8))
|
if ((xevent->xbutton.button > 3) && (xevent->xbutton.button < 8))
|
||||||
|
@ -382,6 +384,16 @@ _ecore_x_event_handle_button_press(XEvent *xevent)
|
||||||
{
|
{
|
||||||
Ecore_X_Event_Mouse_Button_Down *e;
|
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));
|
e = calloc(1, sizeof(Ecore_X_Event_Mouse_Button_Down));
|
||||||
if (!e) return;
|
if (!e) return;
|
||||||
e->button = xevent->xbutton.button;
|
e->button = xevent->xbutton.button;
|
||||||
|
@ -396,22 +408,28 @@ _ecore_x_event_handle_button_press(XEvent *xevent)
|
||||||
e->time = xevent->xbutton.time;
|
e->time = xevent->xbutton.time;
|
||||||
if (e->win == e->event_win)
|
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)) &&
|
(int)(1000 * _ecore_x_double_click_time)) &&
|
||||||
(e->win == last_win)
|
(e->win == _ecore_x_mouse_down_last_win) &&
|
||||||
&& (e->event_win == last_event_win)
|
(e->event_win == _ecore_x_mouse_down_last_event_win)
|
||||||
)
|
)
|
||||||
e->double_click = 1;
|
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)) &&
|
(int)(2 * 1000 * _ecore_x_double_click_time)) &&
|
||||||
(e->win == last_win) && (e->win == last_last_win)
|
(e->win == _ecore_x_mouse_down_last_win) &&
|
||||||
&& (e->event_win == last_event_win) && (e->event_win == last_last_event_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_time = e->time;
|
||||||
_ecore_x_event_last_win = e->win;
|
_ecore_x_event_last_win = e->win;
|
||||||
_ecore_x_event_last_root_x = e->root.x;
|
_ecore_x_event_last_root_x = e->root.x;
|
||||||
|
@ -441,26 +459,17 @@ _ecore_x_event_handle_button_press(XEvent *xevent)
|
||||||
}
|
}
|
||||||
if (e->win == e->event_win)
|
if (e->win == e->event_win)
|
||||||
{
|
{
|
||||||
if (did_triple)
|
if (!_ecore_x_mouse_down_did_triple)
|
||||||
{
|
{
|
||||||
last_win = 0;
|
_ecore_x_mouse_down_last_last_win = _ecore_x_mouse_down_last_win;
|
||||||
last_last_win = 0;
|
|
||||||
last_event_win = 0;
|
|
||||||
last_last_event_win = 0;
|
|
||||||
last_time = 0;
|
|
||||||
last_last_time = 0;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
last_last_win = last_win;
|
|
||||||
if (xevent->xbutton.subwindow)
|
if (xevent->xbutton.subwindow)
|
||||||
last_win = xevent->xbutton.subwindow;
|
_ecore_x_mouse_down_last_win = xevent->xbutton.subwindow;
|
||||||
else
|
else
|
||||||
last_win = xevent->xbutton.window;
|
_ecore_x_mouse_down_last_win = xevent->xbutton.window;
|
||||||
last_last_event_win = last_event_win;
|
_ecore_x_mouse_down_last_last_event_win = _ecore_x_mouse_down_last_event_win;
|
||||||
last_event_win = xevent->xbutton.window;
|
_ecore_x_mouse_down_last_event_win = xevent->xbutton.window;
|
||||||
last_last_time = last_time;
|
_ecore_x_mouse_down_last_last_time = _ecore_x_mouse_down_last_time;
|
||||||
last_time = xevent->xbutton.time;
|
_ecore_x_mouse_down_last_time = xevent->xbutton.time;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -508,6 +517,26 @@ _ecore_x_event_handle_button_release(XEvent *xevent)
|
||||||
else e->win = xevent->xbutton.window;
|
else e->win = xevent->xbutton.window;
|
||||||
e->event_win = xevent->xbutton.window;
|
e->event_win = xevent->xbutton.window;
|
||||||
e->time = xevent->xbutton.time;
|
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_time = e->time;
|
||||||
_ecore_x_event_last_win = e->win;
|
_ecore_x_event_last_win = e->win;
|
||||||
_ecore_x_event_last_root_x = e->root.x;
|
_ecore_x_event_last_root_x = e->root.x;
|
||||||
|
|
Loading…
Reference in New Issue