forked from enlightenment/efl
parent
0a00e31973
commit
77b7f24e5b
|
@ -287,7 +287,8 @@ evas_event_feed_mouse_up_data(Evas *e, int b, const void *data)
|
||||||
Evas_Object *obj;
|
Evas_Object *obj;
|
||||||
|
|
||||||
obj = l->data;
|
obj = l->data;
|
||||||
if (!evas_list_find(ins, obj))
|
if ((!evas_list_find(ins, obj)) ||
|
||||||
|
(!e->pointer.inside))
|
||||||
{
|
{
|
||||||
Evas_Event_Mouse_Out ev;
|
Evas_Event_Mouse_Out ev;
|
||||||
|
|
||||||
|
@ -305,6 +306,8 @@ evas_event_feed_mouse_up_data(Evas *e, int b, const void *data)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (copy) copy = evas_list_free(copy);
|
if (copy) copy = evas_list_free(copy);
|
||||||
|
if (e->pointer.inside)
|
||||||
|
{
|
||||||
for (l = ins; l; l = l->next)
|
for (l = ins; l; l = l->next)
|
||||||
{
|
{
|
||||||
Evas_Object *obj;
|
Evas_Object *obj;
|
||||||
|
@ -328,10 +331,16 @@ evas_event_feed_mouse_up_data(Evas *e, int b, const void *data)
|
||||||
evas_object_event_callback_call(obj, EVAS_CALLBACK_MOUSE_IN, &ev);
|
evas_object_event_callback_call(obj, EVAS_CALLBACK_MOUSE_IN, &ev);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
ins = evas_list_free(ins);
|
||||||
|
}
|
||||||
/* free our old list of ins */
|
/* free our old list of ins */
|
||||||
e->pointer.object.in = evas_list_free(e->pointer.object.in);
|
e->pointer.object.in = evas_list_free(e->pointer.object.in);
|
||||||
/* and set up the new one */
|
/* and set up the new one */
|
||||||
e->pointer.object.in = ins;
|
e->pointer.object.in = ins;
|
||||||
|
if (e->pointer.inside)
|
||||||
evas_event_feed_mouse_move_data(e, e->pointer.x, e->pointer.y, data);
|
evas_event_feed_mouse_move_data(e, e->pointer.x, e->pointer.y, data);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -363,6 +372,7 @@ evas_event_feed_mouse_move_data(Evas *e, int x, int y, const void *data)
|
||||||
e->pointer.y = y;
|
e->pointer.y = y;
|
||||||
e->pointer.canvas_x = evas_coord_screen_x_to_world(e, x);
|
e->pointer.canvas_x = evas_coord_screen_x_to_world(e, x);
|
||||||
e->pointer.canvas_y = evas_coord_screen_y_to_world(e, y);
|
e->pointer.canvas_y = evas_coord_screen_y_to_world(e, y);
|
||||||
|
if ((!e->pointer.inside) && (e->pointer.mouse_grabbed == 0)) return;
|
||||||
/* if our mouse button is grabbed to any objects */
|
/* if our mouse button is grabbed to any objects */
|
||||||
if (e->pointer.mouse_grabbed != 0)
|
if (e->pointer.mouse_grabbed != 0)
|
||||||
{
|
{
|
||||||
|
@ -534,12 +544,46 @@ evas_event_feed_mouse_move_data(Evas *e, int x, int y, const void *data)
|
||||||
void
|
void
|
||||||
evas_event_feed_mouse_in_data(Evas *e, const void *data)
|
evas_event_feed_mouse_in_data(Evas *e, const void *data)
|
||||||
{
|
{
|
||||||
|
Evas_List *ins;
|
||||||
|
Evas_List *l;
|
||||||
|
|
||||||
MAGIC_CHECK(e, Evas, MAGIC_EVAS);
|
MAGIC_CHECK(e, Evas, MAGIC_EVAS);
|
||||||
return;
|
return;
|
||||||
MAGIC_CHECK_END();
|
MAGIC_CHECK_END();
|
||||||
e->pointer.inside = 1;
|
e->pointer.inside = 1;
|
||||||
return;
|
|
||||||
data = NULL;
|
if (e->events_frozen > 0) return;
|
||||||
|
|
||||||
|
/* get new list of ins */
|
||||||
|
ins = evas_event_objects_event_list(e, NULL, e->pointer.x, e->pointer.y);
|
||||||
|
for (l = ins; l; l = l->next)
|
||||||
|
{
|
||||||
|
Evas_Object *obj;
|
||||||
|
|
||||||
|
obj = l->data;
|
||||||
|
|
||||||
|
if (!evas_list_find(e->pointer.object.in, obj))
|
||||||
|
{
|
||||||
|
Evas_Event_Mouse_In ev;
|
||||||
|
|
||||||
|
obj->mouse_in = 1;
|
||||||
|
ev.buttons = e->pointer.button;
|
||||||
|
ev.output.x = e->pointer.x;
|
||||||
|
ev.output.y = e->pointer.y;
|
||||||
|
ev.canvas.x = e->pointer.canvas_x;
|
||||||
|
ev.canvas.y = e->pointer.canvas_y;
|
||||||
|
ev.data = (void *)data;
|
||||||
|
ev.modifiers = &(e->modifiers);
|
||||||
|
ev.locks = &(e->locks);
|
||||||
|
if (!e->events_frozen)
|
||||||
|
evas_object_event_callback_call(obj, EVAS_CALLBACK_MOUSE_IN, &ev);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/* free our old list of ins */
|
||||||
|
e->pointer.object.in = evas_list_free(e->pointer.object.in);
|
||||||
|
/* and set up the new one */
|
||||||
|
e->pointer.object.in = ins;
|
||||||
|
evas_event_feed_mouse_move_data(e, e->pointer.x, e->pointer.y, data);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -555,8 +599,43 @@ evas_event_feed_mouse_out_data(Evas *e, const void *data)
|
||||||
return;
|
return;
|
||||||
MAGIC_CHECK_END();
|
MAGIC_CHECK_END();
|
||||||
e->pointer.inside = 0;
|
e->pointer.inside = 0;
|
||||||
return;
|
|
||||||
data = NULL;
|
printf("OUT !!!!\n");
|
||||||
|
if (e->events_frozen > 0) return;
|
||||||
|
|
||||||
|
/* if our mouse button is grabbed to any objects */
|
||||||
|
if (e->pointer.mouse_grabbed == 0)
|
||||||
|
{
|
||||||
|
printf("OUT2 !!!!\n");
|
||||||
|
/* go thru old list of in objects */
|
||||||
|
Evas_List *l, *copy;
|
||||||
|
|
||||||
|
copy = evas_event_list_copy(e->pointer.object.in);
|
||||||
|
for (l = copy; l; l = l->next)
|
||||||
|
{
|
||||||
|
Evas_Object *obj;
|
||||||
|
|
||||||
|
obj = l->data;
|
||||||
|
printf("OUT %p\n", obj);
|
||||||
|
{
|
||||||
|
Evas_Event_Mouse_Out ev;
|
||||||
|
|
||||||
|
obj->mouse_in = 0;
|
||||||
|
ev.buttons = e->pointer.button;
|
||||||
|
ev.output.x = e->pointer.x;
|
||||||
|
ev.output.y = e->pointer.y;
|
||||||
|
ev.canvas.x = e->pointer.canvas_x;
|
||||||
|
ev.canvas.y = e->pointer.canvas_y;
|
||||||
|
ev.data = (void *)data;
|
||||||
|
ev.modifiers = &(e->modifiers);
|
||||||
|
ev.locks = &(e->locks);
|
||||||
|
if (!e->events_frozen)
|
||||||
|
evas_object_event_callback_call(obj, EVAS_CALLBACK_MOUSE_OUT, &ev);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/* free our old list of ins */
|
||||||
|
e->pointer.object.in = evas_list_free(e->pointer.object.in);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
Loading…
Reference in New Issue