Eina_List *l, *copy;
Evas_Event_Mouse_Down ev;
Evas_Object *obj;
-
+ int addgrab = 0;
+
MAGIC_CHECK(e, Evas, MAGIC_EVAS);
return;
MAGIC_CHECK_END();
if ((b < 1) || (b > 32)) return;
e->pointer.button |= (1 << (b - 1));
+ e->pointer.downs++;
if (e->events_frozen > 0) return;
e->last_timestamp = timestamp;
e->pointer.object.in = eina_list_free(e->pointer.object.in);
/* and set up the new one */
e->pointer.object.in = ins;
+ /* adjust grabbed count by the nuymber of currently held down
+ * fingers/buttons */
+ if (e->pointer.downs > 1) addgrab = e->pointer.downs - 1;
}
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++;
+ obj->mouse_grabbed += addgrab + 1;
+ e->pointer.mouse_grabbed += addgrab + 1;
}
}
EINA_LIST_FOREACH(copy, l, obj)
if ((b < 1) || (b > 32)) return;
e->pointer.button &= ~(1 << (b - 1));
+ e->pointer.downs--;
if (e->events_frozen > 0) return;
e->last_timestamp = timestamp;
Eina_List *l, *copy;
Evas_Event_Multi_Down ev;
Evas_Object *obj;
+ int addgrab = 0;
MAGIC_CHECK(e, Evas, MAGIC_EVAS);
return;
MAGIC_CHECK_END();
+ e->pointer.downs++;
if (e->events_frozen > 0) return;
e->last_timestamp = timestamp;
_evas_walk(e);
/* append new touch point to the touch point list */
_evas_touch_point_append(e, d, x, y);
+ if (e->pointer.mouse_grabbed == 0)
+ {
+ if (e->pointer.downs > 1) addgrab = e->pointer.downs - 1;
+ }
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++;
+ obj->mouse_grabbed += addgrab + 1;
+ e->pointer.mouse_grabbed += addgrab + 1;
}
}
EINA_LIST_FOREACH(copy, l, obj)
return;
MAGIC_CHECK_END();
+ e->pointer.downs--;
if (e->events_frozen > 0) return;
e->last_timestamp = timestamp;