evas: Call legacy events before new key/pointer eo events
authorJean-Philippe Andre <jp.andre@samsung.com>
Wed, 10 Aug 2016 07:29:17 +0000 (16:29 +0900)
committerJean-Philippe Andre <jp.andre@samsung.com>
Wed, 10 Aug 2016 07:56:06 +0000 (16:56 +0900)
This affects pointer & key events.

Here's the scenario: in Enventor, an elm_button object
grabs the up & down keys for the autocompletion feature.
But the entry will also listen to up & down to move the
cursor. Moreover, the scroller listens to up & down arrow
keys to scroll around.

So, when calling the new eo event first, the scroller
or the entry would catch it and do some action. In
Enventor, this triggered a hide on the magic anchor
object. Bad, bad.

I fear something will be wrong with this order as well.
Both events (legacy & eo) should be called simultaneously,
following the order & priorities that were set.

This being said, in real life most of EFL internals will
move to the new eo events (right now elm relies on the
new events, but edje doesn't, yet), so any app grabbing a
key probably wants to handle the event before elm. Same
for an app using focus manually.

Fixes T4310

src/lib/evas/canvas/evas_callbacks.c

index 00a5e62..14e303f 100644 (file)
@@ -262,6 +262,9 @@ evas_object_event_callback_call(Evas_Object *eo_obj, Evas_Object_Protected_Data
          break;
      }
 
+   /* legacy callbacks - relying on Efl.Canvas.Object events */
+   eo_event_callback_call(eo_obj, _legacy_evas_callback_table(type), event_info);
+
    /* new input events */
    if (eo_event_desc)
      {
@@ -290,12 +293,8 @@ evas_object_event_callback_call(Evas_Object *eo_obj, Evas_Object_Protected_Data
 
         if (pevflags) efl_event_flags_set(eo_event_info, *pevflags);
         eo_event_callback_call(eo_obj, eo_event_desc, eo_event_info);
-        if (pevflags) *pevflags = efl_event_flags_get(eo_event_info);
      }
 
-   /* legacy callbacks - relying on Efl.Canvas.Object events */
-   eo_event_callback_call(eo_obj, _legacy_evas_callback_table(type), event_info);
-
    if (type == EVAS_CALLBACK_MOUSE_DOWN)
      {
         Evas_Event_Mouse_Down *ev = event_info;