copy = evas_event_list_copy(e->pointer.object.in);
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)
{
obj->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)
evas_object_event_callback_call(obj, EVAS_CALLBACK_MOUSE_DOWN, &ev);
ev.cur.canvas.x = e->pointer.x;
ev.cur.canvas.y = e->pointer.y;
_evas_event_havemap_adjust(obj, &ev.cur.canvas.x, &ev.cur.canvas.y, obj->mouse_grabbed);
- if ((obj->cur.visible) &&
- (evas_object_clippers_is_visible(obj)) &&
+ if (((evas_object_clippers_is_visible(obj)) ||
+ (obj->mouse_grabbed)) &&
(!evas_event_passes_through(obj)) &&
(!obj->clip.clipees))
{
// FIXME: i don't think we need this
// evas_object_clip_recalc(obj);
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)) &&
(!evas_event_passes_through(obj)) &&
(!obj->clip.clipees) &&
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)
+ {
ev.canvas.x = x;
ev.canvas.y = y;
ev.canvas.xsub = fx;
ev.canvas.xsub = ev.canvas.x; // fixme - lost precision
if (y != ev.canvas.y)
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)
evas_object_event_callback_call(obj, EVAS_CALLBACK_MULTI_DOWN, &ev);
if (e->delete_me) break;
copy = evas_event_list_copy(e->pointer.object.in);
EINA_LIST_FOREACH(copy, l, obj)
{
- if ((obj->cur.visible) &&
- (evas_object_clippers_is_visible(obj)) &&
+ if (((evas_object_clippers_is_visible(obj)) ||
+ (obj->mouse_grabbed)) &&
(!evas_event_passes_through(obj)) &&
(!obj->clip.clipees))
{
// FIXME: i don't think we need this
// evas_object_clip_recalc(obj);
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)) &&
(!evas_event_passes_through(obj)) &&
(!obj->clip.clipees) &&
if ((!obj->smart.smart) ||
((obj->cur.map) && (obj->cur.map->count == 4) && (obj->cur.usemap)))
{
- if (evas_object_is_in_output_rect(obj,
- obj->layer->evas->pointer.x,
- obj->layer->evas->pointer.y, 1, 1))
- evas_event_feed_mouse_move(obj->layer->evas,
- obj->layer->evas->pointer.x,
- obj->layer->evas->pointer.y,
- obj->layer->evas->last_timestamp,
- NULL);
- if (obj->delete_me) return;
+ if (!obj->mouse_grabbed)
+ {
+ if (evas_object_is_in_output_rect(obj,
+ obj->layer->evas->pointer.x,
+ obj->layer->evas->pointer.y, 1, 1))
+ evas_event_feed_mouse_move(obj->layer->evas,
+ obj->layer->evas->pointer.x,
+ obj->layer->evas->pointer.y,
+ obj->layer->evas->last_timestamp,
+ NULL);
+ }
/* 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
* visibility, mouse move events should keep happening and mouse up.
* for better or worse it's at least consistent.
+ if (obj->delete_me) return;
if (obj->mouse_grabbed > 0)
obj->layer->evas->pointer.mouse_grabbed -= obj->mouse_grabbed;
if ((obj->mouse_in) || (obj->mouse_grabbed > 0))