efl: major rewrite of efl_part.

The interface efl_part_get should not be directly called from C, but the efl_part
wrapper should. It rely on efl_noref to properly destroy the object. Binding can
control the lifecycle of the reference the way they want by either calling the
wrapper or efl_part_get directly. It also means that the ugly ___efl_auto_unref_set
doesn't need to be exposed outside of EFL anymore.

Differential Revision: https://phab.enlightenment.org/D6098
This commit is contained in:
Cedric BAIL 2018-05-03 16:34:17 -07:00
parent c28eb28728
commit 8a513a522e
94 changed files with 224 additions and 86 deletions

View File

@ -97,8 +97,6 @@ _edje_ ## type ## _internal_proxy_get(Edje_Object *obj EINA_UNUSED, Edje *ed, Ed
} \
__VA_ARGS__; \
if (!no_del_cb) efl_del_intercept_set(proxy, _ ## type ## _del_cb); \
efl_allow_parent_unref_set(proxy, 1); \
___efl_auto_unref_set(proxy, 1); \
return proxy; \
}

View File

@ -1,5 +1,6 @@
#define EFL_CANVAS_GROUP_PROTECTED
#define EFL_CANVAS_GROUP_BETA
#define EFL_PART_PROTECTED
#include "edje_private.h"

View File

