jpeg pushed a commit to branch master.

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

commit cc1ed7183c9ccab57ffd010338e781744fa424ad
Author: Jean-Philippe Andre <jp.an...@samsung.com>
Date:   Wed Nov 8 19:29:13 2017 +0900

    edje: Hide edje_global from the rest of the world
    
    Call provider_find on the loop (or basically any object) with the
    color/text/size class interface instead, to find it. The main loop is
    the main holder of those objects.
    
    Note: This makes use of provider_find instead of direct access to the
    variable, in order to self-test the code. In theory release builds will
    not do this and user directly the variable.
---
 src/Makefile_Edje.am        |  2 +-
 src/lib/ecore/ecore_main.c  |  2 +-
 src/lib/edje/edje_global.eo |  4 ++++
 src/lib/edje/edje_main.c    | 21 +++++++++++++++++++--
 src/lib/edje/edje_private.h | 16 ++++++++++++++--
 src/lib/edje/edje_smart.c   |  9 ---------
 src/lib/edje/edje_util.c    | 28 +++++++++++++---------------
 7 files changed, 52 insertions(+), 30 deletions(-)

diff --git a/src/Makefile_Edje.am b/src/Makefile_Edje.am
index cf7d9f2655..e1a1973430 100644
--- a/src/Makefile_Edje.am
+++ b/src/Makefile_Edje.am
@@ -5,7 +5,6 @@ edje_eolian_files = \
        lib/edje/efl_canvas_layout_calc.eo \
        lib/edje/efl_canvas_layout_signal.eo \
        lib/edje/efl_canvas_layout_group.eo \
-       lib/edje/edje_global.eo \
        lib/edje/edje_object.eo \
        lib/edje/efl_canvas_layout_part.eo \
        lib/edje/efl_canvas_layout_part_box.eo \
@@ -19,6 +18,7 @@ edje_eolian_type_files = \
     lib/edje/edje_types.eot
 
 edje_eolian_priv_files = \
+       lib/edje/edje_global.eo \
        $(NULL)
 
 edje_eolian_c = $(edje_eolian_files:%.eo=%.eo.c)
diff --git a/src/lib/ecore/ecore_main.c b/src/lib/ecore/ecore_main.c
index 4b7c93d79c..f85d2cdc0d 100644
--- a/src/lib/ecore/ecore_main.c
+++ b/src/lib/ecore/ecore_main.c
@@ -3056,7 +3056,7 @@ _efl_loop_efl_object_constructor(Eo *obj, Efl_Loop_Data 
*pd)
 
    efl_event_callback_array_add(obj, event_catcher_watch(), pd);
 
-   pd->providers = eina_hash_pointer_new((void*) efl_unref);
+   pd->providers = eina_hash_pointer_new(EINA_FREE_CB(efl_unref));
 
    return obj;
 }
