edje: Remove part_object_get from EO

Ooooh. This one might be controversial, as some apps definitely
use the function. But it is so easily abused. For our EO API
we are trying to not expose any internal object, as this prevents
us from making changes to the internal behaviour and structure.
All the features that this API provided should be limited to
read-only access to the internal object. In order to replace
this, we will have to return an Efl.Part object that implements
all those APIs: geometry_get, visibility_get, etc...
This commit is contained in:
Jean-Philippe Andre 2017-05-26 10:41:52 +09:00
parent 76ef772d0a
commit 7c3e732f8c
3 changed files with 31 additions and 27 deletions

View File

@ -149,6 +149,32 @@ EAPI Edje_Load_Error edje_object_load_error_get(const Evas_Object *obj);
*/
EAPI const char *edje_load_error_str (Edje_Load_Error error);
/**
* @brief Gets a handle to the Evas object implementing a given Edje part, in
* an Edje object.
*
* This function gets a pointer of the Evas object corresponding to a given
* part in the obj object's group.
*
* You should never modify the state of the returned object (with @ref
* evas_object_move() or @ref evas_object_hide() for example), because it's
* meant to be managed by Edje, solely. You are safe to query information about
* its current state (with evas_object_visible_get() or @ref
* evas_object_color_get() for example), though.
*
* @note If the type of Edje part is GROUP, SWALLOW or EXTERNAL, returned
* handle by this function will indicate nothing or transparent rectangle for
* events. Use $.part_swallow_get() in that case.
*
* @param[in] part The Edje part's name
*
* @return A pointer to the Evas object implementing the given part, @c null on
* failure (e.g. the given part doesn't exist)
*
* @ingroup Edje_Object
*/
EAPI const Efl_Canvas_Object *edje_object_part_object_get(const Edje_Object *obj, const char * part);
/**
* @ingroup Edje_Object_Communication_Interface_Message
*

View File

@ -823,31 +823,6 @@ class Edje.Object (Efl.Canvas.Group.Clipped, Efl.File, Efl.Container, Efl.Part,
group]]
}
}
@property part_object {
get {
[[Gets a handle to the Evas object implementing a given Edje
part, in an Edje object.
This function gets a pointer of the Evas object corresponding to a
given part in the obj object's group.
You should never modify the state of the returned object (with
\@ref evas_object_move() or \@ref evas_object_hide() for example),
because it's meant to be managed by Edje, solely. You are safe to
query information about its current state (with
evas_object_visible_get() or \@ref evas_object_color_get() for
example), though.
Note: If the type of Edje part is GROUP, SWALLOW or EXTERNAL,
returned handle by this function will indicate nothing or transparent
rectangle for events. Use $.part_swallow_get() in that case.]]
return: const(Efl.Canvas.Object); [[A pointer to the Evas object implementing the given part,
$null on failure (e.g. the given part doesn't exist)]]
}
keys {
part: string; [[The Edje part's name]]
}
}
@property part_state {
get {
[[Returns the state of the Edje part.]]

View File

@ -1803,11 +1803,14 @@ _edje_object_part_exists(Eo *obj EINA_UNUSED, Edje *ed, const char *part)
return EINA_TRUE;
}
EOLIAN const Evas_Object *
_edje_object_part_object_get(Eo *obj EINA_UNUSED, Edje *ed, const char *part)
/* Legacy API: exposes internal object. Easy to abuse. */
EAPI const Evas_Object *
edje_object_part_object_get(const Eo *obj, const char *part)
{
Edje_Real_Part *rp;
Edje *ed;
ed = _edje_fetch(obj);
if ((!ed) || (!part)) return NULL;
/* Need to recalc before providing the object. */