From bcb251e6abc18843e60debaef995badf02e14cc0 Mon Sep 17 00:00:00 2001 From: Jean-Philippe Andre Date: Tue, 13 Dec 2016 13:38:16 +0900 Subject: [PATCH] evas: Make evas object loop users This makes efl_loop_get() work on evas objects, returning the main loop as expected. Also make the loop a property of the Loop_User class (shouldn't it be called Efl.Loop.User instead?) --- src/lib/ecore/efl_loop_user.eo | 11 ++++++++--- src/lib/evas/canvas/efl_canvas_object.eo | 3 ++- src/lib/evas/canvas/evas_canvas.eo | 4 +++- src/lib/evas/canvas/evas_main.c | 6 ++++++ src/lib/evas/canvas/evas_object_main.c | 9 +++++++++ 5 files changed, 28 insertions(+), 5 deletions(-) diff --git a/src/lib/ecore/efl_loop_user.eo b/src/lib/ecore/efl_loop_user.eo index f126c57cef..679bfc428c 100644 --- a/src/lib/ecore/efl_loop_user.eo +++ b/src/lib/ecore/efl_loop_user.eo @@ -5,9 +5,14 @@ class Efl.Loop_User (Efl.Object) only allowing parent that provide such interface or NULL.]] eo_prefix: efl_loop; methods { - loop_get { - [[Get loop]] - return: Efl.Loop; [[Efl loop]] + @property loop { + [[The loop to which this object belongs to.]] + get { + [[Get a handle to the loop.]] + } + values { + loop: Efl.Loop; [[Efl loop]] + } } } implements { diff --git a/src/lib/evas/canvas/efl_canvas_object.eo b/src/lib/evas/canvas/efl_canvas_object.eo index 24a706bd04..f0d8e672d2 100644 --- a/src/lib/evas/canvas/efl_canvas_object.eo +++ b/src/lib/evas/canvas/efl_canvas_object.eo @@ -3,7 +3,7 @@ import efl_text_types; abstract Efl.Canvas.Object (Efl.Object, Efl.Gfx, Efl.Gfx.Stack, Efl.Animator, Efl.Input.Interface, Efl.Gfx.Size.Hint, - Efl.Gfx.Map) + Efl.Gfx.Map, Efl.Loop_User) { [[Efl canvas object abstract class]] legacy_prefix: evas_object; @@ -670,5 +670,6 @@ abstract Efl.Canvas.Object (Efl.Object, Efl.Gfx, Efl.Gfx.Stack, Efl.Animator, Efl.Gfx.Map.map_enable.get; Efl.Input.Interface.seat_event_filter.set; Efl.Input.Interface.seat_event_filter.get; + Efl.Loop_User.loop.get; } } diff --git a/src/lib/evas/canvas/evas_canvas.eo b/src/lib/evas/canvas/evas_canvas.eo index 9a2d62b934..e5de53e876 100644 --- a/src/lib/evas/canvas/evas_canvas.eo +++ b/src/lib/evas/canvas/evas_canvas.eo @@ -1,7 +1,8 @@ import evas_types; import efl_input_types; -class Evas.Canvas (Efl.Object, Efl.Canvas, Efl.Animator, Efl.Input.Interface) +class Evas.Canvas (Efl.Object, Efl.Canvas, Efl.Animator, Efl.Input.Interface, + Efl.Loop_User) { [[Evas canvas class]] legacy_prefix: evas; @@ -1317,6 +1318,7 @@ class Evas.Canvas (Efl.Object, Efl.Canvas, Efl.Animator, Efl.Input.Interface) Efl.Object.event_thaw; Efl.Object.event_freeze; Efl.Object.provider_find; + Efl.Loop_User.loop.get; } events { render,flush,pre @beta; [[Called on render flush pre phase]] diff --git a/src/lib/evas/canvas/evas_main.c b/src/lib/evas/canvas/evas_main.c index f4ae8bf554..c419631891 100644 --- a/src/lib/evas/canvas/evas_main.c +++ b/src/lib/evas/canvas/evas_main.c @@ -811,6 +811,12 @@ _evas_canvas_efl_object_provider_find(Eo *eo_e, Evas_Public_Data *e EINA_UNUSED, return efl_provider_find(efl_super(eo_e, MY_CLASS), klass); } +EOLIAN static Efl_Loop * +_evas_canvas_efl_loop_user_loop_get(Eo *eo_e EINA_UNUSED, Evas_Public_Data *e EINA_UNUSED) +{ + return ecore_main_loop_get(); +} + Ector_Surface * evas_ector_get(Evas_Public_Data *e) { diff --git a/src/lib/evas/canvas/evas_object_main.c b/src/lib/evas/canvas/evas_object_main.c index b027998fff..a4b67d8836 100644 --- a/src/lib/evas/canvas/evas_object_main.c +++ b/src/lib/evas/canvas/evas_object_main.c @@ -4,6 +4,7 @@ #include "evas_common_private.h" #include "evas_private.h" +#include EVAS_MEMPOOL(_mp_sh); @@ -2118,9 +2119,17 @@ _efl_canvas_object_efl_object_provider_find(Eo *eo_obj EINA_UNUSED, Evas_Object_ if ((obj->delete_me) || (!obj->layer)) return NULL; return obj->layer->evas->evas; } + else if (klass == EFL_LOOP_CLASS) + return ecore_main_loop_get(); return efl_provider_find(efl_super(eo_obj, MY_CLASS), klass); } +EOLIAN static Efl_Loop * +_efl_canvas_object_efl_loop_user_loop_get(Eo *eo_obj EINA_UNUSED, Evas_Object_Protected_Data *obj EINA_UNUSED) +{ + return ecore_main_loop_get(); +} + EOLIAN Evas_Object* _evas_canvas_object_top_at_xy_get(Eo *eo_e EINA_UNUSED, Evas_Public_Data *e, Evas_Coord x, Evas_Coord y, Eina_Bool include_pass_events_objects, Eina_Bool include_hidden_objects) {