diff --git a/src/lib/edje/edje_global.eo b/src/lib/edje/edje_global.eo
index 07ebba5130..f5001f2e73 100644
--- a/src/lib/edje/edje_global.eo
+++ b/src/lib/edje/edje_global.eo
@@ -1,5 +1,9 @@
 class Edje.Global (Efl.Object, Efl.Gfx.Color_Class, Efl.Gfx.Text_Class, 
Efl.Gfx.Size_Class)
 {
+   [[An internal object that manages global color, text and size classes for
+     the whole application. Individual edje objects also support the same
+     features.
+   ]]
    data: null;
    implements {
       Efl.Gfx.Color_Class.color_class { get; set; }
diff --git a/src/lib/edje/edje_main.c b/src/lib/edje/edje_main.c
index f5980cc67e..bd96acca4b 100644
--- a/src/lib/edje/edje_main.c
+++ b/src/lib/edje/edje_main.c
@@ -13,6 +13,8 @@ Eina_Mempool *_edje_real_part_state_mp = NULL;
 Eina_Cow *_edje_calc_params_map_cow = NULL;
 Eina_Cow *_edje_calc_params_physics_cow = NULL;
 
+Edje_Global *_edje_global_obj = NULL;
+
 static const Edje_Calc_Params_Map default_calc_map = {
    { 0, 0, 0 }, { 0.0, 0.0, 0.0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0 
}, { 0.0, 0.0 }, NULL, 0
 };
@@ -82,6 +84,11 @@ edje_init(void)
 
    _edje_scale = FROM_DOUBLE(1.0);
    _edje_global_obj = efl_add(EDJE_GLOBAL_CLASS, NULL);
+   if (!_edje_global_obj ||
+       !efl_loop_register(ecore_main_loop_get(), 
EFL_GFX_COLOR_CLASS_INTERFACE, _edje_global_obj) ||
+       !efl_loop_register(ecore_main_loop_get(), EFL_GFX_TEXT_CLASS_INTERFACE, 
_edje_global_obj) ||
+       !efl_loop_register(ecore_main_loop_get(), EFL_GFX_SIZE_CLASS_INTERFACE, 
_edje_global_obj))
+     goto shutdown_efreet;
 
    _edje_edd_init();
    _edje_text_init();
@@ -141,8 +148,15 @@ shutdown_all:
    _edje_text_class_hash_free();
    _edje_size_class_hash_free();
    _edje_edd_shutdown();
-   efl_del(_edje_global_obj);
-   _edje_global_obj = NULL;
+   if (_edje_global_obj)
+     {
+        efl_loop_unregister(ecore_main_loop_get(), 
EFL_GFX_COLOR_CLASS_INTERFACE, _edje_global_obj);
+        efl_loop_unregister(ecore_main_loop_get(), 
EFL_GFX_TEXT_CLASS_INTERFACE, _edje_global_obj);
+        efl_loop_unregister(ecore_main_loop_get(), 
EFL_GFX_SIZE_CLASS_INTERFACE, _edje_global_obj);
+        efl_del(_edje_global_obj);
+        _edje_global_obj = NULL;
+     }
+shutdown_efreet:
    efreet_shutdown();
 shutdown_evas:
    evas_shutdown();
@@ -195,6 +209,9 @@ _edje_shutdown_core(void)
    _edje_text_class_hash_free();
    _edje_size_class_hash_free();
    _edje_edd_shutdown();
+   efl_loop_unregister(ecore_main_loop_get(), EFL_GFX_COLOR_CLASS_INTERFACE, 
_edje_global_obj);
+   efl_loop_unregister(ecore_main_loop_get(), EFL_GFX_TEXT_CLASS_INTERFACE, 
_edje_global_obj);
+   efl_loop_unregister(ecore_main_loop_get(), EFL_GFX_SIZE_CLASS_INTERFACE, 
_edje_global_obj);
    efl_del(_edje_global_obj);
    _edje_global_obj = NULL;
 
diff --git a/src/lib/edje/edje_private.h b/src/lib/edje/edje_private.h
index 369dddc55a..5c6b7a629d 100644
--- a/src/lib/edje/edje_private.h
+++ b/src/lib/edje/edje_private.h
@@ -98,6 +98,9 @@
 # endif
 #endif
 
+// This object is internal, only the interface needs to be exposed.
+#include "edje_global.eo.h"
+
 EAPI extern int _edje_default_log_dom ;
 
 #ifdef EDJE_DEFAULT_LOG_COLOR
@@ -2348,8 +2351,6 @@ const Eina_Inarray 
*edje_match_signal_source_hash_get(const char *signal,
 void edje_match_signal_source_free(Edje_Signal_Source_Char *key, void *data);
 void _edje_signal_callback_matches_unref(Edje_Signal_Callback_Matches *m);
 
-extern Edje_Global *_edje_global_obj;
-
 // FIXME remove below 3 eapi decls when edje_convert goes
 EAPI void _edje_edd_init(void);
 EAPI void _edje_data_font_list_desc_make(Eet_Data_Descriptor **_font_list_edd, 
Eet_Data_Descriptor **_font_edd);
@@ -2399,6 +2400,17 @@ EAPI extern Eina_Mempool *_emp_SNAPSHOT;
 EAPI extern Eina_Mempool *_emp_part;
 EAPI extern Eina_Mempool *_emp_VECTOR;
 
+static inline Edje_Global *
+_edje_global(void)
+{
+#ifndef NDEBUG
+   return efl_provider_find(ecore_main_loop_get(), 
EFL_GFX_COLOR_CLASS_INTERFACE);
+#else
+   extern Edje_Global *_edje_global_obj;
+   return _edje_global_obj;
+#endif
+}
+
 static inline void
 _edje_calc_params_need_type_common(Edje_Calc_Params *p)
 {
diff --git a/src/lib/edje/edje_smart.c b/src/lib/edje/edje_smart.c
index fd1e2470b2..733879c36a 100644
--- a/src/lib/edje/edje_smart.c
+++ b/src/lib/edje/edje_smart.c
@@ -536,15 +536,6 @@ _edje_object_efl_player_play_speed_get(Eo *obj 
EINA_UNUSED, Edje *pd)
    return 1.0/pd->duration_scale;
 }
 
-EOLIAN static Efl_Object *
-_edje_object_efl_object_provider_find(Eo *obj, Edje *ed EINA_UNUSED, const 
Efl_Class *klass)
-{
-   if (klass == EDJE_GLOBAL_CLASS)
-     return _edje_global_obj;
-
-   return efl_provider_find(efl_super(obj, EDJE_OBJECT_CLASS), klass);
-}
-
 /* Internal EO APIs and hidden overrides */
 
 #define EDJE_OBJECT_EXTRA_OPS \
diff --git a/src/lib/edje/edje_util.c b/src/lib/edje/edje_util.c
index da6d413411..da5c3cb069 100644
--- a/src/lib/edje/edje_util.c
+++ b/src/lib/edje/edje_util.c
@@ -16,8 +16,6 @@ struct _Edje_Box_Layout
    char                   name[];
 };
 
-Edje_Global *_edje_global_obj = NULL;
-
 static Eina_Hash *_edje_color_class_hash = NULL;
 static Eina_Hash *_edje_text_class_hash = NULL;
 static Eina_Hash *_edje_size_class_hash = NULL;
@@ -648,9 +646,9 @@ edje_color_class_set(const char *color_class, int r, int g, 
int b, int a, int r2
 {
    Eina_Bool int_ret = EINA_TRUE;
 
-   int_ret &= efl_gfx_color_class_set(_edje_global_obj, color_class, 
EFL_GFX_COLOR_CLASS_LAYER_NORMAL, r, g, b, a);
-   int_ret &= efl_gfx_color_class_set(_edje_global_obj, color_class, 
EFL_GFX_COLOR_CLASS_LAYER_OUTLINE, r2, g2, b2, a2);
-   int_ret &= efl_gfx_color_class_set(_edje_global_obj, color_class, 
EFL_GFX_COLOR_CLASS_LAYER_SHADOW, r3, g3, b3, a3);
+   int_ret &= efl_gfx_color_class_set(_edje_global(), color_class, 
EFL_GFX_COLOR_CLASS_LAYER_NORMAL, r, g, b, a);
+   int_ret &= efl_gfx_color_class_set(_edje_global(), color_class, 
EFL_GFX_COLOR_CLASS_LAYER_OUTLINE, r2, g2, b2, a2);
+   int_ret &= efl_gfx_color_class_set(_edje_global(), color_class, 
EFL_GFX_COLOR_CLASS_LAYER_SHADOW, r3, g3, b3, a3);
 
    return int_ret;
 }
@@ -678,9 +676,9 @@ edje_color_class_get(const char *color_class, int *r, int 
*g, int *b, int *a, in
 {
    Eina_Bool int_ret = EINA_TRUE;
 
-   int_ret &= efl_gfx_color_class_get(_edje_global_obj, color_class, 
EFL_GFX_COLOR_CLASS_LAYER_NORMAL, r, g, b, a);
-   int_ret &= efl_gfx_color_class_get(_edje_global_obj, color_class, 
EFL_GFX_COLOR_CLASS_LAYER_OUTLINE, r2, g2, b2, a2);
-   int_ret &= efl_gfx_color_class_get(_edje_global_obj, color_class, 
EFL_GFX_COLOR_CLASS_LAYER_SHADOW, r3, g3, b3, a3);
+   int_ret &= efl_gfx_color_class_get(_edje_global(), color_class, 
EFL_GFX_COLOR_CLASS_LAYER_NORMAL, r, g, b, a);
+   int_ret &= efl_gfx_color_class_get(_edje_global(), color_class, 
EFL_GFX_COLOR_CLASS_LAYER_OUTLINE, r2, g2, b2, a2);
+   int_ret &= efl_gfx_color_class_get(_edje_global(), color_class, 
EFL_GFX_COLOR_CLASS_LAYER_SHADOW, r3, g3, b3, a3);
 
    return int_ret;
 }
@@ -702,7 +700,7 @@ _edje_global_efl_gfx_color_class_color_class_get(Eo *obj 
EINA_UNUSED, void *pd E
 EAPI void
 edje_color_class_del(const char *color_class)
 {
-   efl_gfx_color_class_del(_edje_global_obj, color_class);
+   efl_gfx_color_class_del(_edje_global(), color_class);
 }
 
 EOLIAN void
@@ -1080,7 +1078,7 @@ on_error:
 EAPI Eina_Bool
 edje_text_class_set(const char *text_class, const char *font, Evas_Font_Size 
size)
 {
-   return efl_gfx_text_class_set(_edje_global_obj, text_class, font, 
(Efl_Font_Size)size);
+   return efl_gfx_text_class_set(_edje_global(), text_class, font, 
(Efl_Font_Size)size);
 }
 
 EOLIAN Eina_Bool
@@ -1131,7 +1129,7 @@ _edje_global_efl_gfx_text_class_text_class_set(Eo *obj 
EINA_UNUSED, void *pd EIN
 EAPI Eina_Bool
 edje_text_class_get(const char *text_class, const char **font, Evas_Font_Size 
*size)
 {
-   return efl_gfx_text_class_get(_edje_global_obj, text_class, font, 
(Efl_Font_Size *)size);
+   return efl_gfx_text_class_get(_edje_global(), text_class, font, 
(Efl_Font_Size *)size);
 }
 
 EOLIAN Eina_Bool
@@ -1162,7 +1160,7 @@ _edje_global_efl_gfx_text_class_text_class_get(Eo *obj 
EINA_UNUSED, void *pd EIN
 EAPI void
 edje_text_class_del(const char *text_class)
 {
-   efl_gfx_text_class_del(_edje_global_obj, text_class);
+   efl_gfx_text_class_del(_edje_global(), text_class);
 }
 
 EOLIAN void
@@ -1484,7 +1482,7 @@ on_error:
 EAPI Eina_Bool
 edje_size_class_set(const char *size_class, Evas_Coord minw, Evas_Coord minh, 
Evas_Coord maxw, Evas_Coord maxh)
 {
-   return efl_gfx_size_class_set(_edje_global_obj, size_class, minw, minh, 
maxw, maxh);
+   return efl_gfx_size_class_set(_edje_global(), size_class, minw, minh, maxw, 
maxh);
 }
 
 EOLIAN Eina_Bool
@@ -1538,7 +1536,7 @@ _edje_global_efl_gfx_size_class_size_class_set(Eo *obj 
EINA_UNUSED, void *pd EIN
 EAPI Eina_Bool
 edje_size_class_get(const char *size_class, Evas_Coord *minw, Evas_Coord 
*minh, Evas_Coord *maxw, Evas_Coord *maxh)
 {
-   return efl_gfx_size_class_get(_edje_global_obj, size_class, minw, minh, 
maxw, maxh);
+   return efl_gfx_size_class_get(_edje_global(), size_class, minw, minh, maxw, 
maxh);
 }
 
 EOLIAN Eina_Bool
@@ -1573,7 +1571,7 @@ _edje_global_efl_gfx_size_class_size_class_get(Eo *obj 
EINA_UNUSED, void *pd EIN
 EAPI void
 edje_size_class_del(const char *size_class)
 {
-   efl_gfx_size_class_del(_edje_global_obj, size_class);
+   efl_gfx_size_class_del(_edje_global(), size_class);
 }
 
 EOLIAN void

-- 


Reply via email to