forked from enlightenment/efl
and another commit in an attempt to fix mouse grabs + event callbacks
to be consistent SVN revision: 63607
This commit is contained in:
parent
0088ea3d8b
commit
7be30a23bf
|
@ -248,16 +248,19 @@ evas_event_feed_mouse_down(Evas *e, int b, Evas_Button_Flags flags, unsigned int
|
||||||
copy = evas_event_list_copy(e->pointer.object.in);
|
copy = evas_event_list_copy(e->pointer.object.in);
|
||||||
EINA_LIST_FOREACH(copy, l, obj)
|
EINA_LIST_FOREACH(copy, l, obj)
|
||||||
{
|
{
|
||||||
if (obj->delete_me) continue;
|
|
||||||
|
|
||||||
ev.canvas.x = e->pointer.x;
|
|
||||||
ev.canvas.y = e->pointer.y;
|
|
||||||
_evas_event_havemap_adjust(obj, &ev.canvas.x, &ev.canvas.y, obj->mouse_grabbed);
|
|
||||||
if (obj->pointer_mode != EVAS_OBJECT_POINTER_MODE_NOGRAB)
|
if (obj->pointer_mode != EVAS_OBJECT_POINTER_MODE_NOGRAB)
|
||||||
{
|
{
|
||||||
obj->mouse_grabbed++;
|
obj->mouse_grabbed++;
|
||||||
e->pointer.mouse_grabbed++;
|
e->pointer.mouse_grabbed++;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
EINA_LIST_FOREACH(copy, l, obj)
|
||||||
|
{
|
||||||
|
if (obj->delete_me) continue;
|
||||||
|
|
||||||
|
ev.canvas.x = e->pointer.x;
|
||||||
|
ev.canvas.y = e->pointer.y;
|
||||||
|
_evas_event_havemap_adjust(obj, &ev.canvas.x, &ev.canvas.y, obj->mouse_grabbed);
|
||||||
|
|
||||||
if (e->events_frozen <= 0)
|
if (e->events_frozen <= 0)
|
||||||
evas_object_event_callback_call(obj, EVAS_CALLBACK_MOUSE_DOWN, &ev);
|
evas_object_event_callback_call(obj, EVAS_CALLBACK_MOUSE_DOWN, &ev);
|
||||||
|
@ -579,8 +582,8 @@ evas_event_feed_mouse_move(Evas *e, int x, int y, unsigned int timestamp, const
|
||||||
ev.cur.canvas.x = e->pointer.x;
|
ev.cur.canvas.x = e->pointer.x;
|
||||||
ev.cur.canvas.y = e->pointer.y;
|
ev.cur.canvas.y = e->pointer.y;
|
||||||
_evas_event_havemap_adjust(obj, &ev.cur.canvas.x, &ev.cur.canvas.y, obj->mouse_grabbed);
|
_evas_event_havemap_adjust(obj, &ev.cur.canvas.x, &ev.cur.canvas.y, obj->mouse_grabbed);
|
||||||
if ((obj->cur.visible) &&
|
if (((evas_object_clippers_is_visible(obj)) ||
|
||||||
(evas_object_clippers_is_visible(obj)) &&
|
(obj->mouse_grabbed)) &&
|
||||||
(!evas_event_passes_through(obj)) &&
|
(!evas_event_passes_through(obj)) &&
|
||||||
(!obj->clip.clipees))
|
(!obj->clip.clipees))
|
||||||
{
|
{
|
||||||
|
@ -698,8 +701,8 @@ evas_event_feed_mouse_move(Evas *e, int x, int y, unsigned int timestamp, const
|
||||||
// FIXME: i don't think we need this
|
// FIXME: i don't think we need this
|
||||||
// evas_object_clip_recalc(obj);
|
// evas_object_clip_recalc(obj);
|
||||||
if (evas_object_is_in_output_rect(obj, x, y, 1, 1) &&
|
if (evas_object_is_in_output_rect(obj, x, y, 1, 1) &&
|
||||||
(obj->cur.visible) &&
|
((evas_object_clippers_is_visible(obj)) ||
|
||||||
(evas_object_clippers_is_visible(obj)) &&
|
(obj->mouse_grabbed)) &&
|
||||||
(eina_list_data_find(ins, obj)) &&
|
(eina_list_data_find(ins, obj)) &&
|
||||||
(!evas_event_passes_through(obj)) &&
|
(!evas_event_passes_through(obj)) &&
|
||||||
(!obj->clip.clipees) &&
|
(!obj->clip.clipees) &&
|
||||||
|
@ -931,6 +934,14 @@ evas_event_feed_multi_down(Evas *e,
|
||||||
|
|
||||||
_evas_walk(e);
|
_evas_walk(e);
|
||||||
copy = evas_event_list_copy(e->pointer.object.in);
|
copy = evas_event_list_copy(e->pointer.object.in);
|
||||||
|
EINA_LIST_FOREACH(copy, l, obj)
|
||||||
|
{
|
||||||
|
if (obj->pointer_mode != EVAS_OBJECT_POINTER_MODE_NOGRAB)
|
||||||
|
{
|
||||||
|
obj->mouse_grabbed++;
|
||||||
|
e->pointer.mouse_grabbed++;
|
||||||
|
}
|
||||||
|
}
|
||||||
EINA_LIST_FOREACH(copy, l, obj)
|
EINA_LIST_FOREACH(copy, l, obj)
|
||||||
{
|
{
|
||||||
ev.canvas.x = x;
|
ev.canvas.x = x;
|
||||||
|
@ -942,11 +953,6 @@ evas_event_feed_multi_down(Evas *e,
|
||||||
ev.canvas.xsub = ev.canvas.x; // fixme - lost precision
|
ev.canvas.xsub = ev.canvas.x; // fixme - lost precision
|
||||||
if (y != ev.canvas.y)
|
if (y != ev.canvas.y)
|
||||||
ev.canvas.ysub = ev.canvas.y; // fixme - lost precision
|
ev.canvas.ysub = ev.canvas.y; // fixme - lost precision
|
||||||
if (obj->pointer_mode != EVAS_OBJECT_POINTER_MODE_NOGRAB)
|
|
||||||
{
|
|
||||||
obj->mouse_grabbed++;
|
|
||||||
e->pointer.mouse_grabbed++;
|
|
||||||
}
|
|
||||||
if (e->events_frozen <= 0)
|
if (e->events_frozen <= 0)
|
||||||
evas_object_event_callback_call(obj, EVAS_CALLBACK_MULTI_DOWN, &ev);
|
evas_object_event_callback_call(obj, EVAS_CALLBACK_MULTI_DOWN, &ev);
|
||||||
if (e->delete_me) break;
|
if (e->delete_me) break;
|
||||||
|
@ -1075,8 +1081,8 @@ evas_event_feed_multi_move(Evas *e,
|
||||||
copy = evas_event_list_copy(e->pointer.object.in);
|
copy = evas_event_list_copy(e->pointer.object.in);
|
||||||
EINA_LIST_FOREACH(copy, l, obj)
|
EINA_LIST_FOREACH(copy, l, obj)
|
||||||
{
|
{
|
||||||
if ((obj->cur.visible) &&
|
if (((evas_object_clippers_is_visible(obj)) ||
|
||||||
(evas_object_clippers_is_visible(obj)) &&
|
(obj->mouse_grabbed)) &&
|
||||||
(!evas_event_passes_through(obj)) &&
|
(!evas_event_passes_through(obj)) &&
|
||||||
(!obj->clip.clipees))
|
(!obj->clip.clipees))
|
||||||
{
|
{
|
||||||
|
@ -1134,8 +1140,8 @@ evas_event_feed_multi_move(Evas *e,
|
||||||
// FIXME: i don't think we need this
|
// FIXME: i don't think we need this
|
||||||
// evas_object_clip_recalc(obj);
|
// evas_object_clip_recalc(obj);
|
||||||
if (evas_object_is_in_output_rect(obj, x, y, 1, 1) &&
|
if (evas_object_is_in_output_rect(obj, x, y, 1, 1) &&
|
||||||
(obj->cur.visible) &&
|
((evas_object_clippers_is_visible(obj)) ||
|
||||||
(evas_object_clippers_is_visible(obj)) &&
|
(obj->mouse_grabbed)) &&
|
||||||
(eina_list_data_find(ins, obj)) &&
|
(eina_list_data_find(ins, obj)) &&
|
||||||
(!evas_event_passes_through(obj)) &&
|
(!evas_event_passes_through(obj)) &&
|
||||||
(!obj->clip.clipees) &&
|
(!obj->clip.clipees) &&
|
||||||
|
|
|
@ -904,19 +904,22 @@ evas_object_hide(Evas_Object *obj)
|
||||||
if ((!obj->smart.smart) ||
|
if ((!obj->smart.smart) ||
|
||||||
((obj->cur.map) && (obj->cur.map->count == 4) && (obj->cur.usemap)))
|
((obj->cur.map) && (obj->cur.map->count == 4) && (obj->cur.usemap)))
|
||||||
{
|
{
|
||||||
if (evas_object_is_in_output_rect(obj,
|
if (!obj->mouse_grabbed)
|
||||||
obj->layer->evas->pointer.x,
|
{
|
||||||
obj->layer->evas->pointer.y, 1, 1))
|
if (evas_object_is_in_output_rect(obj,
|
||||||
evas_event_feed_mouse_move(obj->layer->evas,
|
obj->layer->evas->pointer.x,
|
||||||
obj->layer->evas->pointer.x,
|
obj->layer->evas->pointer.y, 1, 1))
|
||||||
obj->layer->evas->pointer.y,
|
evas_event_feed_mouse_move(obj->layer->evas,
|
||||||
obj->layer->evas->last_timestamp,
|
obj->layer->evas->pointer.x,
|
||||||
NULL);
|
obj->layer->evas->pointer.y,
|
||||||
if (obj->delete_me) return;
|
obj->layer->evas->last_timestamp,
|
||||||
|
NULL);
|
||||||
|
}
|
||||||
/* this is at odds to handling events when an obj is moved out of the mouse
|
/* this is at odds to handling events when an obj is moved out of the mouse
|
||||||
* ore resized out or clipped out. if mouse is grabbed - regardless of
|
* ore resized out or clipped out. if mouse is grabbed - regardless of
|
||||||
* visibility, mouse move events should keep happening and mouse up.
|
* visibility, mouse move events should keep happening and mouse up.
|
||||||
* for better or worse it's at least consistent.
|
* for better or worse it's at least consistent.
|
||||||
|
if (obj->delete_me) return;
|
||||||
if (obj->mouse_grabbed > 0)
|
if (obj->mouse_grabbed > 0)
|
||||||
obj->layer->evas->pointer.mouse_grabbed -= obj->mouse_grabbed;
|
obj->layer->evas->pointer.mouse_grabbed -= obj->mouse_grabbed;
|
||||||
if ((obj->mouse_in) || (obj->mouse_grabbed > 0))
|
if ((obj->mouse_in) || (obj->mouse_grabbed > 0))
|
||||||
|
|
Loading…
Reference in New Issue