ecore_evas_input: add value to enable mouse button cancel feature

mike reported this feature break the behavior in E19, but I have trouble to reproduce it.
so I first add value to enable this feature and after that,
This commit is contained in:
Ji-Youn Park 2015-07-29 21:56:15 +09:00
parent 56a5ef9d86
commit be2a4342b4
1 changed files with 30 additions and 19 deletions

View File

@ -60,6 +60,8 @@ static Eina_Hash *_window_hash = NULL;
static Eina_List *_last_events = NULL;
static double _last_events_timeout = 0.5;
static Eina_Bool _last_events_enable = EINA_FALSE;
static Eina_Bool _cancel_events_enable = EINA_FALSE;
static Eina_Bool _ecore_event_evas_mouse_button(Ecore_Event_Mouse_Button *e,
Ecore_Event_Press press,
@ -458,33 +460,36 @@ _ecore_event_evas_mouse_button(Ecore_Event_Mouse_Button *e, Ecore_Event_Press pr
//error handle
// 1. ecore up without ecore down
// 2. ecore cancel without ecore down
if (press != ECORE_DOWN)
if (_cancel_events_enable)
{
//ECORE_UP or ECORE_CANCEL
eel = _ecore_event_evas_lookup(e->multi.device, e->buttons, e->window, EINA_FALSE);
if (!eel)
if (press != ECORE_DOWN)
{
WRN("ButtonEvent has no history.");
return ECORE_CALLBACK_PASS_ON;
//ECORE_UP or ECORE_CANCEL
eel = _ecore_event_evas_lookup(e->multi.device, e->buttons, e->window, EINA_FALSE);
if (!eel)
{
WRN("ButtonEvent has no history.");
return ECORE_CALLBACK_PASS_ON;
}
if ((e->window == eel->win) &&
((eel->state == ECORE_INPUT_UP) ||
(eel->state == ECORE_INPUT_CANCEL)))
{
WRN("ButtonEvent has wrong history. Last state=%d", eel->state);
return ECORE_CALLBACK_PASS_ON;
}
}
if ((e->window == eel->win) &&
((eel->state == ECORE_INPUT_UP) ||
(eel->state == ECORE_INPUT_CANCEL)))
if (!faked)
{
WRN("ButtonEvent has wrong history. Last state=%d", eel->state);
return ECORE_CALLBACK_PASS_ON;
Eina_Bool ret = EINA_FALSE;
ret = _ecore_event_evas_push_mouse_button(e, press);
/* This ButtonEvent is worng */
if (!ret) return ECORE_CALLBACK_PASS_ON;
}
}
if (!faked)
{
Eina_Bool ret = EINA_FALSE;
ret = _ecore_event_evas_push_mouse_button(e, press);
/* This ButtonEvent is worng */
if (!ret) return ECORE_CALLBACK_PASS_ON;
}
if (e->multi.device == 0)
{
ecore_event_evas_modifier_lock_update(lookup->evas, e->modifiers);
@ -588,6 +593,8 @@ ecore_event_evas_mouse_button_up(void *data EINA_UNUSED, int type EINA_UNUSED, v
EAPI Eina_Bool
ecore_event_evas_mouse_button_cancel(void *data EINA_UNUSED, int type EINA_UNUSED, void *event)
{
if (!_cancel_events_enable) return EINA_FALSE;
return _ecore_event_evas_mouse_button_cancel((Ecore_Event_Mouse_Button *)event);
}
@ -735,6 +742,10 @@ ecore_event_evas_init(void)
if (tmp)
_last_events_timeout = ((double) atoi(tmp)) / 60;
}
if (getenv("ECORE_INPUT_CANCEL"))
{
_cancel_events_enable = EINA_TRUE;
}
return _ecore_event_evas_init_count;