diff --git a/src/lib/ecore_evas/ecore_evas.c b/src/lib/ecore_evas/ecore_evas.c index c8728e4a73..7f7b1dc77f 100644 --- a/src/lib/ecore_evas/ecore_evas.c +++ b/src/lib/ecore_evas/ecore_evas.c @@ -3359,8 +3359,8 @@ _ecore_evas_idle_timeout_update(Ecore_Evas *ee) ecore_timer_add(IDLE_FLUSH_TIME, _ecore_evas_cb_idle_flush, ee); } -EAPI void -_ecore_evas_mouse_move_process(Ecore_Evas *ee, int x, int y, unsigned int timestamp) +static void +_ecore_evas_mouse_move_process_internal(Ecore_Evas *ee, int x, int y, unsigned int timestamp, Eina_Bool feed) { int fx, fy, fw, fh; ee->mouse.x = x; @@ -3388,6 +3388,7 @@ _ecore_evas_mouse_move_process(Ecore_Evas *ee, int x, int y, unsigned int timest y - fx - ee->prop.cursor.hot.x, ee->w + fh - x - fy - 1 - ee->prop.cursor.hot.y); } + if (!feed) return; if (ee->rotation == 0) evas_event_input_mouse_move(ee->evas, x, y, timestamp, NULL); else if (ee->rotation == 90) @@ -3398,6 +3399,12 @@ _ecore_evas_mouse_move_process(Ecore_Evas *ee, int x, int y, unsigned int timest evas_event_input_mouse_move(ee->evas, y, ee->w + fh - x - 1, timestamp, NULL); } +EAPI void +_ecore_evas_mouse_move_process(Ecore_Evas *ee, int x, int y, unsigned int timestamp) +{ + _ecore_evas_mouse_move_process_internal(ee, x, y, timestamp, EINA_TRUE); +} + EAPI void _ecore_evas_mouse_multi_move_process(Ecore_Evas *ee, int device, int x, int y, @@ -4400,6 +4407,8 @@ _direct_mouse_move_cb(Ecore_Evas *ee, const Ecore_Event_Mouse_Move *info) Evas *e = ee->evas; Eina_Bool processed; + _ecore_evas_mouse_move_process_internal(ee, info->x, info->y, info->timestamp, EINA_FALSE); + /* Unused information: * same_screen * root.{x,y} diff --git a/src/lib/ecore_input_evas/ecore_input_evas.c b/src/lib/ecore_input_evas/ecore_input_evas.c index c06b30d7a1..59bfc29cd6 100644 --- a/src/lib/ecore_input_evas/ecore_input_evas.c +++ b/src/lib/ecore_input_evas/ecore_input_evas.c @@ -599,34 +599,39 @@ ecore_event_evas_mouse_move(void *data EINA_UNUSED, int type EINA_UNUSED, void * e = event; lookup = _ecore_event_window_match(e->event_window); if (!lookup) return ECORE_CALLBACK_PASS_ON; - if (lookup->direct && - lookup->direct(lookup->window, ECORE_EVENT_MOUSE_MOVE, e)) - return ECORE_CALLBACK_PASS_ON; if (e->multi.device == 0) { _ecore_event_evas_push_mouse_move(e); ecore_event_evas_modifier_lock_update(lookup->evas, e->modifiers); - if (lookup->move_mouse) - lookup->move_mouse(lookup->window, e->x, e->y, e->timestamp); - else - evas_event_input_mouse_move(lookup->evas, e->x, e->y, e->timestamp, - NULL); + if (!lookup->direct || + !lookup->direct(lookup->window, ECORE_EVENT_MOUSE_MOVE, e)) + { + if (lookup->move_mouse) + lookup->move_mouse(lookup->window, e->x, e->y, e->timestamp); + else + evas_event_input_mouse_move(lookup->evas, e->x, e->y, e->timestamp, + NULL); + } } else { - if (lookup->move_multi) - lookup->move_multi(lookup->window, e->multi.device, - e->x, e->y, e->multi.radius, - e->multi.radius_x, e->multi.radius_y, - e->multi.pressure, e->multi.angle, - e->multi.x, e->multi.y, e->timestamp); - else - evas_event_input_multi_move(lookup->evas, e->multi.device, - e->x, e->y, e->multi.radius, - e->multi.radius_x, e->multi.radius_y, - e->multi.pressure, e->multi.angle, - e->multi.x, e->multi.y, e->timestamp, - NULL); + if (!lookup->direct || + !lookup->direct(lookup->window, ECORE_EVENT_MOUSE_MOVE, e)) + { + if (lookup->move_multi) + lookup->move_multi(lookup->window, e->multi.device, + e->x, e->y, e->multi.radius, + e->multi.radius_x, e->multi.radius_y, + e->multi.pressure, e->multi.angle, + e->multi.x, e->multi.y, e->timestamp); + else + evas_event_input_multi_move(lookup->evas, e->multi.device, + e->x, e->y, e->multi.radius, + e->multi.radius_x, e->multi.radius_y, + e->multi.pressure, e->multi.angle, + e->multi.x, e->multi.y, e->timestamp, + NULL); + } } return ECORE_CALLBACK_PASS_ON; }