diff --git a/src/lib/ecore_input_evas/ecore_input_evas.c b/src/lib/ecore_input_evas/ecore_input_evas.c index d332b4c2e0..bea13cb2ea 100644 --- a/src/lib/ecore_input_evas/ecore_input_evas.c +++ b/src/lib/ecore_input_evas/ecore_input_evas.c @@ -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;