jpeg pushed a commit to branch master.

http://git.enlightenment.org/core/efl.git/commit/?id=2edf50cb10f6ce5e6fc8b04492413c41678e7d85

commit 2edf50cb10f6ce5e6fc8b04492413c41678e7d85
Author: Jean-Philippe Andre <jp.an...@samsung.com>
Date:   Mon Aug 29 17:04:31 2016 +0900

    evas events: Properly signal to clients which values are set
    
    Since pointer events are all the same thing, users may not know
    what values are valid for what kind of event. Eventually we
    want to expose more information, but we also need a way to inform
    the caller about the validity of the values we get.
---
 src/lib/efl/interfaces/efl_common_internal.h |  6 +-
 src/lib/evas/canvas/efl_input_pointer.c      | 11 ++++
 src/lib/evas/canvas/evas_events.c            | 91 +++++++++++++++++++++++++++-
 3 files changed, 105 insertions(+), 3 deletions(-)

diff --git a/src/lib/efl/interfaces/efl_common_internal.h 
b/src/lib/efl/interfaces/efl_common_internal.h
index 07d6236..d6c51de 100644
--- a/src/lib/efl/interfaces/efl_common_internal.h
+++ b/src/lib/efl/interfaces/efl_common_internal.h
@@ -107,13 +107,15 @@ struct _Efl_Input_Hold_Data
 static inline Eina_Bool
 _efl_input_value_has(const Efl_Input_Pointer_Data *pd, Efl_Input_Value key)
 {
-   return (pd->value_flags & (1 << (int) key)) != 0;
+   return (pd->value_flags & (1u << (int) key)) != 0;
 }
 
 static inline void
 _efl_input_value_mark(Efl_Input_Pointer_Data *pd, Efl_Input_Value key)
 {
-   pd->value_flags |= (1 << (int) key);
+   pd->value_flags |= (1u << (int) key);
 }
 
+#define _efl_input_value_mask(key) (1u << (int) key)
+
 #endif
diff --git a/src/lib/evas/canvas/efl_input_pointer.c 
b/src/lib/evas/canvas/efl_input_pointer.c
index dd055a1..cd06f7d 100644
--- a/src/lib/evas/canvas/efl_input_pointer.c
+++ b/src/lib/evas/canvas/efl_input_pointer.c
@@ -147,6 +147,7 @@ _efl_input_pointer_action_get(Eo *obj EINA_UNUSED, 
Efl_Input_Pointer_Data *pd)
 EOLIAN static void
 _efl_input_pointer_button_set(Eo *obj EINA_UNUSED, Efl_Input_Pointer_Data *pd, 
int but)
 {
+   _efl_input_value_mark(pd, EFL_INPUT_VALUE_BUTTON);
    pd->button = but;
 }
 
