Evas: Mark type as legacy and protected
authorJean-Philippe Andre <jp.andre@samsung.com>
Thu, 16 Jun 2016 07:05:00 +0000 (16:05 +0900)
committerJean-Philippe Andre <jp.andre@samsung.com>
Fri, 17 Jun 2016 02:37:39 +0000 (11:37 +0900)
Only set() is allowed for EO, and it's a constructor,
protected function. Unfortunately, this means a lot
of #define EVAS_OBJECT_PROTECTED

src/examples/evas/evas-object-manipulation-eo.c
src/lib/edje/edje_private.h
src/lib/elementary/elementary_config.h
src/lib/emotion/emotion_smart.c
src/lib/evas/Evas_Legacy.h
src/lib/evas/canvas/evas_object.eo
src/lib/evas/canvas/evas_object_main.c
src/lib/evas/include/evas_common_private.h
src/lib/evas/include/evas_private.h

index f32de7b..be50221 100644 (file)
@@ -209,10 +209,8 @@ main(void)
         efl_gfx_position_set(d.img, 0, 0);
         efl_gfx_size_set(d.img, WIDTH, HEIGHT);
         efl_gfx_visible_set(d.img, EINA_TRUE);
-
-        const char *type = NULL;
-        type = evas_obj_type_get(d.img);
-        fprintf(stdout, "Image object added, type is: %s\n", type);
+        fprintf(stdout, "Image object added, class name is: %s\n",
+                eo_class_name_get(d.img));
      }
 
    /* border on the image's clipper, here just to emphasize its position */
index db75df4..c4b16f5 100644 (file)
@@ -39,6 +39,8 @@
 # include <Evil.h>
 #endif
 
+#define EVAS_OBJECT_PROTECTED
+
 #include <Eina.h>
 #include <Eet.h>
 #include <Eo.h>
index ae14f49..0e84d6e 100644 (file)
@@ -8,4 +8,4 @@
  */
 
 #define ELM_CONFIG_ICON_THEME_ELEMENTARY "_Elementary_Icon_Theme"
-
+#define EVAS_OBJECT_PROTECTED
index 804b865..7bfa18a 100644 (file)
@@ -2,6 +2,8 @@
 # include "config.h"
 #endif
 
+#define EVAS_OBJECT_PROTECTED
+
 #include <Evas.h>
 #include <Ecore.h>
 
index 7ca9080..b7e22bc 100644 (file)
@@ -673,6 +673,24 @@ EAPI int              evas_object_ref_get(const Evas_Object *obj);
 EAPI void             evas_object_del(Evas_Object *obj) EINA_ARG_NONNULL(1);
 
 /**
+ * @brief Retrieves the type of the given Evas object.
+ *
+ * For Evas' builtin types, the return strings will be one of "rectangle",
+ * "line", "polygon", "text", "textblock" or "image".
+ *
+ * For Evas smart objects (see @ref Evas_Smart_Group), the name of the smart
+ * class itself is returned on this call. For the built-in smart objects, these
+ * names are "EvasObjectSmartClipped" for the clipped smart object,
+ * "Evas_Object_Box" for the box object and "Evas_Object_Table for the table
+ * object.
+ *
+ * @return The type of the object.
+ *
+ * @ingroup Evas_Object
+ */
+EAPI const char      *evas_object_type_get(const Evas_Object *obj);
+
+/**
  * Retrieves the position and (rectangular) size of the given Evas
  * object.
  *
index 587578c..44c98fb 100644 (file)
@@ -11,32 +11,11 @@ abstract Evas.Object (Eo.Base, Evas.Common_Interface, Efl.Gfx, Efl.Gfx.Stack,
       legacy_ctor @protected {
           [[Internal function. Do not use.]]
       }
-      @property type {
+      @property type @protected {
          set {
-            [[Sets the type of the given Evas object.]]
+            [[Sets the legacy type name of this Evas object.]]
             legacy: null;
          }
-         get {
-            [[Retrieves the type of the given Evas object.
-
-              For Evas' builtin types, the return strings will be one of
-              "rectangle", "line", "polygon", "text", "textblock" or "image".
-
-              For Evas smart objects (see \@ref Evas_Smart_Group), the name
-              of the smart class itself is returned on this call. For the
-              built-in smart objects, these names are "EvasObjectSmartClipped"
-              for the clipped smart object, "Evas_Object_Box" for the box
-              object and "Evas_Object_Table for the table object.
-            ]]
-            /* FIXME-doc
-            Example:
-            @dontinclude evas-object-manipulation.c
-            @skip d.img = evas_object_image_filled_add(d.canvas);
-            @until border on the
-
-            See the full @ref Example_Evas_Object_Manipulation "example".
-            */
-         }
          values {
             type: string; [[The type of the object.]]
          }
@@ -875,6 +854,9 @@ abstract Evas.Object (Eo.Base, Evas.Common_Interface, Efl.Gfx, Efl.Gfx.Stack,
          }
       }
    }
+   constructors {
+      .type;
+   }
    implements {
       Eo.Base.constructor;
       Eo.Base.destructor;
index a79cc52..b9ae7da 100644 (file)
@@ -2071,16 +2071,14 @@ _evas_canvas_objects_in_rectangle_get(Eo *eo_e EINA_UNUSED, Evas_Public_Data *e,
    return in;
 }
 
-EOLIAN static const char *
-_evas_object_type_get(Eo *eo_obj EINA_UNUSED, Evas_Object_Protected_Data *obj)
-{
-   if (obj->delete_me) return "";
-   return obj->type;
-}
-
 EOLIAN static void
-_evas_object_type_set(Eo *eo_obj EINA_UNUSED, Evas_Object_Protected_Data *obj, const char *type)
+_evas_object_type_set(Eo *eo_obj, Evas_Object_Protected_Data *obj, const char *type)
 {
+   if (eo_finalized_get(eo_obj))
+     {
+        ERR("This function is only allowed during construction.");
+        return;
+     }
    obj->type = type; // Store it as the top type of this class
 }
 
@@ -2189,6 +2187,15 @@ _evas_object_legacy_ctor(Eo *eo_obj, Evas_Object_Protected_Data *obj)
 
 /* legacy */
 
+EAPI const char *
+evas_object_type_get(const Evas_Object *eo_obj)
+{
+   Evas_Object_Protected_Data *obj = eo_isa(eo_obj, EVAS_OBJECT_CLASS) ?
+            eo_data_scope_get(eo_obj, EVAS_OBJECT_CLASS) : NULL;
+   if (!obj || obj->delete_me) return "";
+   return obj->type;
+}
+
 EAPI void
 evas_object_size_hint_aspect_set(Evas_Object *obj, Evas_Aspect_Control aspect, Evas_Coord w, Evas_Coord h)
 {
index 53abc45..c10962f 100644 (file)
 #ifdef BUILD_LOADER_EET
 # include <Eet.h>
 #endif
+
+#ifndef EVAS_OBJECT_PROTECTED
+# define EVAS_OBJECT_PROTECTED
+#endif
+
 #include "Evas.h"
 
 #ifdef EAPI
index dc3060d..7c9b726 100644 (file)
@@ -5,6 +5,10 @@
 # include <config.h>
 #endif
 
+#ifndef EVAS_OBJECT_PROTECTED
+# define EVAS_OBJECT_PROTECTED
+#endif
+
 #include "Evas.h"
 #include "Eet.h"