dont call mouse out or in if already in or out in evas. causing

infinite loops in edje_viewer! bad!



SVN revision: 51875
This commit is contained in:
Carsten Haitzler 2010-09-04 03:53:34 +00:00
parent 2d34d6d2a3
commit e0860db059
1 changed files with 47 additions and 26 deletions

View File

@ -450,11 +450,14 @@ evas_event_feed_mouse_up(Evas *e, int b, Evas_Button_Flags flags, unsigned int t
_evas_event_havemap_adjust(obj, &ev.canvas.x, &ev.canvas.y);
if ((!eina_list_data_find(ins, obj)) ||
(!e->pointer.inside))
{
if (obj->mouse_in)
{
obj->mouse_in = 0;
if (e->events_frozen <= 0)
evas_object_event_callback_call(obj, EVAS_CALLBACK_MOUSE_OUT, &ev);
}
}
if (e->delete_me) break;
}
_evas_post_event_callback_call(e);
@ -484,11 +487,14 @@ evas_event_feed_mouse_up(Evas *e, int b, Evas_Button_Flags flags, unsigned int t
ev.canvas.y = e->pointer.y;
_evas_event_havemap_adjust(obj, &ev.canvas.x, &ev.canvas.y);
if (!eina_list_data_find(e->pointer.object.in, obj))
{
if (!obj->mouse_in)
{
obj->mouse_in = 1;
if (e->events_frozen <= 0)
evas_object_event_callback_call(obj, EVAS_CALLBACK_MOUSE_IN, &ev);
}
}
if (e->delete_me) break;
}
_evas_post_event_callback_call(e);
@ -730,6 +736,8 @@ evas_event_feed_mouse_move(Evas *e, int x, int y, unsigned int timestamp, const
ev.canvas.y = e->pointer.y;
_evas_event_havemap_adjust(obj, &ev.canvas.x, &ev.canvas.y);
e->pointer.object.in = eina_list_remove(e->pointer.object.in, obj);
if (obj->mouse_in)
{
obj->mouse_in = 0;
if (!obj->delete_me)
{
@ -738,6 +746,7 @@ evas_event_feed_mouse_move(Evas *e, int x, int y, unsigned int timestamp, const
}
}
}
}
_evas_post_event_callback_call(e);
}
}
@ -819,6 +828,8 @@ evas_event_feed_mouse_move(Evas *e, int x, int y, unsigned int timestamp, const
}
/* otherwise it has left the object */
else
{
if (obj->mouse_in)
{
obj->mouse_in = 0;
ev2.canvas.x = e->pointer.x;
@ -827,6 +838,7 @@ evas_event_feed_mouse_move(Evas *e, int x, int y, unsigned int timestamp, const
if (e->events_frozen <= 0)
evas_object_event_callback_call(obj, EVAS_CALLBACK_MOUSE_OUT, &ev2);
}
}
if (e->delete_me) break;
}
_evas_post_event_callback_call(e);
@ -842,11 +854,14 @@ evas_event_feed_mouse_move(Evas *e, int x, int y, unsigned int timestamp, const
_evas_event_havemap_adjust(obj, &ev3.canvas.x, &ev3.canvas.y);
/* if its not in the old list of ins send an enter event */
if (!eina_list_data_find(e->pointer.object.in, obj))
{
if (!obj->mouse_in)
{
obj->mouse_in = 1;
if (e->events_frozen <= 0)
evas_object_event_callback_call(obj, EVAS_CALLBACK_MOUSE_IN, &ev3);
}
}
if (e->delete_me) break;
}
/* free our old list of ins */
@ -910,11 +925,14 @@ evas_event_feed_mouse_in(Evas *e, unsigned int timestamp, const void *data)
ev.canvas.y = e->pointer.y;
_evas_event_havemap_adjust(obj, &ev.canvas.x, &ev.canvas.y);
if (!eina_list_data_find(e->pointer.object.in, obj))
{
if (!obj->mouse_in)
{
obj->mouse_in = 1;
if (e->events_frozen <= 0)
evas_object_event_callback_call(obj, EVAS_CALLBACK_MOUSE_IN, &ev);
}
}
if (e->delete_me) break;
}
/* free our old list of ins */
@ -978,12 +996,15 @@ evas_event_feed_mouse_out(Evas *e, unsigned int timestamp, const void *data)
ev.canvas.x = e->pointer.x;
ev.canvas.y = e->pointer.y;
_evas_event_havemap_adjust(obj, &ev.canvas.x, &ev.canvas.y);
if (obj->mouse_in)
{
obj->mouse_in = 0;
if (!obj->delete_me)
{
if (e->events_frozen <= 0)
evas_object_event_callback_call(obj, EVAS_CALLBACK_MOUSE_OUT, &ev);
}
}
if (e->delete_me) break;
}
if (copy) copy = eina_list_free(copy);