2017-07-27 22:48:48 -07:00
|
|
|
#ifdef HAVE_CONFIG_H
|
|
|
|
# include "elementary_config.h"
|
|
|
|
#endif
|
|
|
|
|
2018-05-03 16:34:17 -07:00
|
|
|
#define EFL_PART_PROTECTED
|
2017-07-27 22:48:48 -07:00
|
|
|
#define EFL_UI_POPUP_PROTECTED
|
2018-05-03 16:34:17 -07:00
|
|
|
#define EFL_PART_PROTECTED
|
2017-07-27 22:48:48 -07:00
|
|
|
|
|
|
|
#include <Elementary.h>
|
|
|
|
|
|
|
|
#include "elm_priv.h"
|
|
|
|
#include "efl_ui_popup_private.h"
|
2018-09-04 22:32:51 -07:00
|
|
|
#include "efl_ui_popup_part_backwall.eo.h"
|
2017-11-10 00:56:34 -08:00
|
|
|
#include "elm_part_helper.h"
|
2017-07-27 22:48:48 -07:00
|
|
|
|
|
|
|
#define MY_CLASS EFL_UI_POPUP_CLASS
|
|
|
|
#define MY_CLASS_NAME "Efl.Ui.Popup"
|
|
|
|
|
2017-11-29 03:21:14 -08:00
|
|
|
static const char PART_NAME_BACKWALL[] = "backwall";
|
|
|
|
|
2017-08-09 23:48:36 -07:00
|
|
|
static void
|
2017-10-30 04:34:42 -07:00
|
|
|
_backwall_clicked_cb(void *data,
|
|
|
|
Eo *o EINA_UNUSED,
|
|
|
|
const char *emission EINA_UNUSED,
|
|
|
|
const char *source EINA_UNUSED)
|
2017-08-09 23:48:36 -07:00
|
|
|
{
|
2017-10-24 02:34:36 -07:00
|
|
|
Eo *obj = data;
|
2017-10-30 04:34:42 -07:00
|
|
|
efl_event_callback_call(obj, EFL_UI_POPUP_EVENT_BACKWALL_CLICKED, NULL);
|
2017-08-09 23:48:36 -07:00
|
|
|
}
|
|
|
|
|
2017-07-27 22:48:48 -07:00
|
|
|
EOLIAN static void
|
2018-04-05 01:47:26 -07:00
|
|
|
_efl_ui_popup_efl_gfx_entity_position_set(Eo *obj, Efl_Ui_Popup_Data *pd EINA_UNUSED, Eina_Position2D pos)
|
2017-07-27 22:48:48 -07:00
|
|
|
{
|
2017-09-05 19:09:08 -07:00
|
|
|
pd->align = EFL_UI_POPUP_ALIGN_NONE;
|
2018-04-05 01:47:26 -07:00
|
|
|
efl_gfx_entity_position_set(efl_super(obj, MY_CLASS), pos);
|
2017-07-27 22:48:48 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
2017-10-24 02:34:36 -07:00
|
|
|
_calc_align(Eo *obj)
|
2017-07-27 22:48:48 -07:00
|
|
|
{
|
2017-08-30 23:21:04 -07:00
|
|
|
Efl_Ui_Popup_Data *pd = efl_data_scope_get(obj, MY_CLASS);
|
|
|
|
|
2018-04-05 01:47:26 -07:00
|
|
|
Eina_Rect p_geom = efl_gfx_entity_geometry_get(pd->win_parent);
|
2017-08-17 01:37:54 -07:00
|
|
|
|
2018-04-05 01:47:26 -07:00
|
|
|
Eina_Rect o_geom = efl_gfx_entity_geometry_get(obj);
|
2017-08-17 01:37:54 -07:00
|
|
|
|
|
|
|
Evas_Coord pw, ph;
|
2017-10-24 02:34:36 -07:00
|
|
|
pw = p_geom.w;
|
|
|
|
ph = p_geom.h;
|
|
|
|
|
|
|
|
Evas_Coord ow, oh;
|
|
|
|
ow = o_geom.w;
|
|
|
|
oh = o_geom.h;
|
2017-07-27 22:48:48 -07:00
|
|
|
|
2017-09-19 00:23:43 -07:00
|
|
|
switch (pd->align)
|
2017-07-27 22:48:48 -07:00
|
|
|
{
|
2017-10-24 02:34:36 -07:00
|
|
|
case EFL_UI_POPUP_ALIGN_CENTER:
|
2018-04-05 01:47:26 -07:00
|
|
|
efl_gfx_entity_position_set(efl_super(obj, MY_CLASS), EINA_POSITION2D((pw - ow ) / 2, (ph - oh) / 2));
|
2017-10-24 02:34:36 -07:00
|
|
|
break;
|
|
|
|
case EFL_UI_POPUP_ALIGN_LEFT:
|
2018-04-05 01:47:26 -07:00
|
|
|
efl_gfx_entity_position_set(efl_super(obj, MY_CLASS), EINA_POSITION2D(0, (ph - oh) / 2));
|
2017-10-24 02:34:36 -07:00
|
|
|
break;
|
|
|
|
case EFL_UI_POPUP_ALIGN_RIGHT:
|
2018-04-05 01:47:26 -07:00
|
|
|
efl_gfx_entity_position_set(efl_super(obj, MY_CLASS), EINA_POSITION2D(pw - ow, (ph - oh) / 2));
|
2017-10-24 02:34:36 -07:00
|
|
|
break;
|
|
|
|
case EFL_UI_POPUP_ALIGN_TOP:
|
2018-04-05 01:47:26 -07:00
|
|
|
efl_gfx_entity_position_set(efl_super(obj, MY_CLASS), EINA_POSITION2D((pw - ow) / 2, 0));
|
2017-10-24 02:34:36 -07:00
|
|
|
break;
|
|
|
|
case EFL_UI_POPUP_ALIGN_BOTTOM:
|
2018-04-05 01:47:26 -07:00
|
|
|
efl_gfx_entity_position_set(efl_super(obj, MY_CLASS), EINA_POSITION2D((pw - ow) / 2, ph - oh));
|
2017-10-24 02:34:36 -07:00
|
|
|
break;
|
|
|
|
default:
|
|
|
|
break;
|
2017-07-27 22:48:48 -07:00
|
|
|
}
|
2017-08-17 01:37:54 -07:00
|
|
|
}
|
|
|
|
|
2017-12-07 23:02:56 -08:00
|
|
|
EOLIAN static void
|
2018-04-05 01:47:26 -07:00
|
|
|
_efl_ui_popup_efl_gfx_entity_size_set(Eo *obj, Efl_Ui_Popup_Data *pd EINA_UNUSED, Eina_Size2D size)
|
2017-12-07 23:02:56 -08:00
|
|
|
{
|
2018-04-05 01:47:26 -07:00
|
|
|
efl_gfx_entity_size_set(efl_super(obj, MY_CLASS), size);
|
2017-12-13 01:06:59 -08:00
|
|
|
|
2019-07-30 10:11:19 -07:00
|
|
|
efl_canvas_group_change(obj);
|
2017-12-07 23:02:56 -08:00
|
|
|
}
|
|
|
|
|
2017-08-17 01:37:54 -07:00
|
|
|
static void
|
|
|
|
_parent_geom_cb(void *data, const Efl_Event *ev EINA_UNUSED)
|
|
|
|
{
|
2017-12-13 01:06:59 -08:00
|
|
|
Eo *obj = data;
|
|
|
|
|
|
|
|
EFL_UI_POPUP_DATA_GET_OR_RETURN(obj, pd);
|
|
|
|
|
2019-07-30 10:11:19 -07:00
|
|
|
efl_canvas_group_change(obj);
|
2017-07-27 22:48:48 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
EOLIAN static void
|
2019-07-26 10:22:44 -07:00
|
|
|
_efl_ui_popup_efl_ui_widget_widget_parent_set(Eo *obj, Efl_Ui_Popup_Data *pd EINA_UNUSED, Eo *parent)
|
2017-07-27 22:48:48 -07:00
|
|
|
{
|
2019-07-26 10:22:44 -07:00
|
|
|
if (!parent)
|
|
|
|
{
|
|
|
|
/* unsetting parent, probably before deletion */
|
|
|
|
if (pd->win_parent)
|
|
|
|
{
|
|
|
|
efl_event_callback_del(pd->win_parent, EFL_GFX_ENTITY_EVENT_SIZE_CHANGED, _parent_geom_cb, obj);
|
|
|
|
efl_event_callback_del(pd->win_parent, EFL_GFX_ENTITY_EVENT_POSITION_CHANGED, _parent_geom_cb, obj);
|
|
|
|
}
|
|
|
|
goto end;
|
|
|
|
}
|
2017-07-27 22:48:48 -07:00
|
|
|
pd->win_parent = efl_provider_find(obj, EFL_UI_WIN_CLASS);
|
|
|
|
if (!pd->win_parent)
|
|
|
|
{
|
|
|
|
ERR("Cannot find window parent");
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
2018-04-05 01:47:26 -07:00
|
|
|
Eina_Rect p_geom = efl_gfx_entity_geometry_get(pd->win_parent);
|
2017-10-24 02:34:36 -07:00
|
|
|
|
2018-04-05 01:47:26 -07:00
|
|
|
efl_gfx_entity_position_set(pd->backwall, EINA_POSITION2D(p_geom.x, p_geom.y));
|
|
|
|
efl_gfx_entity_size_set(pd->backwall, EINA_SIZE2D(p_geom.w, p_geom.h));
|
2017-07-27 22:48:48 -07:00
|
|
|
|
2019-02-21 10:01:56 -08:00
|
|
|
efl_event_callback_add(pd->win_parent, EFL_GFX_ENTITY_EVENT_SIZE_CHANGED, _parent_geom_cb, obj);
|
|
|
|
efl_event_callback_add(pd->win_parent, EFL_GFX_ENTITY_EVENT_POSITION_CHANGED, _parent_geom_cb, obj);
|
2019-07-26 10:22:44 -07:00
|
|
|
end:
|
2019-04-22 12:30:05 -07:00
|
|
|
efl_ui_widget_parent_set(efl_super(obj, MY_CLASS), parent);
|
2017-07-27 22:48:48 -07:00
|
|
|
}
|
|
|
|
|
2017-08-17 01:37:54 -07:00
|
|
|
EOLIAN static void
|
|
|
|
_efl_ui_popup_align_set(Eo *obj EINA_UNUSED, Efl_Ui_Popup_Data *pd, Efl_Ui_Popup_Align type)
|
|
|
|
{
|
|
|
|
pd->align = type;
|
2017-12-13 01:06:59 -08:00
|
|
|
|
2019-07-30 10:11:19 -07:00
|
|
|
efl_canvas_group_change(obj);
|
2017-08-17 01:37:54 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
EOLIAN static Efl_Ui_Popup_Align
|
2018-04-17 11:09:44 -07:00
|
|
|
_efl_ui_popup_align_get(const Eo *obj EINA_UNUSED, Efl_Ui_Popup_Data *pd)
|
2017-08-17 01:37:54 -07:00
|
|
|
{
|
|
|
|
return pd->align;
|
|
|
|
}
|
|
|
|
|
2017-12-07 23:06:20 -08:00
|
|
|
EOLIAN static void
|
|
|
|
_efl_ui_popup_popup_size_set(Eo *obj, Efl_Ui_Popup_Data *pd EINA_UNUSED, Eina_Size2D size)
|
|
|
|
{
|
2018-04-05 01:47:26 -07:00
|
|
|
efl_gfx_entity_size_set(obj, size);
|
2017-12-07 23:06:20 -08:00
|
|
|
}
|
|
|
|
|
|
|
|
EOLIAN static Eina_Size2D
|
2018-04-17 11:09:44 -07:00
|
|
|
_efl_ui_popup_popup_size_get(const Eo *obj, Efl_Ui_Popup_Data *pd EINA_UNUSED)
|
2017-12-07 23:06:20 -08:00
|
|
|
{
|
2018-04-05 01:47:26 -07:00
|
|
|
return efl_gfx_entity_size_get(obj);
|
2017-12-07 23:06:20 -08:00
|
|
|
}
|
|
|
|
|
2017-09-21 01:21:18 -07:00
|
|
|
static Eina_Bool
|
|
|
|
_timer_cb(void *data)
|
|
|
|
{
|
2017-10-24 02:34:36 -07:00
|
|
|
Eo *popup = data;
|
2017-10-26 00:32:58 -07:00
|
|
|
efl_event_callback_call(popup, EFL_UI_POPUP_EVENT_TIMEOUT, NULL);
|
2017-10-24 02:34:36 -07:00
|
|
|
efl_del(popup);
|
2017-09-21 01:21:18 -07:00
|
|
|
|
|
|
|
return ECORE_CALLBACK_CANCEL;
|
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
|
|
|
_timer_del(Efl_Ui_Popup_Data *pd)
|
|
|
|
{
|
|
|
|
if (pd->timer)
|
|
|
|
{
|
|
|
|
ecore_timer_del(pd->timer);
|
|
|
|
pd->timer = NULL;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
|
|
|
_timer_init(Eo *obj, Efl_Ui_Popup_Data *pd)
|
|
|
|
{
|
|
|
|
if (pd->timeout > 0.0)
|
|
|
|
pd->timer = ecore_timer_add(pd->timeout, _timer_cb, obj);
|
|
|
|
}
|
|
|
|
|
|
|
|
EOLIAN static void
|
2018-04-05 01:47:26 -07:00
|
|
|
_efl_ui_popup_efl_gfx_entity_visible_set(Eo *obj, Efl_Ui_Popup_Data *pd, Eina_Bool v)
|
2017-09-21 01:21:18 -07:00
|
|
|
{
|
|
|
|
if (_evas_object_intercept_call(obj, EVAS_OBJECT_INTERCEPT_CB_VISIBLE, 0, v))
|
|
|
|
return;
|
|
|
|
|
2018-04-05 01:47:26 -07:00
|
|
|
efl_gfx_entity_visible_set(efl_super(obj, MY_CLASS), v);
|
2017-09-21 01:21:18 -07:00
|
|
|
|
|
|
|
if (v)
|
|
|
|
{
|
|
|
|
_timer_del(pd);
|
|
|
|
_timer_init(obj, pd);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
EOLIAN static void
|
|
|
|
_efl_ui_popup_timeout_set(Eo *obj, Efl_Ui_Popup_Data *pd, double time)
|
|
|
|
{
|
|
|
|
if (time < 0.0)
|
|
|
|
time = 0.0;
|
|
|
|
|
|
|
|
pd->timeout = time;
|
|
|
|
|
|
|
|
_timer_del(pd);
|
|
|
|
|
2018-04-05 01:47:26 -07:00
|
|
|
if (efl_gfx_entity_visible_get(obj))
|
2017-09-21 01:21:18 -07:00
|
|
|
_timer_init(obj, pd);
|
|
|
|
}
|
|
|
|
|
|
|
|
EOLIAN static double
|
2018-04-17 11:09:44 -07:00
|
|
|
_efl_ui_popup_timeout_get(const Eo *obj EINA_UNUSED, Efl_Ui_Popup_Data *pd)
|
2017-09-21 01:21:18 -07:00
|
|
|
{
|
|
|
|
return pd->timeout;
|
|
|
|
}
|
|
|
|
|
2017-10-24 05:29:15 -07:00
|
|
|
EOLIAN static Eo *
|
|
|
|
_efl_ui_popup_efl_object_constructor(Eo *obj, Efl_Ui_Popup_Data *pd)
|
2017-07-27 22:48:48 -07:00
|
|
|
{
|
2017-10-24 05:29:15 -07:00
|
|
|
ELM_WIDGET_DATA_GET_OR_RETURN(obj, wd, NULL);
|
|
|
|
|
2017-11-29 03:21:14 -08:00
|
|
|
if (!elm_widget_theme_klass_get(obj))
|
|
|
|
elm_widget_theme_klass_set(obj, "popup");
|
2017-10-24 05:29:15 -07:00
|
|
|
obj = efl_constructor(efl_super(obj, MY_CLASS));
|
|
|
|
efl_canvas_object_type_set(obj, MY_CLASS_NAME);
|
2017-07-27 22:48:48 -07:00
|
|
|
|
|
|
|
elm_widget_can_focus_set(obj, EINA_TRUE);
|
2019-03-04 10:36:41 -08:00
|
|
|
if (elm_widget_theme_object_set(obj, wd->resize_obj,
|
2017-11-29 03:21:14 -08:00
|
|
|
elm_widget_theme_klass_get(obj),
|
|
|
|
elm_widget_theme_element_get(obj),
|
2019-03-04 10:36:41 -08:00
|
|
|
elm_widget_theme_style_get(obj)) == EFL_UI_THEME_APPLY_ERROR_GENERIC)
|
2017-11-29 03:21:14 -08:00
|
|
|
CRI("Failed to set layout!");
|
2017-07-27 22:48:48 -07:00
|
|
|
|
2017-10-30 04:34:42 -07:00
|
|
|
pd->backwall = edje_object_add(evas_object_evas_get(obj));
|
2017-11-29 03:21:14 -08:00
|
|
|
elm_widget_element_update(obj, pd->backwall, PART_NAME_BACKWALL);
|
2017-10-30 04:34:42 -07:00
|
|
|
evas_object_smart_member_add(pd->backwall, obj);
|
|
|
|
evas_object_stack_below(pd->backwall, wd->resize_obj);
|
2017-08-09 23:48:36 -07:00
|
|
|
|
2018-04-26 04:24:09 -07:00
|
|
|
edje_object_signal_callback_add(pd->backwall, "efl,action,clicked", "*",
|
2017-10-30 04:34:42 -07:00
|
|
|
_backwall_clicked_cb, obj);
|
2017-08-17 01:37:54 -07:00
|
|
|
|
|
|
|
pd->align = EFL_UI_POPUP_ALIGN_CENTER;
|
2017-10-24 05:29:15 -07:00
|
|
|
|
|
|
|
return obj;
|
2017-07-27 22:48:48 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
EOLIAN static void
|
2017-10-24 05:29:15 -07:00
|
|
|
_efl_ui_popup_efl_object_destructor(Eo *obj, Efl_Ui_Popup_Data *pd)
|
2017-07-27 22:48:48 -07:00
|
|
|
{
|
2017-10-30 04:34:42 -07:00
|
|
|
ELM_SAFE_DEL(pd->backwall);
|
2017-07-27 22:48:48 -07:00
|
|
|
|
2019-02-21 10:01:56 -08:00
|
|
|
efl_event_callback_del(pd->win_parent, EFL_GFX_ENTITY_EVENT_SIZE_CHANGED, _parent_geom_cb,
|
2017-10-24 05:29:15 -07:00
|
|
|
obj);
|
2019-02-21 10:01:56 -08:00
|
|
|
efl_event_callback_del(pd->win_parent, EFL_GFX_ENTITY_EVENT_POSITION_CHANGED, _parent_geom_cb,
|
2017-10-24 05:29:15 -07:00
|
|
|
obj);
|
|
|
|
|
|
|
|
efl_destructor(efl_super(obj, MY_CLASS));
|
2017-07-27 22:48:48 -07:00
|
|
|
}
|
|
|
|
|
2017-12-08 01:11:09 -08:00
|
|
|
static void
|
2017-12-13 01:06:59 -08:00
|
|
|
_sizing_eval(Eo *obj)
|
2017-07-27 22:48:48 -07:00
|
|
|
{
|
2019-07-30 10:11:48 -07:00
|
|
|
Eina_Size2D min;
|
2017-07-27 22:48:48 -07:00
|
|
|
|
2019-07-30 10:11:48 -07:00
|
|
|
/* trigger layout calc */
|
|
|
|
efl_canvas_group_calculate(efl_super(obj, MY_CLASS));
|
|
|
|
min = efl_gfx_hint_size_restricted_min_get(obj);
|
2017-10-24 02:34:36 -07:00
|
|
|
|
2018-04-05 01:47:26 -07:00
|
|
|
Eina_Size2D size = efl_gfx_entity_size_get(obj);
|
2017-10-24 02:34:36 -07:00
|
|
|
|
|
|
|
Eina_Size2D new_size;
|
2019-07-30 10:11:48 -07:00
|
|
|
new_size.w = (min.w > size.w ? min.w : size.w);
|
|
|
|
new_size.h = (min.h > size.h ? min.h : size.h);
|
2018-04-05 01:47:26 -07:00
|
|
|
efl_gfx_entity_size_set(obj, new_size);
|
2019-07-30 10:11:48 -07:00
|
|
|
efl_canvas_group_calculate(efl_super(obj, MY_CLASS));
|
2017-12-08 01:11:09 -08:00
|
|
|
}
|
|
|
|
|
|
|
|
EOLIAN static void
|
|
|
|
_efl_ui_popup_efl_canvas_group_group_calculate(Eo *obj, Efl_Ui_Popup_Data *pd)
|
|
|
|
{
|
2019-07-30 10:11:19 -07:00
|
|
|
/* When efl_canvas_group_change() is called, just flag is set instead of size
|
2017-12-08 01:11:09 -08:00
|
|
|
* calculation.
|
|
|
|
* The actual size calculation is done here when the object is rendered to
|
|
|
|
* avoid duplicate size calculations. */
|
2019-07-30 10:11:48 -07:00
|
|
|
efl_canvas_group_need_recalculate_set(obj, EINA_FALSE);
|
|
|
|
_sizing_eval(obj);
|
|
|
|
_calc_align(obj);
|
2017-12-14 20:56:25 -08:00
|
|
|
|
2019-07-30 10:11:48 -07:00
|
|
|
Eina_Rect p_geom = efl_gfx_entity_geometry_get(pd->win_parent);
|
2017-12-14 20:56:25 -08:00
|
|
|
|
2019-07-30 10:11:48 -07:00
|
|
|
efl_gfx_entity_position_set(pd->backwall, EINA_POSITION2D(0, 0));
|
|
|
|
efl_gfx_entity_size_set(pd->backwall, EINA_SIZE2D(p_geom.w, p_geom.h));
|
2017-12-08 01:11:09 -08:00
|
|
|
}
|
|
|
|
|
2017-11-27 01:50:11 -08:00
|
|
|
/* Standard widget overrides */
|
|
|
|
|
|
|
|
ELM_PART_CONTENT_DEFAULT_IMPLEMENT(efl_ui_popup, Efl_Ui_Popup_Data)
|
|
|
|
|
2017-11-10 00:56:34 -08:00
|
|
|
EOLIAN static Eo *
|
2018-05-03 16:34:17 -07:00
|
|
|
_efl_ui_popup_efl_part_part_get(const Eo *obj, Efl_Ui_Popup_Data *_pd EINA_UNUSED, const char *part)
|
2017-11-10 00:56:34 -08:00
|
|
|
{
|
|
|
|
EINA_SAFETY_ON_NULL_RETURN_VAL(part, NULL);
|
|
|
|
|
2018-09-04 22:32:51 -07:00
|
|
|
if (eina_streq(part, PART_NAME_BACKWALL))
|
|
|
|
return ELM_PART_IMPLEMENT(EFL_UI_POPUP_PART_BACKWALL_CLASS, obj, part);
|
2017-11-10 00:56:34 -08:00
|
|
|
|
2018-05-03 16:34:17 -07:00
|
|
|
return efl_part_get(efl_super(obj, MY_CLASS), part);
|
2017-08-09 23:48:36 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
EOLIAN static void
|
efl_ui_popup: Remove inheritance from Efl.Canvas.Object
Summary:
Class Efl.Ui.Popup_Part_Backwall inherits from multiple classes,
class Efl.Ui.Layout.Part and abstract Efl.Canvas.Object.
To remove multiple class inheritance, Efl.Canvas.Object is not
derived and its property, repeat_events, is newly defined in
Efl.Ui.Popup_Part_Backwall.
Test Plan:
1. Execute elementary_test.
2. Select Efl.Ui.Popup.
3. Select "Show Dummy Button".
4. Select "Repeat Event Set".
5. Test if repeat event works.
Reviewers: woohyun, felipealmeida, Hermet, segfaultxavi
Reviewed By: Hermet, segfaultxavi
Subscribers: bu5hm4n, q66, cedric, segfaultxavi, lauromoura, #reviewers, herb, #committers
Tags: #efl
Differential Revision: https://phab.enlightenment.org/D6984
2018-09-09 21:29:54 -07:00
|
|
|
_efl_ui_popup_part_backwall_repeat_events_set(Eo *obj, void *_pd EINA_UNUSED, Eina_Bool repeat)
|
2017-11-10 00:56:34 -08:00
|
|
|
{
|
|
|
|
Elm_Part_Data *pd = efl_data_scope_get(obj, EFL_UI_WIDGET_PART_CLASS);
|
|
|
|
Efl_Ui_Popup_Data *sd = efl_data_scope_get(pd->obj, EFL_UI_POPUP_CLASS);
|
|
|
|
|
2018-09-04 22:32:51 -07:00
|
|
|
efl_canvas_object_repeat_events_set(sd->backwall, repeat);
|
2017-11-10 00:56:34 -08:00
|
|
|
}
|
|
|
|
|
|
|
|
EOLIAN static Eina_Bool
|
efl_ui_popup: Remove inheritance from Efl.Canvas.Object
Summary:
Class Efl.Ui.Popup_Part_Backwall inherits from multiple classes,
class Efl.Ui.Layout.Part and abstract Efl.Canvas.Object.
To remove multiple class inheritance, Efl.Canvas.Object is not
derived and its property, repeat_events, is newly defined in
Efl.Ui.Popup_Part_Backwall.
Test Plan:
1. Execute elementary_test.
2. Select Efl.Ui.Popup.
3. Select "Show Dummy Button".
4. Select "Repeat Event Set".
5. Test if repeat event works.
Reviewers: woohyun, felipealmeida, Hermet, segfaultxavi
Reviewed By: Hermet, segfaultxavi
Subscribers: bu5hm4n, q66, cedric, segfaultxavi, lauromoura, #reviewers, herb, #committers
Tags: #efl
Differential Revision: https://phab.enlightenment.org/D6984
2018-09-09 21:29:54 -07:00
|
|
|
_efl_ui_popup_part_backwall_repeat_events_get(const Eo *obj, void *_pd EINA_UNUSED)
|
2017-08-09 23:48:36 -07:00
|
|
|
{
|
2017-11-10 00:56:34 -08:00
|
|
|
Elm_Part_Data *pd = efl_data_scope_get(obj, EFL_UI_WIDGET_PART_CLASS);
|
|
|
|
Efl_Ui_Popup_Data *sd = efl_data_scope_get(pd->obj, EFL_UI_POPUP_CLASS);
|
|
|
|
|
2018-09-04 22:32:51 -07:00
|
|
|
return efl_canvas_object_repeat_events_get(sd->backwall);
|
2017-08-09 23:48:36 -07:00
|
|
|
}
|
|
|
|
|
2019-07-26 09:54:41 -07:00
|
|
|
EOLIAN static void
|
|
|
|
_efl_ui_popup_part_backwall_efl_file_unload(Eo *obj, void *_pd EINA_UNUSED)
|
|
|
|
{
|
|
|
|
Elm_Part_Data *pd = efl_data_scope_get(obj, EFL_UI_WIDGET_PART_CLASS);
|
|
|
|
Efl_Ui_Popup_Data *sd = efl_data_scope_get(pd->obj, EFL_UI_POPUP_CLASS);
|
|
|
|
|
|
|
|
efl_file_unload(efl_super(obj, EFL_UI_POPUP_PART_BACKWALL_CLASS));
|
|
|
|
Eo *prev_obj = edje_object_part_swallow_get(sd->backwall, "efl.content");
|
|
|
|
if (prev_obj)
|
|
|
|
{
|
|
|
|
edje_object_signal_emit(sd->backwall, "efl,state,content,unset", "efl");
|
|
|
|
edje_object_part_unswallow(sd->backwall, prev_obj);
|
|
|
|
efl_del(prev_obj);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2019-02-27 10:17:09 -08:00
|
|
|
EOLIAN static Eina_Error
|
|
|
|
_efl_ui_popup_part_backwall_efl_file_load(Eo *obj, void *_pd EINA_UNUSED)
|
2017-08-09 23:48:36 -07:00
|
|
|
{
|
2017-11-10 00:56:34 -08:00
|
|
|
Elm_Part_Data *pd = efl_data_scope_get(obj, EFL_UI_WIDGET_PART_CLASS);
|
|
|
|
Efl_Ui_Popup_Data *sd = efl_data_scope_get(pd->obj, EFL_UI_POPUP_CLASS);
|
|
|
|
|
2019-02-27 10:17:09 -08:00
|
|
|
Eina_Error err;
|
|
|
|
|
|
|
|
if (efl_file_loaded_get(obj)) return 0;
|
|
|
|
|
2019-07-26 09:56:10 -07:00
|
|
|
err = efl_file_load(efl_super(obj, EFL_UI_POPUP_PART_BACKWALL_CLASS));
|
2019-02-27 10:17:09 -08:00
|
|
|
if (err) return err;
|
|
|
|
|
2018-09-04 22:32:51 -07:00
|
|
|
Eo *prev_obj = edje_object_part_swallow_get(sd->backwall, "efl.content");
|
|
|
|
if (prev_obj)
|
2017-11-10 00:56:34 -08:00
|
|
|
{
|
2018-09-04 22:32:51 -07:00
|
|
|
edje_object_signal_emit(sd->backwall, "efl,state,content,unset", "efl");
|
|
|
|
edje_object_part_unswallow(sd->backwall, prev_obj);
|
|
|
|
efl_del(prev_obj);
|
|
|
|
}
|
2017-11-10 00:56:34 -08:00
|
|
|
|
2018-09-04 22:32:51 -07:00
|
|
|
Eo *image = elm_image_add(pd->obj);
|
2019-02-27 10:17:09 -08:00
|
|
|
Eina_Bool ret;
|
|
|
|
const Eina_File *f;
|
|
|
|
|
|
|
|
f = efl_file_mmap_get(obj);
|
|
|
|
if (f)
|
|
|
|
ret = elm_image_mmap_set(image, f, efl_file_key_get(obj));
|
|
|
|
else
|
|
|
|
ret = elm_image_file_set(image, efl_file_get(obj), efl_file_key_get(obj));
|
2018-09-04 22:32:51 -07:00
|
|
|
if (!ret)
|
|
|
|
{
|
|
|
|
efl_del(image);
|
2019-02-27 10:17:09 -08:00
|
|
|
return EFL_GFX_IMAGE_LOAD_ERROR_GENERIC;
|
2017-11-10 00:56:34 -08:00
|
|
|
}
|
2018-09-04 22:32:51 -07:00
|
|
|
edje_object_part_swallow(sd->backwall, "efl.content", image);
|
|
|
|
edje_object_signal_emit(sd->backwall, "efl,state,content,set", "efl");
|
2017-11-10 00:56:34 -08:00
|
|
|
|
2019-02-27 10:17:09 -08:00
|
|
|
return 0;
|
2017-07-27 22:48:48 -07:00
|
|
|
}
|
|
|
|
|
2018-09-04 22:32:51 -07:00
|
|
|
#include "efl_ui_popup_part_backwall.eo.c"
|
2017-11-10 00:56:34 -08:00
|
|
|
|
|
|
|
/* Efl.Part end */
|
|
|
|
|
2017-07-27 22:48:48 -07:00
|
|
|
#include "efl_ui_popup.eo.c"
|