ecore_evas: Fix mouse inputs

Yup, I broke everything again. This time, mouse move inputs
would not move the cursor, since I was bypassing the regular
_ecore_evas_mouse_xxx callbacks.

Fixes T3766
This commit is contained in:
Jean-Philippe Andre 2016-06-02 10:58:06 +09:00
parent 0505a729e2
commit 29d5be9e5e
2 changed files with 37 additions and 23 deletions

View File

@ -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}

View File

@ -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;
}