@ -3324,7 +3324,7 @@ _edje_efl_content_content_get(Edje *ed, const char *part)
}
EOLIAN Eo *
_efl_canvas_layout_efl_part_part(Eo *obj, Edje *ed, const char *part)
_efl_canvas_layout_efl_part_part_get(Eo *obj, Edje *ed, const char *part)
{
Edje_Real_Part *rp;

View File

@ -116,7 +116,7 @@ class Efl.Canvas.Layout (Efl.Canvas.Group, Efl.File, Efl.Container, Efl.Part,
Efl.File.load_error { get; }
Efl.File.mmap { get; set; }
Efl.Container.content_remove;
Efl.Part.part; [[Returns @Efl.Canvas.Layout_Part]]
Efl.Part.part_get; [[Returns @Efl.Canvas.Layout_Part]]
Efl.Observer.update;
Efl.Player.playable { get; }
Efl.Player.play { get; set; }

View File

@ -10,6 +10,12 @@ extern "C" {
#ifdef EAPI
# undef EAPI
#endif
#ifdef EWAPI
# undef EWAPI
#endif
#ifdef EOAPI
# undef EOAPI
#endif
#ifdef _WIN32
# ifdef EFL_BUILD
@ -21,18 +27,25 @@ extern "C" {
# else
# define EAPI __declspec(dllimport)
# endif
# define EAPI_WEAK
#else
# ifdef __GNUC__
# if __GNUC__ >= 4
# define EAPI __attribute__ ((visibility("default")))
# define EAPI_WEAK __attribute__ ((weak))
# else
# define EAPI
# define EAPI_WEAK
# endif
# else
# define EAPI
# define EAPI_WEAK
# endif
#endif
#define EWAPI EAPI EAPI_WEAK
#define EOAPI EAPI EAPI_WEAK
#define EFL_VERSION_1_18 1
#define EFL_VERSION_1_19 1
#define EFL_VERSION_1_20 1
@ -167,6 +180,22 @@ typedef Efl_Gfx_Path_Command_Type Efl_Gfx_Path_Command;
#include "interfaces/efl_text_markup.eo.h"
#include "interfaces/efl_text_markup_util.eo.h"
/**
* @brief Get a proxy object referring to a part of an object.
*
* The returned object is valid for only a single function call.
* Of course, if the first call is @ref efl_ref, it will last
* until @ref efl_unref.
*
* @param[in] obj The object.
* @param[in] name The part name.
*
* @return A (proxy) object, valid for a single call.
*
* @since 1.21
*/
EAPI Efl_Object *efl_part(const Eo *obj, const char *name);
#else
#ifndef EFL_NOLEGACY_API_SUPPORT

View File

@ -1,6 +1,8 @@
#ifndef EFL_EFL_HH
#define EFL_EFL_HH
#define EFL_PART_PROTECTED
#include "cxx/efl_part_impl.hh"
#include <Eo.hh>

View File

@ -7,8 +7,7 @@
#define EOLIAN_CXX_EFL_PART_IMPLEMENTATION \
inline ::efl::Object Part::part(::efl::eina::string_view const& name) const \
{ \
::Eo *handle = ::efl_part(_eo_ptr(), name.c_str()); \
::___efl_auto_unref_set(handle, false); \
::Eo *handle = ::efl_part_get(_eo_ptr(), name.c_str()); \
return ::efl::Object{handle}; \
}

View File

@ -5,6 +5,9 @@
#define EFL_CANVAS_SCENE_BETA
#define EFL_UI_SCROLLBAR_PROTECTED
#define EFL_UI_SCROLLBAR_BETA
#define EFL_PART_PROTECTED
#include "eo_internal.h"
#include <Efl.h>
@ -77,6 +80,27 @@
#include "interfaces/efl_ui_multi_selectable.eo.c"
#include "interfaces/efl_ui_zoom.eo.c"
static void
_noref_death(void *data EINA_UNUSED, const Efl_Event *event)
{
efl_event_callback_del(event->object, EFL_EVENT_NOREF, _noref_death, NULL);
efl_del(event->object);
}
EAPI Efl_Object *
efl_part(const Eo *obj, const char *name)
{
Efl_Object *r;
r = efl_part_get(obj, name);
if (!r) return NULL;
efl_event_callback_add(r, EFL_EVENT_NOREF, _noref_death, NULL);
___efl_auto_unref_set(r, EINA_TRUE);
return efl_ref(r);
}
EAPI void
__efl_internal_init(void)
{

View File

@ -10,7 +10,10 @@ interface Efl.Part
theme.
Part proxy objects have a special lifetime that
is limited to one and only one function call.
is limited to one and only one function call. This
behavior is implemented in efl_part() which call
Efl.Part.part_get(). Calling Efl.Part.part_get() directly
should be avoided.
In other words, the caller does not hold a reference
to this proxy object. It may be possible, in languages
@ -32,10 +35,8 @@ interface Efl.Part
unref(part)
]]
methods {
part @const {
part_get @protected @const {
[[Get a proxy object referring to a part of an object.
The returned object is valid for only a single function call.
]]
params {
name: string; [[The part name.]]

View File

@ -5,6 +5,7 @@
#define EFL_ACCESS_WIDGET_ACTION_PROTECTED
#define EFL_ACCESS_OBJECT_PROTECTED
#define ELM_LAYOUT_PROTECTED
#define EFL_PART_PROTECTED
#include <Elementary.h>
#include "elm_priv.h"

View File

@ -11,6 +11,6 @@ class Efl.Ui.Button_Legacy (Efl.Ui.Button, Efl.Ui.Legacy)
Efl.Object.constructor;
Efl.Ui.Widget.theme_apply;
Efl.Ui.Widget.widget_sub_object_del;
Efl.Part.part;
Efl.Part.part_get;
}
}

View File

@ -6,6 +6,7 @@
#define EFL_ACCESS_WIDGET_ACTION_PROTECTED
#define ELM_LAYOUT_PROTECTED
#define EFL_UI_NSTATE_PROTECTED
#define EFL_PART_PROTECTED
#include <Elementary.h>
#include "elm_priv.h"

View File

@ -13,6 +13,6 @@ class Efl.Ui.Check_Legacy (Efl.Ui.Check, Efl.Ui.Legacy)
Efl.Object.constructor;
Efl.Ui.Widget.theme_apply;
Efl.Ui.Widget.widget_sub_object_del;
Efl.Part.part;
Efl.Part.part_get;
}
}

View File

@ -3,6 +3,7 @@
#endif
#define EFL_ACCESS_OBJECT_PROTECTED
#define EFL_PART_PROTECTED
#include <Elementary.h>
#include "elm_priv.h"

View File

@ -236,7 +236,7 @@ class Efl.Ui.Flip (Efl.Ui.Widget, Efl.Pack_Linear, Efl.Part)
Efl.Container.content_iterate;
Efl.Container.content_count;
Efl.Container.content_remove;
Efl.Part.part;
Efl.Part.part_get;
Efl.Pack.unpack;
Efl.Pack.pack;
Efl.Pack_Linear.pack_begin;

View File

@ -4,6 +4,7 @@
#define EFL_ACCESS_OBJECT_PROTECTED
#define ELM_LAYOUT_PROTECTED
#define EFL_PART_PROTECTED
#include <Elementary.h>
#include "elm_priv.h"

View File

@ -5,6 +5,7 @@
#define EFL_ACCESS_OBJECT_PROTECTED
#define ELM_LAYOUT_PROTECTED
#define EFL_UI_WIDGET_PART_BG_PROTECTED
#define EFL_PART_PROTECTED
#include <Elementary.h>
@ -2207,7 +2208,7 @@ _efl_ui_layout_object_efl_layout_signal_signal_process(Eo *obj, Efl_Ui_Layout_Ob
/* Efl.Part implementation */
EOLIAN static Eo *
_efl_ui_layout_object_efl_part_part(const Eo *obj, Efl_Ui_Layout_Object_Data *sd EINA_UNUSED, const char *part)
_efl_ui_layout_object_efl_part_part_get(const Eo *obj, Efl_Ui_Layout_Object_Data *sd EINA_UNUSED, const char *part)
{
Efl_Canvas_Layout_Part_Type type = EFL_CANVAS_LAYOUT_PART_TYPE_NONE;
@ -2231,18 +2232,18 @@ _efl_ui_layout_object_efl_part_part(const Eo *obj, Efl_Ui_Layout_Object_Data *sd
WRN("Layout has a background but it's not a swallow: '%s'",
elm_widget_theme_element_get(obj));
}
return efl_part(efl_super(obj, MY_CLASS), part);
return efl_part_get(efl_super(obj, MY_CLASS), part);
}
return ELM_PART_IMPLEMENT(EFL_UI_LAYOUT_PART_BG_CLASS, obj, part);
}
else if (eina_streq(part, "shadow"))
return efl_part(efl_super(obj, MY_CLASS), part);
return efl_part_get(efl_super(obj, MY_CLASS), part);
if (!efl_layout_group_part_exist_get(wd->resize_obj, part))
{
// edje part will handle the error message
return efl_part(wd->resize_obj, part);
return efl_part_get(wd->resize_obj, part);
}
type = efl_canvas_layout_part_type_get(efl_part(wd->resize_obj, part));

View File

@ -69,7 +69,7 @@ class Efl.Ui.Layout.Object (Efl.Ui.Widget, Efl.Part, Efl.Container, Efl.File,
Efl.Container.content_count;
Efl.Container.content_remove;
Efl.Container.content_iterate;
Efl.Part.part;
Efl.Part.part_get;
Efl.Ui.View.model { get; set; }
Efl.Ui.Model.Connect.connect;
Efl.Ui.Factory.model_connect;

View File

@ -5,6 +5,7 @@
#define ELM_LAYOUT_PROTECTED
#define EFL_UI_LAYOUT_PART_BOX_PROTECTED
#define EFL_UI_LAYOUT_PART_TABLE_PROTECTED
#define EFL_PART_PROTECTED
#include <Elementary.h>

View File

@ -3,6 +3,7 @@
#endif
#define EFL_UI_LIST_DEFAULT_ITEM_PROTECTED
#define EFL_PART_PROTECTED
#include <Elementary.h>
@ -89,7 +90,7 @@ _efl_ui_list_default_item_part_end_efl_content_content_unset(Eo *obj, void *pd E
#include "efl_ui_list_default_item_part_end.eo.c"
EOLIAN static Efl_Object *
_efl_ui_list_default_item_efl_part_part(const Eo *obj, void *wd EINA_UNUSED, const char *part)
_efl_ui_list_default_item_efl_part_part_get(const Eo *obj, void *wd EINA_UNUSED, const char *part)
{
EINA_SAFETY_ON_NULL_RETURN_VAL(part, NULL);
if (eina_streq(part, "text"))
@ -99,7 +100,7 @@ _efl_ui_list_default_item_efl_part_part(const Eo *obj, void *wd EINA_UNUSED, con
else if (eina_streq(part, "end"))
return ELM_PART_IMPLEMENT(EFL_UI_LIST_DEFAULT_ITEM_PART_END_CLASS, obj, "efl.end");
return efl_part(efl_super(obj, MY_CLASS), part);
return efl_part_get(efl_super(obj, MY_CLASS), part);
}
/* Efl.Part end */

View File

@ -19,6 +19,6 @@ class Efl.Ui.List_Default_Item (Efl.Ui.List_Item,
Efl.Ui.Translatable.translatable_text { get; set; }
Efl.Content.content { get; set; }
Efl.Content.content_unset;
Efl.Part.part;
Efl.Part.part_get;
}
}

View File

@ -3,6 +3,7 @@
#endif
#define EFL_UI_LIST_EMPTY_ITEM_PROTECTED
#define EFL_PART_PROTECTED
#include <Elementary.h>
@ -39,13 +40,13 @@ ELM_PART_CONTENT_DEFAULT_IMPLEMENT(efl_ui_list_empty_item, void)
/* Efl.Part end */
EOLIAN static Efl_Object *
_efl_ui_list_empty_item_efl_part_part(const Eo *obj, void *wd EINA_UNUSED, const char *part)
_efl_ui_list_empty_item_efl_part_part_get(const Eo *obj, void *wd EINA_UNUSED, const char *part)
{
EINA_SAFETY_ON_NULL_RETURN_VAL(part, NULL);
if (eina_streq(part, "content"))
return ELM_PART_IMPLEMENT(EFL_UI_LAYOUT_PART_CONTENT_CLASS, obj, "efl.content");
return efl_part(efl_super(obj, MY_CLASS), part);
return efl_part_get(efl_super(obj, MY_CLASS), part);
}
/* Internal EO APIs and hidden overrides */

View File

@ -11,6 +11,6 @@ class Efl.Ui.List_Empty_Item (Efl.Ui.List_Item, Efl.Content)
Efl.Object.destructor;
Efl.Content.content { get; set; }
Efl.Content.content_unset;
Efl.Part.part;
Efl.Part.part_get;
}
}

View File

@ -2,6 +2,8 @@
# include "elementary_config.h"
#endif
#define EFL_PART_PROTECTED
#include <Elementary.h>
#include "elm_priv.h"
@ -113,7 +115,7 @@ _efl_ui_navigation_bar_content_unset(Eo *obj, Efl_Ui_Navigation_Bar_Data *_pd EI
/* Efl.Part begin */
EOLIAN static Efl_Object *
_efl_ui_navigation_bar_efl_part_part(const Eo *obj, Efl_Ui_Navigation_Bar_Data *priv EINA_UNUSED, const char *part)
_efl_ui_navigation_bar_efl_part_part_get(const Eo *obj, Efl_Ui_Navigation_Bar_Data *priv EINA_UNUSED, const char *part)
{
EINA_SAFETY_ON_NULL_RETURN_VAL(part, NULL);
@ -122,7 +124,7 @@ _efl_ui_navigation_bar_efl_part_part(const Eo *obj, Efl_Ui_Navigation_Bar_Data *
else if (eina_streq(part, "left_content") || eina_streq(part, "right_content"))
return ELM_PART_IMPLEMENT(EFL_UI_NAVIGATION_BAR_PART_CLASS, obj, part);
return efl_part(efl_super(obj, MY_CLASS), part);
return efl_part_get(efl_super(obj, MY_CLASS), part);
}
EOLIAN static void

View File

@ -25,6 +25,6 @@ class Efl.Ui.Navigation_Bar (Efl.Ui.Layout.Object, Efl.Content, Efl.Text, Efl.Ui
Efl.Content.content_unset;
Efl.Text.text { set; get; }
Efl.Ui.Translatable.translatable_text { set; get; }
Efl.Part.part;
Efl.Part.part_get;
}
}

View File

@ -1,6 +1,7 @@
#ifdef HAVE_CONFIG_H
# include "elementary_config.h"
#endif
#define EFL_PART_PROTECTED
#include <Elementary.h>

View File

@ -5,6 +5,7 @@
#define EFL_ACCESS_OBJECT_PROTECTED
#define ELM_LAYOUT_PROTECTED
#define EFL_GFX_SIZE_HINT_PROTECTED
#define EFL_PART_PROTECTED
#include <Elementary.h>

View File

@ -52,7 +52,7 @@ class Efl.Ui.Panes (Efl.Ui.Layout.Object, Efl.Ui.Direction,
Efl.Object.constructor;
Efl.Ui.Widget.theme_apply;
Efl.Ui.Direction.direction { get; set; [[Only supports $vertical and $horizontal. Default is $vertical.]] }
Efl.Part.part;
Efl.Part.part_get;
}
events {
press: void; [[Called when panes got pressed]]

View File

@ -2,7 +2,9 @@
# include "elementary_config.h"
#endif
#define EFL_PART_PROTECTED
#define EFL_UI_POPUP_PROTECTED
#define EFL_PART_PROTECTED
#include <Elementary.h>
@ -322,14 +324,14 @@ ELM_PART_CONTENT_DEFAULT_GET(efl_ui_popup, "efl.content")
ELM_PART_CONTENT_DEFAULT_IMPLEMENT(efl_ui_popup, Efl_Ui_Popup_Data)
EOLIAN static Eo *
_efl_ui_popup_efl_part_part(const Eo *obj, Efl_Ui_Popup_Data *_pd EINA_UNUSED, const char *part)
_efl_ui_popup_efl_part_part_get(const Eo *obj, Efl_Ui_Popup_Data *_pd EINA_UNUSED, const char *part)
{
EINA_SAFETY_ON_NULL_RETURN_VAL(part, NULL);
if (eina_streq(part, "backwall"))
return ELM_PART_IMPLEMENT(EFL_UI_POPUP_PART_CLASS, obj, part);
return efl_part(efl_super(obj, MY_CLASS), part);
return efl_part_get(efl_super(obj, MY_CLASS), part);
}
EOLIAN static void

View File

@ -61,7 +61,7 @@ class Efl.Ui.Popup(Efl.Ui.Layout.Object, Efl.Content)
Efl.Ui.Widget.widget_parent { set; }
Efl.Content.content { get; set; }
Efl.Content.content_unset;
Efl.Part.part;
Efl.Part.part_get;
}
events {
backwall,clicked: void; [[This is called whenever the user clicks back wall of popup.]]

View File

@ -2,6 +2,8 @@
# include "elementary_config.h"
#endif
#define EFL_PART_PROTECTED
#include <Elementary.h>
#include "elm_priv.h"

View File

@ -29,7 +29,7 @@ class Efl.Ui.Popup_Alert(Efl.Ui.Popup)
implements {
Efl.Object.constructor;
Efl.Object.destructor;
Efl.Part.part;
Efl.Part.part_get;
}
events {
button,clicked: Efl.Ui.Popup_Alert_Button_Clicked_Event; [[Called when alert popup was clicked]]

View File

@ -3,6 +3,7 @@
#endif
#define EFL_UI_POPUP_ALERT_SCROLL_BETA
#define EFL_PART_PROTECTED
#include <Elementary.h>

View File

@ -27,7 +27,7 @@ class Efl.Ui.Popup_Alert_Scroll(Efl.Ui.Popup_Alert)
implements {
Efl.Object.constructor;
Efl.Canvas.Group.group_calculate;
Efl.Part.part;
Efl.Part.part_get;
Efl.Ui.Popup.popup_size { set;}
}
}

View File

@ -2,6 +2,8 @@
# include "elementary_config.h"
#endif
#define EFL_PART_PROTECTED
#include <Elementary.h>
#include "elm_priv.h"

View File

@ -23,6 +23,6 @@ class Efl.Ui.Popup_Alert_Text(Efl.Ui.Popup_Alert, Efl.Text)
Efl.Canvas.Group.group_calculate;
Efl.Ui.Popup.popup_size { set;}
Efl.Text.text { get; set; }
Efl.Part.part;
Efl.Part.part_get;
}
}

View File

@ -5,6 +5,7 @@
#define EFL_ACCESS_OBJECT_PROTECTED
#define ELM_LAYOUT_PROTECTED
#define EFL_ACCESS_VALUE_PROTECTED
#define EFL_PART_PROTECTED
#include <Elementary.h>
@ -693,7 +694,7 @@ _efl_ui_progressbar_efl_ui_range_range_min_max_get(const Eo *obj EINA_UNUSED, Ef
/* Efl.Part begin */
EOLIAN static Eo *
_efl_ui_progressbar_efl_part_part(const Eo *obj, Efl_Ui_Progressbar_Data *sd EINA_UNUSED, const char *part)
_efl_ui_progressbar_efl_part_part_get(const Eo *obj, Efl_Ui_Progressbar_Data *sd EINA_UNUSED, const char *part)
{
EINA_SAFETY_ON_NULL_RETURN_VAL(part, NULL);
ELM_WIDGET_DATA_GET_OR_RETURN(obj, wd, NULL);
@ -702,7 +703,7 @@ _efl_ui_progressbar_efl_part_part(const Eo *obj, Efl_Ui_Progressbar_Data *sd EIN
if (edje_object_part_drag_dir_get(wd->resize_obj, part) != EFL_UI_DRAG_DIR_NONE)
return ELM_PART_IMPLEMENT(EFL_UI_PROGRESSBAR_PART_CLASS, obj, part);
return efl_part(efl_super(obj, MY_CLASS), part);
return efl_part_get(efl_super(obj, MY_CLASS), part);
}
EOLIAN static void

View File

@ -55,7 +55,7 @@ class Efl.Ui.Progressbar (Efl.Ui.Layout.Object, Efl.Ui.Range, Efl.Ui.Format,
Efl.Ui.Range.range_min_max {get; set; }
Efl.Ui.Direction.direction { get; set; }
Efl.Ui.Format.format_cb { set; }
Efl.Part.part;
Efl.Part.part_get;
Efl.Access.Value.value_and_text { get; }
Efl.Text.text { get; set; }
Efl.Text_Markup.markup { get; set; }

View File

@ -7,6 +7,6 @@ class Efl.Ui.Progressbar_Legacy (Efl.Ui.Progressbar, Efl.Ui.Legacy)
Efl.Object.constructor;
Efl.Ui.Widget.theme_apply;
Efl.Ui.Widget.widget_sub_object_del;
Efl.Part.part;
Efl.Part.part_get;
}
}

View File

@ -5,6 +5,7 @@
#define EFL_ACCESS_OBJECT_PROTECTED
#define EFL_ACCESS_WIDGET_ACTION_PROTECTED
#define ELM_LAYOUT_PROTECTED
#define EFL_PART_PROTECTED
#include <Elementary.h>

View File

@ -7,6 +7,6 @@ class Efl.Ui.Radio_Legacy (Efl.Ui.Radio, Efl.Ui.Legacy)
Efl.Object.constructor;
Efl.Ui.Widget.theme_apply;
Efl.Ui.Widget.widget_sub_object_del;
Efl.Part.part;
Efl.Part.part_get;
}
}

View File

@ -831,7 +831,6 @@ _efl_ui_slider_efl_access_widget_action_elm_actions_get(const Eo *obj EINA_UNUSE
}
// A11Y Accessibility - END
/* Internal EO APIs and hidden overrides */
EFL_VOID_FUNC_BODYV(efl_ui_slider_val_fetch, EFL_FUNC_CALL(user_event), Eina_Bool user_event)

View File

@ -2,6 +2,8 @@
# include "elementary_config.h"
#endif
#define EFL_PART_PROTECTED
#include <Elementary.h>
#include "elm_priv.h"
#include "efl_ui_tab_page_private.h"
@ -66,14 +68,14 @@ _efl_ui_tab_page_efl_object_destructor(Eo *obj, Efl_Ui_Tab_Page_Data *sd EINA_UN
/* Efl.Part begin */
EOLIAN static Eo *
_efl_ui_tab_page_efl_part_part(const Eo *obj, Efl_Ui_Tab_Page_Data *sd EINA_UNUSED, const char *part)
_efl_ui_tab_page_efl_part_part_get(const Eo *obj, Efl_Ui_Tab_Page_Data *sd EINA_UNUSED, const char *part)
{
EINA_SAFETY_ON_NULL_RETURN_VAL(part, NULL);
if (eina_streq(part, "tab"))
return ELM_PART_IMPLEMENT(EFL_UI_TAB_PAGE_PART_TAB_CLASS, obj, part);
return efl_part(efl_super(obj, MY_CLASS), part);
return efl_part_get(efl_super(obj, MY_CLASS), part);
}
EOLIAN static void
@ -126,4 +128,4 @@ _efl_ui_tab_page_part_tab_efl_text_text_get(const Eo *obj, void *_pd EINA_UNUSED
/* Efl.Part end */
#include "efl_ui_tab_page.eo.c"
#include "efl_ui_tab_page.eo.c"

View File

@ -20,7 +20,7 @@ class Efl.Ui.Tab_Page (Efl.Ui.Layout.Object, Efl.Content)
Efl.Object.constructor;
Efl.Object.destructor;
Efl.Content.content { get; set; }
Efl.Part.part;
Efl.Part.part_get;
}
events {
tab,changed: Efl.Ui.Tab_Page_Tab_Changed_Event; [[Called when tab changed]]

View File

@ -3,6 +3,7 @@
#endif
#define ELM_LAYOUT_PROTECTED
#define EFL_PART_PROTECTED
#include <Elementary.h>
#include "elm_priv.h"

View File

@ -50,7 +50,7 @@ class Efl.Ui.Textpath (Efl.Ui.Layout.Object, Efl.Object, Efl.Text, Efl.Gfx.Path)
Efl.Object.destructor;
Efl.Canvas.Group.group_calculate;
Efl.Text.text {get; set;}
Efl.Part.part;
Efl.Part.part_get;
Efl.Ui.Widget.theme_apply;
Efl.Gfx.Entity.position { set; }
Efl.Gfx.Entity.size { set; }

View File

@ -11,6 +11,7 @@
#define EFL_UI_TRANSLATABLE_PROTECTED
#define EFL_UI_FOCUS_OBJECT_PROTECTED
#define EFL_UI_WIDGET_PART_BG_PROTECTED
#define EFL_PART_PROTECTED
#include <Elementary.h>
@ -6047,7 +6048,7 @@ _efl_ui_widget_part_shadow_efl_gfx_filter_filter_state_get(const Eo *obj, void *
/* Efl.Part implementation */
EOLIAN static Efl_Object *
_efl_ui_widget_efl_part_part(const Eo *obj, Elm_Widget_Smart_Data *wd EINA_UNUSED, const char *part)
_efl_ui_widget_efl_part_part_get(const Eo *obj, Elm_Widget_Smart_Data *wd EINA_UNUSED, const char *part)
{
if (eina_streq(part, "background"))
return ELM_PART_IMPLEMENT(EFL_UI_WIDGET_PART_BG_CLASS, obj, part);

View File

@ -590,7 +590,7 @@ abstract Efl.Ui.Widget (Efl.Canvas.Group, Efl.Access.Object,
Efl.Ui.Cursor.cursor_theme_search_enabled { get; set; }
Efl.Ui.Focus.Object.on_focus_update;
Efl.Ui.Translatable.translation_update; [[This implements the calls to $gettext() and $text_set().]]
Efl.Part.part; [[Returns @Efl.Ui.Widget_Part.]]
Efl.Part.part_get; [[Returns @Efl.Ui.Widget_Part.]]
}
events {
moved: Efl.Object; [[Called when widget moved]]

View File

@ -2,7 +2,7 @@ class Efl.Ui.Widget_Part (Efl.Object)
{
[[This is the base class for all "Part" handles in Efl.Ui widgets.
Since objects of this type are returned by @Efl.Part.part, their lifetime
Since objects of this type are returned by @Efl.Part.part_get, their lifetime
is limited to exactly one function call only. Each widget class should
expose more specific types for their API-defined parts.
]]

View File

@ -15,6 +15,7 @@
#define EFL_UI_WIN_BETA
#define EFL_CANVAS_SCENE_BETA
#define EFL_UI_WIDGET_FOCUS_MANAGER_PROTECTED
#define EFL_PART_PROTECTED
#include <Elementary.h>
#include <Elementary_Cursor.h>

View File

@ -817,7 +817,7 @@ class Efl.Ui.Win (Efl.Ui.Widget, Efl.Canvas.Scene, Efl.Canvas.Pointer, Efl.Acces
Efl.Canvas.Scene.seat { get; }
Efl.Content.content { get; set; }
Efl.Content.content_unset;
Efl.Part.part;
Efl.Part.part_get;
}
constructors {
.win_name;

View File

@ -8,6 +8,7 @@
//#define EFL_UI_WIDGET_BETA
#define ELM_WIDGET_ITEM_PROTECTED
#define EFL_UI_TRANSLATABLE_PROTECTED
#define EFL_PART_PROTECTED
#include <Elementary.h>

View File

@ -12,6 +12,7 @@
#define EFL_ACCESS_OBJECT_PROTECTED
#define EFL_ACCESS_WIDGET_ACTION_PROTECTED
#define ELM_INTERFACE_FILESELECTOR_BETA
#define EFL_PART_PROTECTED
#include <Elementary.h>
#include "Eio_Eo.h"

View File

@ -5,6 +5,7 @@
#define EFL_ACCESS_OBJECT_PROTECTED
#define ELM_INTERFACE_FILESELECTOR_BETA
#define EFL_PART_PROTECTED
#include <Elementary.h>
#include "Eio_Eo.h"

View File

@ -7,6 +7,7 @@
//#define ELM_INTERFACE_ATSPI_WIDGET_ACTION_PROTECTED
#define EFL_ACCESS_WIDGET_ACTION_PROTECTED
#define EFL_UI_TRANSLATABLE_PROTECTED
#define EFL_PART_PROTECTED
#include <Elementary.h>
#include "elm_priv.h"

View File

@ -7,6 +7,7 @@
#define ELM_WIDGET_ITEM_PROTECTED
#define ELM_WIDGET_PROTECTED
#define EFL_UI_TRANSLATABLE_PROTECTED
#define EFL_PART_PROTECTED
#include <Elementary.h>
#include "elm_priv.h"

View File

@ -2,10 +2,11 @@
# include "elementary_config.h"
#endif
#include <Emotion.h>
#define EFL_ACCESS_OBJECT_PROTECTED
#define EFL_ACCESS_WIDGET_ACTION_PROTECTED
#define EFL_PART_PROTECTED
#include <Emotion.h>
#include <Elementary.h>
#include "elm_priv.h"

View File

@ -7,6 +7,7 @@
#define ELM_WIDGET_PROTECTED
#define ELM_WIDGET_ITEM_PROTECTED
#define EFL_UI_TRANSLATABLE_PROTECTED
#define EFL_PART_PROTECTED
#include <Elementary.h>
#include "elm_priv.h"

View File

@ -4,6 +4,7 @@
#define EFL_ACCESS_OBJECT_PROTECTED
#define ELM_LAYOUT_PROTECTED
#define EFL_PART_PROTECTED
#include <Elementary.h>
#include <math.h>

View File

@ -72,7 +72,7 @@ class Elm.Actionslider (Efl.Ui.Layout.Object, Efl.Ui.Selectable, Efl.Ui.Legacy)
class.constructor;
Efl.Object.constructor;
Efl.Ui.Widget.theme_apply;
Efl.Part.part;
Efl.Part.part_get;
}
events {
pos_changed: string; [[The position of the actionslider has changed]]

View File

@ -4,6 +4,7 @@
#define EFL_ACCESS_OBJECT_PROTECTED
#define ELM_LAYOUT_PROTECTED
#define EFL_PART_PROTECTED
#include <Elementary.h>
#include "elm_priv.h"

View File

@ -39,6 +39,6 @@ class Elm.Bubble (Efl.Ui.Layout.Object, Efl.Ui.Clickable, Efl.Ui.Legacy)
class.constructor;
Efl.Object.constructor;
Efl.Ui.Widget.on_access_update;
Efl.Part.part;
Efl.Part.part_get;
}
}

View File

@ -240,7 +240,7 @@ class Elm.Ctxpopup (Efl.Ui.Layout.Object, Efl.Ui.Focus.Layer, Efl.Access.Widget.
Efl.Ui.Widget.focused_item { get; }
Efl.Access.Widget.Action.elm_actions { get; }
Efl.Access.Object.state_set { get; }
Efl.Part.part;
Efl.Part.part_get;
}
events {
dismissed: void; [[Called when context popup was dismissed]]

View File

@ -4,6 +4,7 @@
#define EFL_ACCESS_OBJECT_PROTECTED
#define EFL_UI_TRANSLATABLE_PROTECTED
#define EFL_PART_PROTECTED
#include <Elementary.h>
#include "elm_priv.h"

View File

@ -153,7 +153,7 @@ class Elm.Dayselector (Efl.Ui.Layout.Object, Efl.Ui.Legacy)
Efl.Object.constructor;
Efl.Ui.Widget.theme_apply;
Efl.Ui.Translatable.translation_update;
Efl.Part.part;
Efl.Part.part_get;
}
events {
/* FIXME: Nobody emits this

View File

@ -10,6 +10,7 @@
#define EFL_UI_FOCUS_OBJECT_PROTECTED
#define EFL_UI_WIDGET_FOCUS_MANAGER_PROTECTED 1
#define EFL_ACCESS_WIDGET_ACTION_PROTECTED
#define EFL_PART_PROTECTED
#include <Elementary.h>
#include <Elementary_Cursor.h>

View File

@ -898,7 +898,7 @@ class Elm.Entry (Efl.Ui.Layout.Object, Elm.Interface_Scrollable, Efl.Ui.Clickabl
Efl.Access.Editable.Text.paste;
Efl.Access.Widget.Action.elm_actions { get; }
Efl.File.file { get; set; }
Efl.Part.part;
Efl.Part.part_get;
}
events {
activated: void; [[Called when entry got activated]]

View File

@ -54,7 +54,7 @@ class Elm.Fileselector (Efl.Ui.Layout.Object, Elm.Interface.Fileselector,
Elm.Interface.Fileselector.mode { get; set; }
Elm.Interface.Fileselector.current_name { get; set; }
Efl.Access.Widget.Action.elm_actions { get; }
Efl.Part.part;
Efl.Part.part_get;
}
events {
done: string; [[Called when OK button was pressed]]

View File

@ -13,7 +13,7 @@ class Elm.Fileselector_Entry (Efl.Ui.Layout.Object, Elm.Interface.Fileselector,
Elm.Interface.Fileselector.is_save { get; set; }
Efl.Ui.View.model { get; set; }
Elm.Interface.Fileselector.expandable { get; set; }
Efl.Part.part;
Efl.Part.part_get;
}
events {
changed: void; [[Called when the entry changed]]

View File

@ -6,6 +6,7 @@
#define EFL_ACCESS_OBJECT_PROTECTED
#define EFL_ACCESS_WIDGET_ACTION_PROTECTED
#define ELM_LAYOUT_PROTECTED
#define EFL_PART_PROTECTED
#include <Elementary.h>

View File

@ -71,7 +71,7 @@ class Elm.Hover (Efl.Ui.Layout.Object, Efl.Ui.Focus.Layer, Efl.Ui.Clickable,
Efl.Ui.Widget.widget_sub_object_del;
Efl.Access.Widget.Action.elm_actions { get; }
Efl.Access.Object.state_set { get; }
Efl.Part.part;
Efl.Part.part_get;
}
events {
smart,changed: string; [[Called when hover changed]]

View File

@ -5,6 +5,7 @@
#define ELM_WIDGET_PROTECTED
#define EFL_ACCESS_OBJECT_PROTECTED
#define ELM_LAYOUT_PROTECTED
#define EFL_PART_PROTECTED
#include <Elementary.h>

View File

@ -4,6 +4,7 @@
#define EFL_ACCESS_OBJECT_PROTECTED
#define ELM_LAYOUT_PROTECTED
#define EFL_PART_PROTECTED
#include <Elementary.h>

View File

@ -125,7 +125,7 @@ class Elm.Label (Efl.Ui.Layout.Object, Efl.Ui.Legacy)
class.constructor;
Efl.Object.constructor;
Efl.Ui.Widget.theme_apply;
Efl.Part.part;
Efl.Part.part_get;
}
events {
slide,end: void; [[Called when slide stopped]]

View File

@ -3,6 +3,7 @@
#endif
#define EFL_ACCESS_OBJECT_PROTECTED
#define EFL_PART_PROTECTED
#include <Elementary.h>

View File

@ -123,6 +123,6 @@ class Elm.Mapbuf (Efl.Ui.Widget, Efl.Content, Efl.Part, Efl.Ui.Legacy)
Efl.Ui.Widget.widget_sub_object_del;
Efl.Content.content { get; set; }
Efl.Content.content_unset;
Efl.Part.part;
Efl.Part.part_get;
}
}

View File

@ -183,7 +183,7 @@ class Elm.Multibuttonentry (Efl.Ui.Layout.Object, Efl.Ui.Clickable, Efl.Ui.Legac
Efl.Ui.Translatable.translation_update;
Efl.Ui.Widget.widget_event;
Efl.Access.Object.access_children { get; }
Efl.Part.part;
Efl.Part.part_get;
}
events {
item,selected: Efl.Object; [[Called when item was selected]]

View File

@ -151,7 +151,7 @@ class Elm.Naviframe (Efl.Ui.Layout.Object, Efl.Access.Widget.Action, Efl.Ui.Lega
Efl.Layout.Signal.signal_emit;
Efl.Access.Widget.Action.elm_actions { get; }
Efl.Ui.Widget.resize_object { set; }
Efl.Part.part;
Efl.Part.part_get;
}
events {
transition,finished: Efl.Object; [[Called when naviframe transition finished]]

View File

@ -4,6 +4,7 @@
#define ELM_WIDGET_PROTECTED
#define EFL_ACCESS_OBJECT_PROTECTED
#define EFL_PART_PROTECTED
#include <Elementary.h>

View File

@ -88,7 +88,7 @@ class Elm.Notify (Efl.Ui.Widget, Efl.Ui.Focus.Layer, Efl.Content, Efl.Part, Efl.
Efl.Ui.Widget.widget_sub_object_del;
Efl.Content.content { get; set; }
Efl.Content.content_unset;
Efl.Part.part;
Efl.Part.part_get;
}
events {
block,clicked: void; [[Called when block was clicked]]

View File

@ -5,6 +5,7 @@
#define EFL_ACCESS_OBJECT_PROTECTED
#define EFL_ACCESS_WIDGET_ACTION_PROTECTED
#define EFL_UI_FOCUS_LAYER_PROTECTED
#define EFL_PART_PROTECTED
#include <Elementary.h>

View File

@ -85,7 +85,7 @@ class Elm.Panel (Efl.Ui.Layout.Object, Efl.Ui.Focus.Layer, Elm.Interface_Scrolla
Efl.Ui.Widget.widget_event;
Efl.Ui.Widget.interest_region { get; }
Efl.Access.Widget.Action.elm_actions { get; }
Efl.Part.part;
Efl.Part.part_get;
}
events {
toggled: void; [[Called when the hidden state was toggled]]

View File

@ -57,8 +57,6 @@ _elm_part_initialize(Eo *proxy, Eo *obj, const char *part)
Elm_Part_Data *pd = efl_data_scope_get(proxy, EFL_UI_WIDGET_PART_CLASS);
EINA_SAFETY_ON_FALSE_RETURN_VAL(pd && obj && part, NULL);
efl_allow_parent_unref_set(proxy, 1);
___efl_auto_unref_set(proxy, 1);
pd->part = eina_tmpstr_add(part);
pd->obj = obj;
@ -74,17 +72,17 @@ ELM_PART_IMPLEMENT(const Efl_Class *part_klass, const Eo *obj, const char *part)
#define ELM_PART_OVERRIDE_PARTIAL(type, TYPE, typedata, _is_part_cb) \
EOLIAN static Efl_Object * \
_ ## type ## _efl_part_part(const Eo *obj, typedata *priv EINA_UNUSED, const char *part) \
_ ## type ## _efl_part_part_get(const Eo *obj, typedata *priv EINA_UNUSED, const char *part) \
{ \
EINA_SAFETY_ON_NULL_RETURN_VAL(part, NULL); \
if (_is_part_cb(obj, part)) \
return ELM_PART_IMPLEMENT(TYPE ## _PART_CLASS, obj, part); \
return efl_part(efl_super(obj, TYPE ## _CLASS), part); \
return efl_part_get(efl_super(obj, TYPE ## _CLASS), part); \
}
#define ELM_PART_OVERRIDE(type, TYPE, typedata) \
EOLIAN static Efl_Object * \
_ ## type ## _efl_part_part(const Eo *obj, typedata *priv EINA_UNUSED, const char *part) \
_ ## type ## _efl_part_part_get(const Eo *obj, typedata *priv EINA_UNUSED, const char *part) \
{ \
EINA_SAFETY_ON_NULL_RETURN_VAL(part, NULL); \
return ELM_PART_IMPLEMENT(TYPE ## _PART_CLASS, obj, part); \

View File

@ -10,7 +10,7 @@ class Elm.Player (Efl.Ui.Layout.Object, Efl.Access.Widget.Action, Efl.Ui.Legacy)
Efl.Ui.Widget.theme_apply;
Efl.Ui.Widget.widget_event;
Efl.Access.Widget.Action.elm_actions { get; }
Efl.Part.part;
Efl.Part.part_get;
}
events {
forward,clicked: void; [[Called when forward was clicked]]

View File

@ -178,7 +178,7 @@ class Elm.Popup (Efl.Ui.Layout.Object, Efl.Access.Widget.Action, Efl.Ui.Legacy)
Efl.Access.Widget.Action.elm_actions { get; }
Efl.Access.Object.state_set { get; }
Efl.Access.Object.i18n_name { get; }
Efl.Part.part;
Efl.Part.part_get;
}
events {
block,clicked: void; [[Called when popup was clicked]]

View File

@ -4,6 +4,7 @@
#define EFL_ACCESS_OBJECT_PROTECTED
#define EFL_ACCESS_WIDGET_ACTION_PROTECTED
#define EFL_PART_PROTECTED
#include <Elementary.h>

View File

@ -55,7 +55,7 @@ class Elm.Scroller (Efl.Ui.Layout.Object, Elm.Interface_Scrollable,
Elm.Interface_Scrollable.policy { set; }
Elm.Interface_Scrollable.single_direction { get; set; }
Efl.Access.Widget.Action.elm_actions { get; }
Efl.Part.part;
Efl.Part.part_get;
Efl.Ui.Widget.focus_state_apply;
}
events {

View File

@ -6,6 +6,7 @@
#define EFL_ACCESS_WIDGET_ACTION_PROTECTED
#define EFL_ACCESS_VALUE_PROTECTED
#define ELM_LAYOUT_PROTECTED
#define EFL_PART_PROTECTED
#include <Elementary.h>
@ -1100,14 +1101,14 @@ _slider_span_size_set(Eo *obj, Elm_Slider_Data *sd, int size)
/* Efl.Part begin */
EOLIAN static Eo *
_elm_slider_efl_part_part(const Eo *obj, Elm_Slider_Data *sd EINA_UNUSED, const char *part)
_elm_slider_efl_part_part_get(const Eo *obj, Elm_Slider_Data *sd EINA_UNUSED, const char *part)
{
EINA_SAFETY_ON_NULL_RETURN_VAL(part, NULL);
if (eina_streq(part, "indicator"))
return ELM_PART_IMPLEMENT(ELM_SLIDER_PART_INDICATOR_CLASS, obj, part);
return efl_part(efl_super(obj, MY_CLASS), part);
return efl_part_get(efl_super(obj, MY_CLASS), part);
}
EOLIAN static void

View File

@ -21,6 +21,6 @@ class Elm.Slider (Efl.Ui.Slider_Interval, Efl.Ui.Legacy,
Efl.Text_Markup.markup { get; set; }
Efl.Ui.Format.format_cb { set; }
Efl.Ui.Translatable.translatable_text { get; set; }
Efl.Part.part;
Efl.Part.part_get;
}
}

View File

@ -10,9 +10,6 @@
#define EOLIAN
/* When used, this indicates that the function is an Eo API. */
#define EOAPI EAPI EAPI_WEAK
#ifdef _WIN32
# ifdef EFL_BUILD
# ifdef DLL_EXPORT
@ -23,18 +20,25 @@
# else
# define EAPI __declspec(dllimport)
# endif
# define EAPI_WEAK
#else
# ifdef __GNUC__
# if __GNUC__ >= 4
# define EAPI __attribute__ ((visibility("default")))
# define EAPI_WEAK __attribute__ ((weak))
# else
# define EAPI
# define EAPI_WEAK
# endif
# else
# define EAPI
# define EAPI_WEAK
# endif
#endif
/* When used, this indicates that the function is an Eo API. */
#define EOAPI EAPI EAPI_WEAK
#ifdef __cplusplus
extern "C" {
#endif
@ -2163,11 +2167,9 @@ EAPI Eina_Iterator *eo_objects_iterator_new(void);
* @}
*/
/* Private for EFL internal use only. Do not use these! */
EAPI int ___efl_ref2_count(const Eo *obj_id);
EAPI void ___efl_ref2_reset(const Eo *obj_id);
EAPI void ___efl_auto_unref_set(Eo *obj_id, Eina_Bool val);
#endif
@ -2178,4 +2180,7 @@ EAPI void ___efl_auto_unref_set(Eo *obj_id, Eina_Bool val);
#undef EAPI
#define EAPI
#undef EOAPI
#define EOAPI
#endif

38
src/lib/eo/eo_internal.h Normal file
View File

@ -0,0 +1,38 @@
#ifndef _EO_INTERNAL_H_
#define _EO_INTERNAL_H_
#ifdef EAPI
# undef EAPI
#endif
#ifdef _WIN32
# ifdef EFL_BUILD
# ifdef DLL_EXPORT
# define EAPI __declspec(dllexport)
# else
# define EAPI
# endif
# else
# define EAPI __declspec(dllimport)
# endif
#else
# ifdef __GNUC__
# if __GNUC__ >= 4
# define EAPI __attribute__ ((visibility("default")))
# else
# define EAPI
# endif
# else
# define EAPI
# endif
#endif
typedef unsigned char Eina_Bool;
typedef struct _Eo_Opaque Eo;
EAPI void ___efl_auto_unref_set(Eo *obj_id, Eina_Bool enable);
#undef EAPI
#define EAPI
#endif

View File

@ -29,9 +29,8 @@ struct part_implementation_generator
return false;
// FIXME: part_def can't depend on klass_def so C type is not known :(
if(!as_generator(string << ">::type "<< string << "::" << string << "() const\n{\n"
<< scope_tab << "::Eo *__return_value = ::efl_part"
<< "(this->_eo_ptr(), \"" << string << "\");\n"
<< scope_tab << "::___efl_auto_unref_set(__return_value, false);\n")
<< scope_tab << "::Eo *__return_value = ::efl_part_get"
<< "(this->_eo_ptr(), \"" << string << "\");\n")
.generate(sink, std::make_tuple(part.klass.eolian_name, klass_name, part.name, part.name), ctx))
return false;
if(!as_generator(scope_tab << "return ::" << *(string << "::"))

View File

@ -3744,7 +3744,7 @@ void _test_testing_emit_event_with_struct(Eo *obj, EINA_UNUSED Test_Testing_Data
}
Efl_Object *_test_testing_efl_part_part(EINA_UNUSED const Eo *obj, Test_Testing_Data *pd, const char *name)
Efl_Object *_test_testing_efl_part_part_get(EINA_UNUSED const Eo *obj, Test_Testing_Data *pd, const char *name)
{
if (!strcmp(name, "part1"))
return pd->part1;

View File

@ -1646,7 +1646,7 @@ class Test.Testing (Efl.Object, Efl.Part) {
class.constructor;
class.destructor;
Efl.Object.constructor;
Efl.Part.part;
Efl.Part.part_get;
}
events {
evt,with,string @hot: string;