@@ -161,6 +162,7 @@ _efl_input_pointer_button_pressed_set(Eo *obj EINA_UNUSED, 
Efl_Input_Pointer_Dat
 {
    if (button < 0) return;
    if (button > 31) return;
+   _efl_input_value_mark(pd, EFL_INPUT_VALUE_BUTTONS_PRESSED);
    if (pressed)
      pd->button_flags |= (1 << button);
    else
@@ -178,6 +180,8 @@ _efl_input_pointer_button_pressed_get(Eo *obj EINA_UNUSED, 
Efl_Input_Pointer_Dat
 EOLIAN static void
 _efl_input_pointer_position_set(Eo *obj EINA_UNUSED, Efl_Input_Pointer_Data 
*pd, int x, int y)
 {
+   _efl_input_value_mark(pd, EFL_INPUT_VALUE_X);
+   _efl_input_value_mark(pd, EFL_INPUT_VALUE_Y);
    pd->cur.x = (double) x;
    pd->cur.y = (double) y;
 }
@@ -192,6 +196,8 @@ _efl_input_pointer_position_get(Eo *obj EINA_UNUSED, 
Efl_Input_Pointer_Data *pd,
 EOLIAN static void
 _efl_input_pointer_previous_position_set(Eo *obj EINA_UNUSED, 
Efl_Input_Pointer_Data *pd, int x, int y)
 {
+   _efl_input_value_mark(pd, EFL_INPUT_VALUE_PREVIOUS_X);
+   _efl_input_value_mark(pd, EFL_INPUT_VALUE_PREVIOUS_Y);
    pd->prev.x = (double) x;
    pd->prev.y = (double) y;
 }
@@ -264,6 +270,7 @@ _efl_input_pointer_efl_input_event_event_flags_get(Eo *obj 
EINA_UNUSED, Efl_Inpu
 EOLIAN static void
 _efl_input_pointer_efl_input_event_timestamp_set(Eo *obj EINA_UNUSED, 
Efl_Input_Pointer_Data *pd, double ms)
 {
+   _efl_input_value_mark(pd, EFL_INPUT_VALUE_TIMESTAMP);
    pd->timestamp = (unsigned int) ms;
 }
 
@@ -276,6 +283,7 @@ _efl_input_pointer_efl_input_event_timestamp_get(Eo *obj 
EINA_UNUSED, Efl_Input_
 EOLIAN static void
 _efl_input_pointer_wheel_direction_set(Eo *obj EINA_UNUSED, 
Efl_Input_Pointer_Data *pd, Efl_Orient dir)
 {
+   _efl_input_value_mark(pd, EFL_INPUT_VALUE_WHEEL_DIRECTION);
    pd->wheel.dir = dir;
 }
 
@@ -288,6 +296,7 @@ _efl_input_pointer_wheel_direction_get(Eo *obj EINA_UNUSED, 
Efl_Input_Pointer_Da
 EOLIAN static void
 _efl_input_pointer_wheel_delta_set(Eo *obj EINA_UNUSED, Efl_Input_Pointer_Data 
*pd, int dist)
 {
+   _efl_input_value_mark(pd, EFL_INPUT_VALUE_WHEEL_DELTA);
    pd->wheel.z = dist;
 }
 
@@ -306,6 +315,7 @@ _efl_input_pointer_tool_get(Eo *obj EINA_UNUSED, 
Efl_Input_Pointer_Data *pd)
 EOLIAN static void
 _efl_input_pointer_tool_set(Eo *obj EINA_UNUSED, Efl_Input_Pointer_Data *pd, 
int id)
 {
+   _efl_input_value_mark(pd, EFL_INPUT_VALUE_TOOL);
    pd->tool = id;
 }
 
@@ -465,6 +475,7 @@ _efl_input_pointer_value_set(Eo *obj EINA_UNUSED, 
Efl_Input_Pointer_Data *pd, Ef
         return EINA_FALSE;
      }
 
+   _efl_input_value_mark(pd, key);
    return EINA_TRUE;
 }
 
diff --git a/src/lib/evas/canvas/evas_events.c 
b/src/lib/evas/canvas/evas_events.c
index 2075eb2..b390c60 100644
--- a/src/lib/evas/canvas/evas_events.c
+++ b/src/lib/evas/canvas/evas_events.c
@@ -1209,6 +1209,13 @@ _canvas_event_feed_mouse_down_internal(Evas_Public_Data 
*e, Efl_Input_Pointer_Da
    Evas *eo_e;
    int addgrab = 0;
 
+   static const int value_flags =
+         _efl_input_value_mask(EFL_INPUT_VALUE_TIMESTAMP) |
+         _efl_input_value_mask(EFL_INPUT_VALUE_X) |
+         _efl_input_value_mask(EFL_INPUT_VALUE_Y) |
+         _efl_input_value_mask(EFL_INPUT_VALUE_TOOL) |
+         _efl_input_value_mask(EFL_INPUT_VALUE_BUTTON);
+
    if (!e || !ev) return;
 
    b = ev->button;
@@ -1232,6 +1239,8 @@ _canvas_event_feed_mouse_down_internal(Evas_Public_Data 
*e, Efl_Input_Pointer_Da
    ev->locks = &(e->locks);
    ev->event_flags = e->default_event_flags;
    ev->tool = 0;
+   ev->action = EFL_POINTER_ACTION_DOWN;
+   ev->value_flags |= value_flags;
    if (ev->device) efl_ref(ev->device);
 
    _evas_walk(e);
@@ -1408,6 +1417,13 @@ _canvas_event_feed_mouse_up_internal(Evas_Public_Data 
*e, Efl_Input_Pointer_Data
    int event_id, b;
    Evas *eo_e;
 
+   static const int value_flags =
+         _efl_input_value_mask(EFL_INPUT_VALUE_TIMESTAMP) |
+         _efl_input_value_mask(EFL_INPUT_VALUE_X) |
+         _efl_input_value_mask(EFL_INPUT_VALUE_Y) |
+         _efl_input_value_mask(EFL_INPUT_VALUE_TOOL) |
+         _efl_input_value_mask(EFL_INPUT_VALUE_BUTTON);
+
    if (!e || !ev) return;
 
    b = ev->button;
@@ -1432,6 +1448,7 @@ _canvas_event_feed_mouse_up_internal(Evas_Public_Data *e, 
Efl_Input_Pointer_Data
    ev->locks = &(e->locks);
    ev->event_flags = e->default_event_flags;
    ev->tool = 0;
+   ev->value_flags |= value_flags;
    if (ev->device) efl_ref(ev->device);
 
    _evas_walk(e);
@@ -1552,6 +1569,12 @@ 
_canvas_event_feed_mouse_cancel_internal(Evas_Public_Data *e, Efl_Input_Pointer_
    Evas *eo_e;
    int i;
 
+   static const int value_flags =
+         _efl_input_value_mask(EFL_INPUT_VALUE_TIMESTAMP) |
+         _efl_input_value_mask(EFL_INPUT_VALUE_X) |
+         _efl_input_value_mask(EFL_INPUT_VALUE_Y) |
+         _efl_input_value_mask(EFL_INPUT_VALUE_TOOL);
+
    if (!e || !ev) return;
    if (e->is_frozen) return;
 
@@ -1568,13 +1591,15 @@ 
_canvas_event_feed_mouse_cancel_internal(Evas_Public_Data *e, Efl_Input_Pointer_
           _canvas_event_feed_mouse_updown_legacy(eo_e, i + 1, 0, 
ev->timestamp, ev->data, 0);
      }
 
+   ev->action = EFL_POINTER_ACTION_CANCEL;
+   ev->value_flags |= value_flags;
    ev->event_flags = flags;
    EINA_LIST_FOREACH_SAFE(e->touch_points, l, ll, point)
      {
         if ((point->state == EVAS_TOUCH_POINT_DOWN) ||
             (point->state == EVAS_TOUCH_POINT_MOVE))
           {
-             ev->button = point->id;
+             ev->tool = point->id;
              ev->cur.x = point->x;
              ev->cur.y = point->y;
              _canvas_event_feed_multi_up_internal(e, ev);
@@ -1616,6 +1641,13 @@ _canvas_event_feed_mouse_wheel_internal(Eo *eo_e, 
Efl_Input_Pointer_Data *pe)
    Evas_Object *eo_obj;
    int event_id = 0;
 
+   static const int value_flags =
+         _efl_input_value_mask(EFL_INPUT_VALUE_TIMESTAMP) |
+         _efl_input_value_mask(EFL_INPUT_VALUE_X) |
+         _efl_input_value_mask(EFL_INPUT_VALUE_Y) |
+         _efl_input_value_mask(EFL_INPUT_VALUE_WHEEL_DELTA) |
+         _efl_input_value_mask(EFL_INPUT_VALUE_WHEEL_DIRECTION);
+
    if (e->is_frozen) return;
    e->last_timestamp = pe->timestamp;
 
@@ -1633,6 +1665,7 @@ _canvas_event_feed_mouse_wheel_internal(Eo *eo_e, 
Efl_Input_Pointer_Data *pe)
    ev->event_flags = e->default_event_flags;
    ev->device = efl_ref(_evas_device_top_get(eo_e));
    ev->action = EFL_POINTER_ACTION_WHEEL;
+   ev->value_flags |= value_flags;
 
    _evas_walk(e);
    copy = evas_event_list_copy(e->pointer.object.in);
@@ -1691,6 +1724,18 @@ _canvas_event_feed_mouse_move_internal(Evas_Public_Data 
*e, Efl_Input_Pointer_Da
    int event_id;
    int x, y, px, py;
 
+   // inform which values are valid
+   static const int value_flags =
+         _efl_input_value_mask(EFL_INPUT_VALUE_TIMESTAMP) |
+         _efl_input_value_mask(EFL_INPUT_VALUE_X) |
+         _efl_input_value_mask(EFL_INPUT_VALUE_Y) |
+         _efl_input_value_mask(EFL_INPUT_VALUE_PREVIOUS_X) |
+         _efl_input_value_mask(EFL_INPUT_VALUE_PREVIOUS_Y) |
+         _efl_input_value_mask(EFL_INPUT_VALUE_DX) |
+         _efl_input_value_mask(EFL_INPUT_VALUE_DY) |
+         _efl_input_value_mask(EFL_INPUT_VALUE_BUTTONS_PRESSED) |
+         _efl_input_value_mask(EFL_INPUT_VALUE_TOOL);
+
    if (!e || !ev) return;
    if (e->is_frozen) return;
 
@@ -1714,6 +1759,7 @@ _canvas_event_feed_mouse_move_internal(Evas_Public_Data 
*e, Efl_Input_Pointer_Da
    ev->event_flags = e->default_event_flags;
    ev->pressed_buttons = e->pointer.button;
    ev->tool = 0;
+   ev->value_flags |= value_flags;
    if (ev->device) efl_ref(ev->device);
 
    _evas_walk(e);
@@ -2073,6 +2119,13 @@ _canvas_event_feed_mouse_in_internal(Evas *eo_e, 
Efl_Input_Pointer_Data *ev)
    Evas_Object *eo_obj;
    int event_id;
 
+   static const int value_flags =
+         _efl_input_value_mask(EFL_INPUT_VALUE_TIMESTAMP) |
+         _efl_input_value_mask(EFL_INPUT_VALUE_X) |
+         _efl_input_value_mask(EFL_INPUT_VALUE_Y) |
+         _efl_input_value_mask(EFL_INPUT_VALUE_BUTTONS_PRESSED) |
+         _efl_input_value_mask(EFL_INPUT_VALUE_TOOL);
+
    if (!e || !ev) return;
 
    e->pointer.inside = 1;
@@ -2089,6 +2142,7 @@ _canvas_event_feed_mouse_in_internal(Evas *eo_e, 
Efl_Input_Pointer_Data *ev)
    ev->modifiers = &(e->modifiers);
    ev->locks = &(e->locks);
    ev->event_flags = e->default_event_flags;
+   ev->value_flags |= value_flags;
    if (ev->device) efl_ref(ev->device);
 
    event_id = _evas_object_event_new();
@@ -2133,6 +2187,13 @@ _canvas_event_feed_mouse_out_internal(Evas *eo_e, 
Efl_Input_Pointer_Data *ev)
    Evas_Object *eo_obj;
    int event_id;
 
+   static const int value_flags =
+         _efl_input_value_mask(EFL_INPUT_VALUE_TIMESTAMP) |
+         _efl_input_value_mask(EFL_INPUT_VALUE_X) |
+         _efl_input_value_mask(EFL_INPUT_VALUE_Y) |
+         _efl_input_value_mask(EFL_INPUT_VALUE_BUTTONS_PRESSED) |
+         _efl_input_value_mask(EFL_INPUT_VALUE_TOOL);
+
    if (!e || !ev) return;
    e->pointer.inside = 0;
 
@@ -2149,6 +2210,7 @@ _canvas_event_feed_mouse_out_internal(Evas *eo_e, 
Efl_Input_Pointer_Data *ev)
    ev->modifiers = &(e->modifiers);
    ev->locks = &(e->locks);
    ev->event_flags = e->default_event_flags;
+   ev->value_flags |= value_flags;
    if (ev->device) efl_ref(ev->device);
 
    _evas_walk(e);
@@ -2231,6 +2293,13 @@ _canvas_event_feed_multi_down_internal(Evas_Public_Data 
*e, Efl_Input_Pointer_Da
    int event_id;
    int addgrab = 0;
 
+   static const int value_flags =
+         _efl_input_value_mask(EFL_INPUT_VALUE_TIMESTAMP) |
+         _efl_input_value_mask(EFL_INPUT_VALUE_X) |
+         _efl_input_value_mask(EFL_INPUT_VALUE_Y) |
+         _efl_input_value_mask(EFL_INPUT_VALUE_TOOL) |
+         _efl_input_value_mask(EFL_INPUT_VALUE_BUTTON);
+
    if (!e || !ev) return;
 
    eo_e = e->evas;
@@ -2248,6 +2317,7 @@ _canvas_event_feed_multi_down_internal(Evas_Public_Data 
*e, Efl_Input_Pointer_Da
    ev->modifiers = &(e->modifiers);
    ev->locks = &(e->locks);
    ev->event_flags = e->default_event_flags;
+   ev->value_flags |= value_flags;
    if (ev->device) efl_ref(ev->device);
 
    _evas_walk(e);
@@ -2298,6 +2368,12 @@ _canvas_event_feed_multi_up_internal(Evas_Public_Data 
*e, Efl_Input_Pointer_Data
    Evas *eo_e;
    int event_id;
 
+   static const int value_flags =
+         _efl_input_value_mask(EFL_INPUT_VALUE_TIMESTAMP) |
+         _efl_input_value_mask(EFL_INPUT_VALUE_X) |
+         _efl_input_value_mask(EFL_INPUT_VALUE_Y) |
+         _efl_input_value_mask(EFL_INPUT_VALUE_TOOL);
+
    if (!e || !ev) return;
 
    eo_e = e->evas;
@@ -2316,6 +2392,7 @@ _canvas_event_feed_multi_up_internal(Evas_Public_Data *e, 
Efl_Input_Pointer_Data
    ev->modifiers = &(e->modifiers);
    ev->locks = &(e->locks);
    ev->event_flags = e->default_event_flags;
+   ev->value_flags |= value_flags;
    if (ev->device) efl_ref(ev->device);
 
    _evas_walk(e);
@@ -2453,6 +2530,13 @@ _canvas_event_feed_multi_move_internal(Evas_Public_Data 
*e, Efl_Input_Pointer_Da
    Evas *eo_e;
    int event_id;
 
+   /* FIXME: Add previous x,y information (from evas touch point list) */
+   static const int value_flags =
+         _efl_input_value_mask(EFL_INPUT_VALUE_TIMESTAMP) |
+         _efl_input_value_mask(EFL_INPUT_VALUE_X) |
+         _efl_input_value_mask(EFL_INPUT_VALUE_Y) |
+         _efl_input_value_mask(EFL_INPUT_VALUE_TOOL);
+
    if (!e || !ev) return;
 
    eo_e = e->evas;
@@ -2468,6 +2552,7 @@ _canvas_event_feed_multi_move_internal(Evas_Public_Data 
*e, Efl_Input_Pointer_Da
    ev->locks = &(e->locks);
    ev->event_flags = e->default_event_flags;
    ev->action = EFL_POINTER_ACTION_MOVE;
+   ev->value_flags |= value_flags;
    if (ev->device) efl_ref(ev->device);
 
    point = ev->cur;
@@ -2886,6 +2971,9 @@ _canvas_event_feed_axis_update_internal(Evas_Public_Data 
*e, Efl_Input_Pointer_D
    int event_id = 0;
    Evas *eo_e;
 
+   static const int value_flags =
+         _efl_input_value_mask(EFL_INPUT_VALUE_TIMESTAMP);
+
    if (!e || !ev) return;
    if (e->is_frozen) return;
 
@@ -2893,6 +2981,7 @@ _canvas_event_feed_axis_update_internal(Evas_Public_Data 
*e, Efl_Input_Pointer_D
    e->last_timestamp = ev->timestamp;
 
    ev->action = EFL_POINTER_ACTION_AXIS;
+   ev->value_flags |= value_flags;
    event_id = _evas_object_event_new();
    evt = ev->eo;
 

-- 


Reply via email to