summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJean-Philippe Andre <jp.andre@samsung.com>2016-08-17 13:08:03 +0900
committerJean-Philippe Andre <jp.andre@samsung.com>2016-08-17 13:13:23 +0900
commit6d6e41c5c9bf1f19ff3ad14fa4acebb283deaea7 (patch)
treeb4c7a2deb4f8535487219adfcb6ad39670f0e2ce
parentb3dd735be7dade0d7168a9fcb686dc1bc69e5882 (diff)
downloadefl-6d6e41c5c9bf1f19ff3ad14fa4acebb283deaea7.tar.gz
evas: Fix mouse inputs when also listening to multi
Since the new event type is the same for multi and single touch (finger id is the only difference), multi touch listeners would get triggered even for single mouse events. Fixes https://phab.enlightenment.org/T4345 Fixes https://phab.enlightenment.org/T4378 This raises a question though: How do we want to differentiate between single & multi touch events in the eo interfaces?
-rw-r--r--src/lib/evas/canvas/evas_callbacks.c2
-rw-r--r--src/lib/evas/canvas/evas_events_legacy.c12
-rw-r--r--src/lib/evas/include/evas_private.h2
3 files changed, 13 insertions, 3 deletions
diff --git a/src/lib/evas/canvas/evas_callbacks.c b/src/lib/evas/canvas/evas_callbacks.c
index ae9c9bbcb7..7959079184 100644
--- a/src/lib/evas/canvas/evas_callbacks.c
+++ b/src/lib/evas/canvas/evas_callbacks.c
@@ -131,7 +131,7 @@ _eo_evas_object_cb(void *data, const Eo_Event *event)
switch (info->efl_event_info)
{
case EFL_EVENT_TYPE_POINTER:
- event_info = efl_event_pointer_legacy_info_fill(efl_event_info, &event_flags);
+ event_info = efl_event_pointer_legacy_info_fill(efl_event_info, info->type, &event_flags);
break;
case EFL_EVENT_TYPE_KEY:
diff --git a/src/lib/evas/canvas/evas_events_legacy.c b/src/lib/evas/canvas/evas_events_legacy.c
index 0d2cd24ca8..ff9c01b178 100644
--- a/src/lib/evas/canvas/evas_events_legacy.c
+++ b/src/lib/evas/canvas/evas_events_legacy.c
@@ -210,16 +210,18 @@ efl_event_pointer_legacy_info_set(Efl_Event_Pointer *evt, const void *event_info
}
void *
-efl_event_pointer_legacy_info_fill(Efl_Event_Key *evt, Evas_Event_Flags **pflags)
+efl_event_pointer_legacy_info_fill(Efl_Event_Key *evt, Evas_Callback_Type type, Evas_Event_Flags **pflags)
{
Efl_Event_Pointer_Data *ev = efl_data_scope_get(evt, EFL_EVENT_POINTER_CLASS);
if (!ev) return NULL;
#define COORD_DUP(e) do { (e)->output.x = (e)->canvas.x; (e)->output.y = (e)->canvas.y; } while (0)
+#define TYPE_CHK(typ) do { if (type != EVAS_CALLBACK_ ## typ) return NULL; } while (0)
switch (ev->action)
{
case EFL_POINTER_ACTION_IN:
+ TYPE_CHK(MOUSE_IN);
{
Evas_Event_Mouse_In *e = ev->legacy ? ev->legacy : calloc(1, sizeof(*e));
e->canvas.x = ev->cur.x;
@@ -238,6 +240,7 @@ efl_event_pointer_legacy_info_fill(Efl_Event_Key *evt, Evas_Event_Flags **pflags
}
case EFL_POINTER_ACTION_OUT:
+ TYPE_CHK(MOUSE_OUT);
{
Evas_Event_Mouse_Out *e = ev->legacy ? ev->legacy : calloc(1, sizeof(*e));
e->canvas.x = ev->cur.x;
@@ -258,6 +261,7 @@ efl_event_pointer_legacy_info_fill(Efl_Event_Key *evt, Evas_Event_Flags **pflags
case EFL_POINTER_ACTION_DOWN:
if (ev->finger == 0)
{
+ TYPE_CHK(MOUSE_DOWN);
Evas_Event_Mouse_Down *e = ev->legacy ? ev->legacy : calloc(1, sizeof(*e));
e->button = ev->button;
e->canvas.x = ev->cur.x;
@@ -277,6 +281,7 @@ efl_event_pointer_legacy_info_fill(Efl_Event_Key *evt, Evas_Event_Flags **pflags
}
else
{
+ TYPE_CHK(MULTI_DOWN);
Evas_Event_Multi_Down *e = ev->legacy ? ev->legacy : calloc(1, sizeof(*e));
e->device = ev->finger;
e->radius = ev->radius;
@@ -304,6 +309,7 @@ efl_event_pointer_legacy_info_fill(Efl_Event_Key *evt, Evas_Event_Flags **pflags
case EFL_POINTER_ACTION_UP:
if (ev->finger == 0)
{
+ TYPE_CHK(MOUSE_UP);
Evas_Event_Mouse_Up *e = ev->legacy ? ev->legacy : calloc(1, sizeof(*e));
e->button = ev->button;
e->canvas.x = ev->cur.x;
@@ -323,6 +329,7 @@ efl_event_pointer_legacy_info_fill(Efl_Event_Key *evt, Evas_Event_Flags **pflags
}
else
{
+ TYPE_CHK(MULTI_UP);
Evas_Event_Multi_Up *e = ev->legacy ? ev->legacy : calloc(1, sizeof(*e));
e->device = ev->finger;
e->radius = ev->radius;
@@ -350,6 +357,7 @@ efl_event_pointer_legacy_info_fill(Efl_Event_Key *evt, Evas_Event_Flags **pflags
case EFL_POINTER_ACTION_MOVE:
if (ev->finger == 0)
{
+ TYPE_CHK(MOUSE_MOVE);
Evas_Event_Mouse_Move *e = ev->legacy ? ev->legacy : calloc(1, sizeof(*e));
e->buttons = ev->pressed_buttons;
e->cur.canvas.x = ev->cur.x;
@@ -371,6 +379,7 @@ efl_event_pointer_legacy_info_fill(Efl_Event_Key *evt, Evas_Event_Flags **pflags
}
else
{
+ TYPE_CHK(MULTI_MOVE);
Evas_Event_Multi_Move *e = ev->legacy ? ev->legacy : calloc(1, sizeof(*e));
e->device = ev->finger;
e->radius = ev->radius;
@@ -396,6 +405,7 @@ efl_event_pointer_legacy_info_fill(Efl_Event_Key *evt, Evas_Event_Flags **pflags
case EFL_POINTER_ACTION_WHEEL:
{
+ TYPE_CHK(MOUSE_WHEEL);
Evas_Event_Mouse_Wheel *e = ev->legacy ? ev->legacy : calloc(1, sizeof(*e));
e->direction = (ev->wheel.dir == EFL_ORIENT_HORIZONTAL) ? 1 : 0;
e->z = ev->wheel.z;
diff --git a/src/lib/evas/include/evas_private.h b/src/lib/evas/include/evas_private.h
index d7b4891b57..d63e7d4820 100644
--- a/src/lib/evas/include/evas_private.h
+++ b/src/lib/evas/include/evas_private.h
@@ -1957,7 +1957,7 @@ Evas_Device *_evas_device_top_get(const Evas *e);
Eina_Bool efl_event_pointer_legacy_info_set(Efl_Event_Pointer *evt, const void *event_info, Evas_Callback_Type type);
Eina_Bool efl_event_key_legacy_info_set(Efl_Event_Key *evt, const void *event_info, Evas_Callback_Type type);
Eina_Bool efl_event_hold_legacy_info_set(Efl_Event_Hold *evt, const void *event_info, Evas_Callback_Type type);
-void *efl_event_pointer_legacy_info_fill(Efl_Event_Key *evt, Evas_Event_Flags **pflags);
+void *efl_event_pointer_legacy_info_fill(Efl_Event_Key *evt, Evas_Callback_Type type, Evas_Event_Flags **pflags);
void *efl_event_key_legacy_info_fill(Efl_Event_Key *evt, Evas_Event_Flags **pflags);
void *efl_event_hold_legacy_info_fill(Efl_Event_Hold *evt, Evas_Event_Flags **pflags);