summaryrefslogtreecommitdiff
path: root/src/lib/elementary/efl_ui_widget.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/elementary/efl_ui_widget.c')
-rw-r--r--src/lib/elementary/efl_ui_widget.c708
1 files changed, 258 insertions, 450 deletions
diff --git a/src/lib/elementary/efl_ui_widget.c b/src/lib/elementary/efl_ui_widget.c
index 9123831..e39bea0 100644
--- a/src/lib/elementary/efl_ui_widget.c
+++ b/src/lib/elementary/efl_ui_widget.c
@@ -17,6 +17,7 @@
17#include "elm_priv.h" 17#include "elm_priv.h"
18#include "elm_widget_container.h" 18#include "elm_widget_container.h"
19#include "elm_interface_scrollable.h" 19#include "elm_interface_scrollable.h"
20#include "elm_pan_eo.h"
20#include "elm_part_helper.h" 21#include "elm_part_helper.h"
21#include "elm_widget_combobox.h" 22#include "elm_widget_combobox.h"
22 23
@@ -161,7 +162,7 @@ static inline Eina_Bool
161_is_focusable(Evas_Object *obj) 162_is_focusable(Evas_Object *obj)
162{ 163{
163 API_ENTRY return EINA_FALSE; 164 API_ENTRY return EINA_FALSE;
164 return sd->can_focus || (sd->child_can_focus); 165 return sd->can_focus || (sd->logical.child_count > 0);
165} 166}
166 167
167static inline Eina_Bool 168static inline Eina_Bool
@@ -184,8 +185,6 @@ _elm_scrollable_is(const Evas_Object *obj)
184} 185}
185 186
186static void 187static void
187elm_widget_disabled_internal(Eo *obj, Eina_Bool disabled);
188static void
189_on_sub_obj_del(void *data, const Efl_Event *event); 188_on_sub_obj_del(void *data, const Efl_Event *event);
190static void _propagate_event(void *data, const Efl_Event *eo_event); 189static void _propagate_event(void *data, const Efl_Event *eo_event);
191static void _elm_widget_focus_tree_unfocusable_handle(Eo *obj); 190static void _elm_widget_focus_tree_unfocusable_handle(Eo *obj);
@@ -236,7 +235,7 @@ _elm_widget_item_highlight_in_theme(Evas_Object *obj, Elm_Object_Item *eo_it)
236 { 235 {
237 Elm_Widget_Item_Data *it = efl_data_scope_get(eo_it, ELM_WIDGET_ITEM_CLASS); 236 Elm_Widget_Item_Data *it = efl_data_scope_get(eo_it, ELM_WIDGET_ITEM_CLASS);
238 237
239 if (efl_isa(it->view, EFL_UI_LAYOUT_CLASS)) 238 if (efl_isa(it->view, EFL_UI_LAYOUT_BASE_CLASS))
240 str = edje_object_data_get(elm_layout_edje_get(it->view), "focus_highlight"); 239 str = edje_object_data_get(elm_layout_edje_get(it->view), "focus_highlight");
241 else 240 else
242 str = edje_object_data_get(it->view, "focus_highlight"); 241 str = edje_object_data_get(it->view, "focus_highlight");
@@ -268,74 +267,6 @@ _efl_ui_widget_focus_highlight_object_get(const Evas_Object *obj)
268 return NULL; 267 return NULL;
269} 268}
270 269
271EOLIAN static Eina_Bool
272_efl_ui_widget_focus_highlight_enabled_get(const Eo *obj, Elm_Widget_Smart_Data *sd EINA_UNUSED)
273{
274 // Forward to closest parent Window
275 const Evas_Object *win = elm_widget_top_get(obj);
276
277 if (win && efl_isa(win, EFL_UI_WIN_CLASS))
278 return elm_win_focus_highlight_enabled_get(win);
279
280 return EINA_FALSE;
281}
282
283EOLIAN static void
284_efl_ui_widget_focus_highlight_enabled_set(Eo *obj, Elm_Widget_Smart_Data *sd EINA_UNUSED, Eina_Bool enable)
285{
286 // Forward to closest parent Window
287 Evas_Object *win = elm_widget_top_get(obj);
288
289 if (win && efl_isa(win, EFL_UI_WIN_CLASS))
290 elm_win_focus_highlight_enabled_set(win, enable);
291}
292
293EOLIAN static Eina_Bool
294_efl_ui_widget_focus_highlight_animate_get(const Eo *obj, Elm_Widget_Smart_Data *sd EINA_UNUSED)
295{
296 // Forward to closest parent Window
297 const Evas_Object *win = elm_widget_top_get(obj);
298
299 if (win && efl_isa(win, EFL_UI_WIN_CLASS))
300 return elm_win_focus_highlight_animate_get(win);
301
302 return EINA_FALSE;
303}
304
305EOLIAN static void
306_efl_ui_widget_focus_highlight_animate_set(Eo *obj, Elm_Widget_Smart_Data *sd EINA_UNUSED, Eina_Bool enable)
307{
308 // Forward to closest parent Window
309 Evas_Object *win = elm_widget_top_get(obj);
310
311 if (win && efl_isa(win, EFL_UI_WIN_CLASS))
312 elm_win_focus_highlight_animate_set(win, enable);
313}
314
315EOLIAN static Eina_Bool
316_efl_ui_widget_focus_highlight_style_set(Eo *obj, Elm_Widget_Smart_Data *sd EINA_UNUSED, const char *style)
317{
318 // Forward to closest parent Window
319 Evas_Object *win = elm_widget_top_get(obj);
320
321 if (win && efl_isa(win, EFL_UI_WIN_CLASS))
322 return efl_ui_widget_focus_highlight_style_set(win, style);
323
324 return EINA_FALSE;
325}
326
327EOLIAN static const char *
328_efl_ui_widget_focus_highlight_style_get(const Eo *obj, Elm_Widget_Smart_Data *sd EINA_UNUSED)
329{
330 // Forward to closest parent Window
331 Evas_Object *win = elm_widget_top_get(obj);
332
333 if (win && efl_isa(win, EFL_UI_WIN_CLASS))
334 return elm_win_focus_highlight_style_get(win);
335
336 return NULL;
337}
338
339static Eina_Bool 270static Eina_Bool
340_candidacy_exam(Eo *obj) 271_candidacy_exam(Eo *obj)
341{ 272{
@@ -954,11 +885,11 @@ _efl_ui_widget_efl_gfx_entity_visible_set(Eo *obj, Elm_Widget_Smart_Data *pd, Ei
954 { 885 {
955 efl_access_added(obj); 886 efl_access_added(obj);
956 if (_elm_widget_onscreen_is(obj)) 887 if (_elm_widget_onscreen_is(obj))
957 efl_access_state_changed_signal_emit(obj, EFL_ACCESS_STATE_SHOWING, EINA_TRUE); 888 efl_access_state_changed_signal_emit(obj, EFL_ACCESS_STATE_TYPE_SHOWING, EINA_TRUE);
958 } 889 }
959 else 890 else
960 { 891 {
961 efl_access_state_changed_signal_emit(obj, EFL_ACCESS_STATE_SHOWING, EINA_FALSE); 892 efl_access_state_changed_signal_emit(obj, EFL_ACCESS_STATE_TYPE_SHOWING, EINA_FALSE);
962 } 893 }
963} 894}
964 895
@@ -1021,7 +952,7 @@ _efl_ui_widget_efl_canvas_object_is_frame_object_set(Eo *obj, Elm_Widget_Smart_D
1021} 952}
1022 953
1023EOLIAN static void 954EOLIAN static void
1024_efl_ui_widget_efl_canvas_object_clip_set(Eo *obj, Elm_Widget_Smart_Data *_pd EINA_UNUSED, Evas_Object *clip) 955_efl_ui_widget_efl_canvas_object_clipper_set(Eo *obj, Elm_Widget_Smart_Data *_pd EINA_UNUSED, Evas_Object *clip)
1025{ 956{
1026 Eina_Iterator *it; 957 Eina_Iterator *it;
1027 Evas_Object *o; 958 Evas_Object *o;
@@ -1029,7 +960,7 @@ _efl_ui_widget_efl_canvas_object_clip_set(Eo *obj, Elm_Widget_Smart_Data *_pd EI
1029 if (_evas_object_intercept_call(obj, EVAS_OBJECT_INTERCEPT_CB_CLIP_SET, 0, clip)) 960 if (_evas_object_intercept_call(obj, EVAS_OBJECT_INTERCEPT_CB_CLIP_SET, 0, clip))
1030 return; 961 return;
1031 962
1032 efl_canvas_object_clip_set(efl_super(obj, MY_CLASS), clip); 963 efl_canvas_object_clipper_set(efl_super(obj, MY_CLASS), clip);
1033 964
1034 it = evas_object_smart_iterator_new(obj); 965 it = evas_object_smart_iterator_new(obj);
1035 EINA_ITERATOR_FOREACH(it, o) 966 EINA_ITERATOR_FOREACH(it, o)
@@ -1070,11 +1001,11 @@ _efl_ui_widget_efl_canvas_group_group_member_add(Eo *obj, Elm_Widget_Smart_Data
1070} 1001}
1071 1002
1072EOLIAN static void 1003EOLIAN static void
1073_efl_ui_widget_efl_canvas_group_group_member_del(Eo *obj EINA_UNUSED, Elm_Widget_Smart_Data *_pd EINA_UNUSED, Evas_Object *child) 1004_efl_ui_widget_efl_canvas_group_group_member_remove(Eo *obj EINA_UNUSED, Elm_Widget_Smart_Data *_pd EINA_UNUSED, Evas_Object *child)
1074{ 1005{
1075 if (!evas_object_data_get(child, "_elm_leaveme")) 1006 if (!evas_object_data_get(child, "_elm_leaveme"))
1076 evas_object_clip_unset(child); 1007 evas_object_clip_unset(child);
1077 efl_canvas_group_member_del(efl_super(obj, MY_CLASS), child); 1008 efl_canvas_group_member_remove(efl_super(obj, MY_CLASS), child);
1078} 1009}
1079 1010
1080// internal funcs 1011// internal funcs
@@ -1262,31 +1193,43 @@ _efl_ui_widget_on_access_update(Eo *obj EINA_UNUSED, Elm_Widget_Smart_Data *_pd
1262{ 1193{
1263} 1194}
1264 1195
1265EAPI Efl_Ui_Theme_Apply_Result 1196static void
1197_elm_widget_theme_helper(Eina_Error err, Eina_Bool *err_default, Eina_Bool *err_generic)
1198{
1199 if (err == EFL_UI_THEME_APPLY_ERROR_DEFAULT)
1200 *err_default = EINA_TRUE;
1201 else if (err == EFL_UI_THEME_APPLY_ERROR_GENERIC)
1202 *err_generic = EINA_TRUE;
1203}
1204
1205EAPI Eina_Error
1266elm_widget_theme(Evas_Object *obj) 1206elm_widget_theme(Evas_Object *obj)
1267{ 1207{
1268 const Eina_List *l; 1208 const Eina_List *l;
1269 Evas_Object *child; 1209 Evas_Object *child;
1270 Elm_Tooltip *tt; 1210 Elm_Tooltip *tt;
1271 Elm_Cursor *cur; 1211 Elm_Cursor *cur;
1272 Efl_Ui_Theme_Apply_Result ret = EFL_UI_THEME_APPLY_RESULT_SUCCESS; 1212 Eina_Bool err_default = EINA_FALSE;
1213 Eina_Bool err_generic = EINA_FALSE;
1273 1214
1274 API_ENTRY return EFL_UI_THEME_APPLY_RESULT_FAIL; 1215 API_ENTRY return EFL_UI_THEME_APPLY_ERROR_GENERIC;
1275 1216
1276 EINA_LIST_FOREACH(sd->subobjs, l, child) 1217 EINA_LIST_FOREACH(sd->subobjs, l, child)
1277 if (_elm_widget_is(child)) 1218 if (_elm_widget_is(child))
1278 ret &= elm_widget_theme(child); 1219 _elm_widget_theme_helper(elm_widget_theme(child), &err_default, &err_generic);
1279 1220
1280 if (sd->hover_obj) ret &= elm_widget_theme(sd->hover_obj); 1221 if (sd->hover_obj)
1222 _elm_widget_theme_helper(elm_widget_theme(sd->hover_obj), &err_default, &err_generic);
1281 1223
1282 EINA_LIST_FOREACH(sd->tooltips, l, tt) 1224 EINA_LIST_FOREACH(sd->tooltips, l, tt)
1283 elm_tooltip_theme(tt); 1225 elm_tooltip_theme(tt);
1284 EINA_LIST_FOREACH(sd->cursors, l, cur) 1226 EINA_LIST_FOREACH(sd->cursors, l, cur)
1285 elm_cursor_theme(cur); 1227 elm_cursor_theme(cur);
1286 1228
1287 ret &= efl_ui_widget_theme_apply(obj); 1229 _elm_widget_theme_helper(efl_ui_widget_theme_apply(obj), &err_default, &err_generic);
1288 1230 if (err_generic) return EFL_UI_THEME_APPLY_ERROR_GENERIC;
1289 return ret; 1231 if (err_default) return EFL_UI_THEME_APPLY_ERROR_DEFAULT;
1232 return EFL_UI_THEME_APPLY_ERROR_NONE;
1290} 1233}
1291 1234
1292EAPI void 1235EAPI void
@@ -1334,14 +1277,12 @@ elm_widget_theme_specific(Evas_Object *obj,
1334 efl_ui_widget_theme_apply(obj); 1277 efl_ui_widget_theme_apply(obj);
1335} 1278}
1336 1279
1337EOLIAN static Efl_Ui_Theme_Apply_Result 1280EOLIAN static Eina_Error
1338_efl_ui_widget_theme_apply(Eo *obj, Elm_Widget_Smart_Data *_pd EINA_UNUSED) 1281_efl_ui_widget_theme_apply(Eo *obj, Elm_Widget_Smart_Data *_pd EINA_UNUSED)
1339{ 1282{
1340 _elm_widget_mirrored_reload(obj); 1283 _elm_widget_mirrored_reload(obj);
1341 if (elm_widget_disabled_get(obj))
1342 elm_widget_disabled_internal(obj, elm_widget_disabled_get(obj));
1343 1284
1344 return EFL_UI_THEME_APPLY_RESULT_SUCCESS; 1285 return EFL_UI_THEME_APPLY_ERROR_NONE;
1345} 1286}
1346 1287
1347/** 1288/**
@@ -1414,20 +1355,6 @@ _efl_ui_widget_efl_ui_i18n_mirrored_automatic_set(Eo *obj, Elm_Widget_Smart_Data
1414 } 1355 }
1415} 1356}
1416 1357
1417EOLIAN static void
1418_efl_ui_widget_on_show_region_hook_set(Eo *obj EINA_UNUSED, Elm_Widget_Smart_Data *sd, void *data, Efl_Ui_Scrollable_On_Show_Region func, Eina_Free_Cb func_free_cb)
1419{
1420 if ((sd->on_show_region_data == data) && (sd->on_show_region == func))
1421 return;
1422
1423 if (sd->on_show_region_data && sd->on_show_region_data_free)
1424 sd->on_show_region_data_free(sd->on_show_region_data);
1425
1426 sd->on_show_region = func;
1427 sd->on_show_region_data = data;
1428 sd->on_show_region_data_free = func_free_cb;
1429}
1430
1431/* 1358/*
1432 * @internal 1359 * @internal
1433 * 1360 *
@@ -1497,38 +1424,9 @@ _efl_ui_widget_widget_sub_object_add(Eo *obj, Elm_Widget_Smart_Data *sd, Evas_Ob
1497 sdc->parent_obj = obj; 1424 sdc->parent_obj = obj;
1498 1425
1499 _full_eval(sobj, sdc); 1426 _full_eval(sobj, sdc);
1500 1427 efl_ui_widget_disabled_set(sobj, efl_ui_widget_disabled_get(obj));
1501 if (!sdc->on_create)
1502 efl_ui_widget_on_orientation_update(sobj, sd->orient_mode);
1503 else
1504 sdc->orient_mode = sd->orient_mode;
1505
1506 if (!sdc->on_create)
1507 {
1508 if (!sdc->disabled && (elm_widget_disabled_get(obj)))
1509 {
1510 efl_ui_widget_on_disabled_update(sobj, EINA_TRUE);
1511 }
1512 }
1513 1428
1514 _elm_widget_top_win_focused_set(sobj, sd->top_win_focused); 1429 _elm_widget_top_win_focused_set(sobj, sd->top_win_focused);
1515
1516 /* update child focusable-ness on self and parents, now that a
1517 * focusable child got in */
1518 if (!sd->child_can_focus && (_is_focusable(sobj)))
1519 {
1520 Elm_Widget_Smart_Data *sdp = sd;
1521
1522 sdp->child_can_focus = EINA_TRUE;
1523 while (sdp->parent_obj)
1524 {
1525 sdp = efl_data_scope_get(sdp->parent_obj, MY_CLASS);
1526
1527 if (sdp->child_can_focus) break;
1528
1529 sdp->child_can_focus = EINA_TRUE;
1530 }
1531 }
1532 } 1430 }
1533 else 1431 else
1534 { 1432 {
@@ -1621,35 +1519,6 @@ _efl_ui_widget_widget_sub_object_del(Eo *obj, Elm_Widget_Smart_Data *sd, Evas_Ob
1621 elm_widget_tree_unfocusable_set(sobj, EINA_TRUE); 1519 elm_widget_tree_unfocusable_set(sobj, EINA_TRUE);
1622 elm_widget_tree_unfocusable_set(sobj, EINA_FALSE); 1520 elm_widget_tree_unfocusable_set(sobj, EINA_FALSE);
1623 } 1521 }
1624 if ((sd->child_can_focus) && (_is_focusable(sobj)))
1625 {
1626 Evas_Object *parent = obj;
1627
1628 /* update child focusable-ness on self and parents, now that a
1629 * focusable child is gone */
1630 while (parent)
1631 {
1632 const Eina_List *l;
1633 Evas_Object *subobj;
1634
1635 ELM_WIDGET_DATA_GET(parent, sdp);
1636
1637 sdp->child_can_focus = EINA_FALSE;
1638 EINA_LIST_FOREACH(sdp->subobjs, l, subobj)
1639 {
1640 if ((subobj != sobj) && (_is_focusable(subobj)))
1641 {
1642 sdp->child_can_focus = EINA_TRUE;
1643 break;
1644 }
1645 }
1646
1647 /* break again, child_can_focus went back to
1648 * original value */
1649 if (sdp->child_can_focus) break;
1650 parent = sdp->parent_obj;
1651 }
1652 }
1653 if (_elm_config->atspi_mode && !sd->on_destroy) 1522 if (_elm_config->atspi_mode && !sd->on_destroy)
1654 { 1523 {
1655 Efl_Access_Object *aparent; 1524 Efl_Access_Object *aparent;
@@ -1753,45 +1622,10 @@ _efl_ui_widget_focus_allow_set(Eo *obj, Elm_Widget_Smart_Data *sd, Eina_Bool can
1753 sd->can_focus = can_focus; 1622 sd->can_focus = can_focus;
1754 if (sd->can_focus) 1623 if (sd->can_focus)
1755 { 1624 {
1756 /* update child_can_focus of parents */
1757 Evas_Object *o = obj;
1758
1759 for (;;)
1760 {
1761 o = elm_widget_parent_get(o);
1762 if (!o) break;
1763 ELM_WIDGET_DATA_GET(o, sdp);
1764 if (!sdp || sdp->child_can_focus) break;
1765 sdp->child_can_focus = EINA_TRUE;
1766 }
1767
1768 efl_event_callback_array_add(obj, focus_callbacks(), NULL); 1625 efl_event_callback_array_add(obj, focus_callbacks(), NULL);
1769 } 1626 }
1770 else 1627 else
1771 { 1628 {
1772 // update child_can_focus of parents */
1773 Evas_Object *parent = elm_widget_parent_get(obj);
1774 while (parent)
1775 {
1776 const Eina_List *l;
1777 Evas_Object *subobj;
1778
1779 ELM_WIDGET_DATA_GET(parent, sdp);
1780
1781 sdp->child_can_focus = EINA_FALSE;
1782 EINA_LIST_FOREACH(sdp->subobjs, l, subobj)
1783 {
1784 if (_is_focusable(subobj))
1785 {
1786 sdp->child_can_focus = EINA_TRUE;
1787 break;
1788 }
1789 }
1790 /* break again, child_can_focus went back to
1791 * original value */
1792 if (sdp->child_can_focus) break;
1793 parent = sdp->parent_obj;
1794 }
1795 efl_event_callback_array_del(obj, focus_callbacks(), NULL); 1629 efl_event_callback_array_del(obj, focus_callbacks(), NULL);
1796 } 1630 }
1797 if (efl_finalized_get(obj)) 1631 if (efl_finalized_get(obj))
@@ -1810,7 +1644,7 @@ elm_widget_child_can_focus_get(const Eo *obj)
1810 Elm_Widget_Smart_Data *sd = efl_data_scope_safe_get(obj, MY_CLASS); 1644 Elm_Widget_Smart_Data *sd = efl_data_scope_safe_get(obj, MY_CLASS);
1811 if (!sd) return EINA_FALSE; 1645 if (!sd) return EINA_FALSE;
1812 1646
1813 return sd->child_can_focus; 1647 return sd->logical.child_count > 0;
1814} 1648}
1815 1649
1816/** 1650/**
@@ -1985,25 +1819,37 @@ elm_widget_highlight_get(const Eo *obj)
1985 return sd->highlighted; 1819 return sd->highlighted;
1986} 1820}
1987 1821
1988EOLIAN static Evas_Object* 1822EAPI Eina_Bool
1989_efl_ui_widget_widget_top_get(const Eo *obj, Elm_Widget_Smart_Data *sd EINA_UNUSED) 1823elm_widget_is(const Evas_Object *obj)
1824{
1825 return _elm_widget_is(obj);
1826}
1827
1828EAPI void
1829elm_widget_access_info_set(Efl_Ui_Widget *obj, const char *txt)
1830{
1831 efl_ui_widget_access_info_set(obj, txt);
1832}
1833
1834EAPI const char *
1835elm_widget_access_info_get(const Efl_Ui_Widget *obj)
1836{
1837 return efl_ui_widget_access_info_get(obj);
1838}
1839
1840EAPI Eo *
1841elm_widget_top_get(const Eo *obj)
1990{ 1842{
1991 Efl_Ui_Widget *parent = elm_widget_parent_get(obj); 1843 Efl_Ui_Widget *parent = elm_widget_parent_get(obj);
1992 if (parent) 1844 if (parent)
1993 { 1845 {
1994 if (!efl_isa(parent, EFL_UI_WIDGET_CLASS)) return NULL; 1846 if (!efl_isa(parent, EFL_UI_WIDGET_CLASS)) return NULL;
1995 return efl_ui_widget_top_get(parent); 1847 return elm_widget_top_get(parent);
1996 } 1848 }
1997 /* XXX const */ 1849 /* XXX const */
1998 return (Evas_Object *)obj; 1850 return (Evas_Object *)obj;
1999} 1851}
2000 1852
2001EAPI Eina_Bool
2002elm_widget_is(const Evas_Object *obj)
2003{
2004 return _elm_widget_is(obj);
2005}
2006
2007EAPI Evas_Object * 1853EAPI Evas_Object *
2008elm_widget_parent_widget_get(const Evas_Object *obj) 1854elm_widget_parent_widget_get(const Evas_Object *obj)
2009{ 1855{
@@ -2091,7 +1937,7 @@ _propagate_event(void *data EINA_UNUSED, const Efl_Event *eo_event)
2091 continue; 1937 continue;
2092 } 1938 }
2093 1939
2094 if (efl_ui_widget_event(parent, eo_event, obj)) 1940 if (efl_ui_widget_input_event_handler(parent, eo_event, obj))
2095 return; 1941 return;
2096 1942
2097 EINA_LIST_FOREACH_SAFE(sd->event_cb, l, l_prev, ecd) 1943 EINA_LIST_FOREACH_SAFE(sd->event_cb, l, l_prev, ecd)
@@ -2479,114 +2325,31 @@ _elm_widget_top_win_focused_get(const Evas_Object *obj)
2479 return sd->top_win_focused; 2325 return sd->top_win_focused;
2480} 2326}
2481 2327
2482static void
2483_elm_widget_disabled_eval(const Evas_Object *obj, Eina_Bool disabled)
2484{
2485 const Eina_List *l;
2486 Evas_Object *child;
2487 ELM_WIDGET_DATA_GET(obj, sd);
2488
2489 EINA_LIST_FOREACH(sd->subobjs, l, child)
2490 {
2491 if (elm_widget_is(child))
2492 {
2493 efl_ui_widget_on_disabled_update(child, disabled);
2494 _elm_widget_disabled_eval(child, disabled);
2495 }
2496 }
2497}
2498
2499static void
2500elm_widget_disabled_internal(Eo *obj, Eina_Bool disabled)
2501{
2502 if (!disabled && elm_widget_disabled_get(elm_widget_parent_get(obj)))
2503 return;
2504
2505 efl_ui_widget_on_disabled_update(obj, disabled);
2506 _elm_widget_disabled_eval(obj, disabled);
2507}
2508
2509EOLIAN static void 2328EOLIAN static void
2510_efl_ui_widget_disabled_set(Eo *obj, Elm_Widget_Smart_Data *sd, Eina_Bool disabled) 2329_efl_ui_widget_disabled_set(Eo *obj EINA_UNUSED, Elm_Widget_Smart_Data *pd, Eina_Bool disabled)
2511{ 2330{
2512 if (sd->disabled == disabled) return; 2331 Efl_Ui_Widget *subs;
2513 sd->disabled = !!disabled; 2332 Eina_List *n;
2514
2515 elm_widget_disabled_internal(obj, disabled);
2516
2517 if (efl_finalized_get(obj))
2518 _elm_widget_full_eval_children(obj, sd);
2519}
2520 2333
2521EOLIAN static Eina_Bool 2334 if (disabled)
2522_efl_ui_widget_disabled_get(const Eo *obj, Elm_Widget_Smart_Data *sd) 2335 pd->disabled ++;
2523{ 2336 else
2524 Eo *parent; 2337 pd->disabled = MAX(pd->disabled - 1 ,0);
2525
2526 if (sd->disabled) return EINA_TRUE;
2527 if ((parent = elm_widget_parent_get(obj)) != NULL)
2528 return elm_widget_disabled_get(parent);
2529 return EINA_FALSE;
2530}
2531
2532EOLIAN static void
2533_efl_ui_widget_show_region_set(Eo *obj, Elm_Widget_Smart_Data *sd, Eina_Rect sr, Eina_Bool forceshow)
2534{
2535 Evas_Object *parent_obj, *child_obj;
2536 Evas_Coord px, py, cx, cy, nx = 0, ny = 0;
2537
2538 evas_smart_objects_calculate(evas_object_evas_get(obj));
2539
2540 if (!forceshow && eina_rectangle_equal(&sr.rect, &sd->show_region.rect)) return;
2541 2338
2542 sd->show_region = sr; 2339 EINA_LIST_FOREACH(pd->subobjs, n, subs)
2543 if (sd->on_show_region)
2544 { 2340 {
2545 sd->on_show_region(sd->on_show_region_data, obj, sr); 2341 if (efl_isa(subs, EFL_UI_WIDGET_CLASS))
2546 2342 efl_ui_widget_disabled_set(subs, efl_ui_widget_disabled_get(obj));
2547 if (_elm_scrollable_is(obj))
2548 {
2549 if (elm_widget_is_legacy(obj))
2550 {
2551 elm_interface_scrollable_content_pos_get(obj, &nx, &ny);
2552 sr.x -= nx;
2553 sr.y -= ny;
2554 }
2555 else
2556 {
2557 Eina_Position2D pos;
2558 pos = efl_ui_scrollable_content_pos_get(obj);
2559 sr.x -= pos.x;
2560 sr.y -= pos.y;
2561 }
2562 }
2563 } 2343 }
2564 2344
2565 do 2345 if (efl_finalized_get(obj))
2566 { 2346 _elm_widget_full_eval_children(obj, pd);
2567 parent_obj = sd->parent_obj;
2568 child_obj = sd->obj;
2569 if ((!parent_obj) || (!_elm_widget_is(parent_obj))) break;
2570 sd = efl_data_scope_get(parent_obj, MY_CLASS);
2571 if (!sd) break;
2572
2573 evas_object_geometry_get(parent_obj, &px, &py, NULL, NULL);
2574 evas_object_geometry_get(child_obj, &cx, &cy, NULL, NULL);
2575
2576 sr.x += (cx - px);
2577 sr.y += (cy - py);
2578 sd->show_region = sr;
2579
2580 if (sd->on_show_region)
2581 sd->on_show_region(sd->on_show_region_data, parent_obj, sr);
2582 }
2583 while (parent_obj);
2584} 2347}
2585 2348
2586EOLIAN static Eina_Rect 2349EOLIAN static Eina_Bool
2587_efl_ui_widget_show_region_get(const Eo *obj EINA_UNUSED, Elm_Widget_Smart_Data *sd) 2350_efl_ui_widget_disabled_get(const Eo *obj EINA_UNUSED, Elm_Widget_Smart_Data *pd)
2588{ 2351{
2589 return (Eina_Rect) sd->show_region; 2352 return pd->disabled > 0;
2590} 2353}
2591 2354
2592/** 2355/**
@@ -2821,7 +2584,7 @@ elm_widget_part_text_set(Eo *obj, const char *part, const char *label)
2821 /* legacy support: combobox was special (internal entry is text object). */ 2584 /* legacy support: combobox was special (internal entry is text object). */
2822 if (efl_isa(obj, ELM_COMBOBOX_CLASS)) 2585 if (efl_isa(obj, ELM_COMBOBOX_CLASS))
2823 _elm_combobox_part_text_set(obj, part, label); 2586 _elm_combobox_part_text_set(obj, part, label);
2824 else if (efl_isa(obj, EFL_UI_LAYOUT_CLASS)) 2587 else if (efl_isa(obj, EFL_UI_LAYOUT_BASE_CLASS))
2825 elm_layout_text_set(obj, part, label); 2588 elm_layout_text_set(obj, part, label);
2826} 2589}
2827 2590
@@ -2831,7 +2594,7 @@ elm_widget_part_text_get(const Eo *obj, const char *part)
2831 /* legacy support: combobox was special (internal entry is text object). */ 2594 /* legacy support: combobox was special (internal entry is text object). */
2832 if (efl_isa(obj, ELM_COMBOBOX_CLASS)) 2595 if (efl_isa(obj, ELM_COMBOBOX_CLASS))
2833 return _elm_combobox_part_text_get(obj, part); 2596 return _elm_combobox_part_text_get(obj, part);
2834 else if (efl_isa(obj, EFL_UI_LAYOUT_CLASS)) 2597 else if (efl_isa(obj, EFL_UI_LAYOUT_BASE_CLASS))
2835 return elm_layout_text_get(obj, part); 2598 return elm_layout_text_get(obj, part);
2836 2599
2837 return NULL; 2600 return NULL;
@@ -3016,6 +2779,32 @@ _efl_ui_widget_access_info_get(const Eo *obj EINA_UNUSED, Elm_Widget_Smart_Data
3016 return sd->access_info; 2779 return sd->access_info;
3017} 2780}
3018 2781
2782
2783EAPI void
2784elm_widget_scroll_hold_push(Efl_Ui_Widget *obj)
2785{
2786 efl_ui_widget_scroll_hold_push(obj);
2787}
2788
2789EAPI void
2790elm_widget_scroll_hold_pop(Efl_Ui_Widget *obj)
2791{
2792 efl_ui_widget_scroll_hold_pop(obj);
2793}
2794
2795EAPI void
2796elm_widget_scroll_freeze_push(Efl_Ui_Widget *obj)
2797{
2798 efl_ui_widget_scroll_freeze_push(obj);
2799}
2800
2801EAPI void
2802elm_widget_scroll_freeze_pop(Efl_Ui_Widget *obj)
2803{
2804 efl_ui_widget_scroll_freeze_pop(obj);
2805}
2806
2807
3019EAPI Elm_Theme * 2808EAPI Elm_Theme *
3020elm_widget_theme_get(const Evas_Object *obj) 2809elm_widget_theme_get(const Evas_Object *obj)
3021{ 2810{
@@ -3031,19 +2820,19 @@ elm_widget_theme_get(const Evas_Object *obj)
3031 return sd->theme; 2820 return sd->theme;
3032} 2821}
3033 2822
3034EOLIAN static Efl_Ui_Theme_Apply_Result 2823EOLIAN static Eina_Error
3035_efl_ui_widget_style_set(Eo *obj, Elm_Widget_Smart_Data *sd, const char *style) 2824_efl_ui_widget_style_set(Eo *obj, Elm_Widget_Smart_Data *sd, const char *style)
3036{ 2825{
3037 if (!elm_widget_is_legacy(obj) && efl_finalized_get(obj)) 2826 if (!elm_widget_is_legacy(obj) && efl_finalized_get(obj))
3038 { 2827 {
3039 ERR("Efl.Ui.Widget.style can only be set before finalize!"); 2828 ERR("Efl.Ui.Widget.style can only be set before finalize!");
3040 return EFL_UI_THEME_APPLY_RESULT_FAIL; 2829 return EFL_UI_THEME_APPLY_ERROR_GENERIC;
3041 } 2830 }
3042 2831
3043 if (eina_stringshare_replace(&sd->style, style)) 2832 if (eina_stringshare_replace(&sd->style, style))
3044 return elm_widget_theme(obj); 2833 return elm_widget_theme(obj);
3045 2834
3046 return EFL_UI_THEME_APPLY_RESULT_SUCCESS; 2835 return EFL_UI_THEME_APPLY_ERROR_NONE;
3047} 2836}
3048 2837
3049EOLIAN static const char* 2838EOLIAN static const char*
@@ -3142,39 +2931,17 @@ elm_widget_scroll_child_locked_y_get(const Eo *obj)
3142 return sd->child_drag_y_locked; 2931 return sd->child_drag_y_locked;
3143} 2932}
3144 2933
3145EAPI Efl_Ui_Theme_Apply_Result 2934EAPI Eina_Error
3146elm_widget_theme_object_set(Evas_Object *obj, Evas_Object *edj, const char *wname, const char *welement, const char *wstyle) 2935elm_widget_theme_object_set(Evas_Object *obj, Evas_Object *edj, const char *wname, const char *welement, const char *wstyle)
3147{ 2936{
3148 Elm_Widget_Smart_Data *sd = efl_data_scope_safe_get(obj, MY_CLASS); 2937 Elm_Widget_Smart_Data *sd = efl_data_scope_safe_get(obj, MY_CLASS);
3149 if (!sd) return EFL_UI_THEME_APPLY_RESULT_FAIL; 2938 if (!sd) return EFL_UI_THEME_APPLY_ERROR_GENERIC;
3150 2939
3151 if (eina_streq(welement, "base")) 2940 if (eina_streq(welement, "base"))
3152 welement = NULL; 2941 welement = NULL;
3153 if (eina_streq(wstyle, "default")) 2942 if (eina_streq(wstyle, "default"))
3154 wstyle = NULL; 2943 wstyle = NULL;
3155 Efl_Ui_Theme_Apply_Result ret = _elm_theme_object_set(obj, edj, wname, welement, wstyle); 2944 return _elm_theme_object_set(obj, edj, wname, welement, wstyle);
3156 if (!ret)
3157 {
3158 return EFL_UI_THEME_APPLY_RESULT_FAIL;
3159 }
3160
3161 if (sd->orient_mode != -1)
3162 {
3163 char buf[128];
3164
3165 if (elm_widget_is_legacy(obj))
3166 {
3167 snprintf(buf, sizeof(buf), "elm,state,orient,%d", sd->orient_mode);
3168 elm_widget_signal_emit(obj, buf, "elm");
3169 }
3170 else
3171 {
3172 snprintf(buf, sizeof(buf), "efl,state,orient,%d", sd->orient_mode);
3173 elm_widget_signal_emit(obj, buf, "efl");
3174 }
3175 }
3176
3177 return ret;
3178} 2945}
3179 2946
3180static void 2947static void
@@ -3486,7 +3253,7 @@ elm_widget_focus_highlight_focus_part_geometry_get(const Evas_Object *obj,
3486 if (!(target_hl_part = edje_object_data_get(edje_obj, "focus_part"))) 3253 if (!(target_hl_part = edje_object_data_get(edje_obj, "focus_part")))
3487 return; 3254 return;
3488 } 3255 }
3489 else if (obj && efl_isa(obj, EFL_UI_LAYOUT_CLASS)) 3256 else if (obj && efl_isa(obj, EFL_UI_LAYOUT_BASE_CLASS))
3490 { 3257 {
3491 edje_obj = elm_layout_edje_get(obj); 3258 edje_obj = elm_layout_edje_get(obj);
3492 if (!(target_hl_part = elm_layout_data_get(obj, "focus_part"))) 3259 if (!(target_hl_part = elm_layout_data_get(obj, "focus_part")))
@@ -3539,24 +3306,6 @@ _efl_ui_widget_focus_highlight_geometry_get(const Eo *obj, Elm_Widget_Smart_Data
3539 return r; 3306 return r;
3540} 3307}
3541 3308
3542EOLIAN static Elm_Object_Item*
3543_efl_ui_widget_focused_item_get(const Eo *obj EINA_UNUSED, Elm_Widget_Smart_Data *_pd EINA_UNUSED)
3544{
3545 return NULL;
3546}
3547
3548EOLIAN static void
3549_efl_ui_widget_interest_region_mode_set(Eo *obj EINA_UNUSED, Elm_Widget_Smart_Data *_pd, Elm_Focus_Region_Show_Mode mode)
3550{
3551 _pd->focus_region_show_mode = mode;
3552}
3553
3554EOLIAN static Elm_Focus_Region_Show_Mode
3555_efl_ui_widget_interest_region_mode_get(const Eo *obj EINA_UNUSED, Elm_Widget_Smart_Data *_pd)
3556{
3557 return _pd->focus_region_show_mode;
3558}
3559
3560EAPI void 3309EAPI void
3561elm_widget_activate(Evas_Object *obj, Efl_Ui_Activate act) 3310elm_widget_activate(Evas_Object *obj, Efl_Ui_Activate act)
3562{ 3311{
@@ -3615,60 +3364,6 @@ elm_widget_display_mode_set(Evas_Object *obj, Evas_Display_Mode dispmode)
3615 } 3364 }
3616} 3365}
3617 3366
3618EOLIAN static void
3619_efl_ui_widget_orientation_mode_set(Eo *obj, Elm_Widget_Smart_Data *sd, Efl_Ui_Widget_Orientation_Mode mode)
3620{
3621 int rotation = -1;
3622
3623 if (mode != EFL_UI_WIDGET_ORIENTATION_MODE_DISABLED)
3624 {
3625 //Get current orient mode from it's parent otherwise, 0.
3626 sd->orient_mode = 0;
3627 ELM_WIDGET_DATA_GET(sd->parent_obj, sd_parent);
3628 if (!sd_parent) rotation = 0;
3629 else rotation = sd_parent->orient_mode;
3630 }
3631 efl_ui_widget_on_orientation_update(obj, rotation);
3632}
3633
3634EOLIAN static Efl_Ui_Widget_Orientation_Mode
3635_efl_ui_widget_orientation_mode_get(const Eo *obj EINA_UNUSED, Elm_Widget_Smart_Data *sd)
3636{
3637 if (sd->orient_mode == -1) return EFL_UI_WIDGET_ORIENTATION_MODE_DISABLED;
3638 else return EFL_UI_WIDGET_ORIENTATION_MODE_DEFAULT;
3639}
3640
3641EOLIAN static void
3642_efl_ui_widget_on_orientation_update(Eo *obj, Elm_Widget_Smart_Data *sd, int orient_mode)
3643{
3644 Evas_Object *child;
3645 Eina_List *l;
3646
3647 sd->orient_mode = orient_mode;
3648
3649 EINA_LIST_FOREACH (sd->subobjs, l, child)
3650 {
3651 if (elm_widget_is(child))
3652 efl_ui_widget_on_orientation_update(child, orient_mode);
3653 }
3654
3655 if (orient_mode != -1)
3656 {
3657 char buf[128];
3658
3659 if (elm_widget_is_legacy(obj))
3660 {
3661 snprintf(buf, sizeof(buf), "elm,state,orient,%d", orient_mode);
3662 elm_widget_signal_emit(obj, buf, "elm");
3663 }
3664 else
3665 {
3666 snprintf(buf, sizeof(buf), "efl,state,orient,%d", orient_mode);
3667 elm_widget_signal_emit(obj, buf, "efl");
3668 }
3669 }
3670}
3671
3672/** 3367/**
3673 * @internal 3368 * @internal
3674 * 3369 *
@@ -3678,7 +3373,7 @@ _efl_ui_widget_on_orientation_update(Eo *obj, Elm_Widget_Smart_Data *sd, int ori
3678 * @return focus move policy of the object. 3373 * @return focus move policy of the object.
3679 * 3374 *
3680 **/ 3375 **/
3681EOLIAN static Elm_Focus_Move_Policy 3376EOLIAN static Efl_Ui_Focus_Move_Policy
3682_efl_ui_widget_focus_move_policy_get(const Eo *obj EINA_UNUSED, Elm_Widget_Smart_Data *sd) 3377_efl_ui_widget_focus_move_policy_get(const Eo *obj EINA_UNUSED, Elm_Widget_Smart_Data *sd)
3683{ 3378{
3684 return sd->focus_move_policy; 3379 return sd->focus_move_policy;
@@ -3694,9 +3389,9 @@ _efl_ui_widget_focus_move_policy_get(const Eo *obj EINA_UNUSED, Elm_Widget_Smart
3694 */ 3389 */
3695 3390
3696EOLIAN static void 3391EOLIAN static void
3697_efl_ui_widget_focus_move_policy_set(Eo *obj EINA_UNUSED, Elm_Widget_Smart_Data *sd, Elm_Focus_Move_Policy policy) 3392_efl_ui_widget_focus_move_policy_set(Eo *obj EINA_UNUSED, Elm_Widget_Smart_Data *sd, Efl_Ui_Focus_Move_Policy policy)
3698{ 3393{
3699 if (sd->focus_move_policy == policy) return; 3394 if (sd->focus_move_policy == (Elm_Focus_Move_Policy)policy) return;
3700 sd->focus_move_policy = policy; 3395 sd->focus_move_policy = policy;
3701} 3396}
3702 3397
@@ -3852,10 +3547,10 @@ elm_widget_theme_style_get(const Evas_Object *obj)
3852 * @param name An element name of sub object. 3547 * @param name An element name of sub object.
3853 * @return Whether the style was successfully applied or not. 3548 * @return Whether the style was successfully applied or not.
3854 */ 3549 */
3855EAPI Efl_Ui_Theme_Apply_Result 3550EAPI Eina_Error
3856elm_widget_element_update(Evas_Object *obj, Evas_Object *component, const char *name) 3551elm_widget_element_update(Evas_Object *obj, Evas_Object *component, const char *name)
3857{ 3552{
3858 Efl_Ui_Theme_Apply_Result ret = EFL_UI_THEME_APPLY_RESULT_SUCCESS; 3553 Eina_Error ret = EFL_UI_THEME_APPLY_ERROR_NONE;
3859 Eina_Bool changed = EINA_FALSE; 3554 Eina_Bool changed = EINA_FALSE;
3860 const char *obj_group; 3555 const char *obj_group;
3861 Eina_Stringshare *group; 3556 Eina_Stringshare *group;
@@ -3914,8 +3609,7 @@ _track_obj_view_del(void *data, const Efl_Event *event);
3914EFL_CALLBACKS_ARRAY_DEFINE(tracker_callbacks, 3609EFL_CALLBACKS_ARRAY_DEFINE(tracker_callbacks,
3915 { EFL_GFX_ENTITY_EVENT_SIZE_CHANGED, _track_obj_view_update }, 3610 { EFL_GFX_ENTITY_EVENT_SIZE_CHANGED, _track_obj_view_update },
3916 { EFL_GFX_ENTITY_EVENT_POSITION_CHANGED, _track_obj_view_update }, 3611 { EFL_GFX_ENTITY_EVENT_POSITION_CHANGED, _track_obj_view_update },
3917 { EFL_GFX_ENTITY_EVENT_SHOW, _track_obj_view_update }, 3612 { EFL_GFX_ENTITY_EVENT_VISIBILITY_CHANGED, _track_obj_view_update },
3918 { EFL_GFX_ENTITY_EVENT_HIDE, _track_obj_view_update },
3919 { EFL_EVENT_DEL, _track_obj_view_del }); 3613 { EFL_EVENT_DEL, _track_obj_view_del });
3920 3614
3921static void 3615static void
@@ -4280,18 +3974,18 @@ _elm_widget_item_efl_access_object_state_set_get(const Eo *eo_item,
4280{ 3974{
4281 Efl_Access_State_Set states = 0; 3975 Efl_Access_State_Set states = 0;
4282 3976
4283 STATE_TYPE_SET(states, EFL_ACCESS_STATE_FOCUSABLE); 3977 STATE_TYPE_SET(states, EFL_ACCESS_STATE_TYPE_FOCUSABLE);
4284 3978
4285 if (elm_object_item_focus_get(eo_item)) 3979 if (elm_object_item_focus_get(eo_item))
4286 STATE_TYPE_SET(states, EFL_ACCESS_STATE_FOCUSED); 3980 STATE_TYPE_SET(states, EFL_ACCESS_STATE_TYPE_FOCUSED);
4287 if (!elm_object_item_disabled_get(eo_item)) 3981 if (!elm_object_item_disabled_get(eo_item))
4288 { 3982 {
4289 STATE_TYPE_SET(states, EFL_ACCESS_STATE_ENABLED); 3983 STATE_TYPE_SET(states, EFL_ACCESS_STATE_TYPE_ENABLED);
4290 STATE_TYPE_SET(states, EFL_ACCESS_STATE_SENSITIVE); 3984 STATE_TYPE_SET(states, EFL_ACCESS_STATE_TYPE_SENSITIVE);
4291 STATE_TYPE_SET(states, EFL_ACCESS_STATE_VISIBLE); 3985 STATE_TYPE_SET(states, EFL_ACCESS_STATE_TYPE_VISIBLE);
4292 } 3986 }
4293 if (_elm_widget_item_onscreen_is(eo_item)) 3987 if (_elm_widget_item_onscreen_is(eo_item))
4294 STATE_TYPE_SET(states, EFL_ACCESS_STATE_SHOWING); 3988 STATE_TYPE_SET(states, EFL_ACCESS_STATE_TYPE_SHOWING);
4295 3989
4296 return states; 3990 return states;
4297} 3991}
@@ -5406,19 +5100,13 @@ _efl_ui_widget_efl_ui_focus_object_on_focus_update(Eo *obj, Elm_Widget_Smart_Dat
5406 evas_object_focus_set(obj, focused); 5100 evas_object_focus_set(obj, focused);
5407 5101
5408 if (_elm_config->atspi_mode && !elm_widget_child_can_focus_get(obj)) 5102 if (_elm_config->atspi_mode && !elm_widget_child_can_focus_get(obj))
5409 efl_access_state_changed_signal_emit(obj, EFL_ACCESS_STATE_FOCUSED, focused); 5103 efl_access_state_changed_signal_emit(obj, EFL_ACCESS_STATE_TYPE_FOCUSED, focused);
5410 5104
5411 return EINA_TRUE; 5105 return EINA_TRUE;
5412} 5106}
5413 5107
5414EOLIAN static Eina_Bool 5108EOLIAN static Eina_Bool
5415_efl_ui_widget_on_disabled_update(Eo *obj EINA_UNUSED, Elm_Widget_Smart_Data *_pd EINA_UNUSED, Eina_Bool disabled EINA_UNUSED) 5109_efl_ui_widget_widget_input_event_handler(Eo *obj EINA_UNUSED, Elm_Widget_Smart_Data *_pd EINA_UNUSED, const Efl_Event *eo_event EINA_UNUSED, Evas_Object *source EINA_UNUSED)
5416{
5417 return EINA_FALSE;
5418}
5419
5420EOLIAN static Eina_Bool
5421_efl_ui_widget_widget_event(Eo *obj EINA_UNUSED, Elm_Widget_Smart_Data *_pd EINA_UNUSED, const Efl_Event *eo_event EINA_UNUSED, Evas_Object *source EINA_UNUSED)
5422{ 5110{
5423 return EINA_FALSE; 5111 return EINA_FALSE;
5424} 5112}
@@ -5499,21 +5187,21 @@ _efl_ui_widget_efl_access_object_state_set_get(const Eo *obj, Elm_Widget_Smart_D
5499 5187
5500 if (evas_object_visible_get(obj)) 5188 if (evas_object_visible_get(obj))
5501 { 5189 {
5502 STATE_TYPE_SET(states, EFL_ACCESS_STATE_VISIBLE); 5190 STATE_TYPE_SET(states, EFL_ACCESS_STATE_TYPE_VISIBLE);
5503 if (_elm_widget_onscreen_is(obj)) 5191 if (_elm_widget_onscreen_is(obj))
5504 STATE_TYPE_SET(states, EFL_ACCESS_STATE_SHOWING); 5192 STATE_TYPE_SET(states, EFL_ACCESS_STATE_TYPE_SHOWING);
5505 } 5193 }
5506 if (!elm_widget_child_can_focus_get(obj)) 5194 if (!elm_widget_child_can_focus_get(obj))
5507 { 5195 {
5508 if (elm_object_focus_allow_get(obj)) 5196 if (elm_object_focus_allow_get(obj))
5509 STATE_TYPE_SET(states, EFL_ACCESS_STATE_FOCUSABLE); 5197 STATE_TYPE_SET(states, EFL_ACCESS_STATE_TYPE_FOCUSABLE);
5510 if (elm_object_focus_get(obj)) 5198 if (elm_object_focus_get(obj))
5511 STATE_TYPE_SET(states, EFL_ACCESS_STATE_FOCUSED); 5199 STATE_TYPE_SET(states, EFL_ACCESS_STATE_TYPE_FOCUSED);
5512 } 5200 }
5513 if (!elm_object_disabled_get(obj)) 5201 if (!elm_object_disabled_get(obj))
5514 { 5202 {
5515 STATE_TYPE_SET(states, EFL_ACCESS_STATE_ENABLED); 5203 STATE_TYPE_SET(states, EFL_ACCESS_STATE_TYPE_ENABLED);
5516 STATE_TYPE_SET(states, EFL_ACCESS_STATE_SENSITIVE); 5204 STATE_TYPE_SET(states, EFL_ACCESS_STATE_TYPE_SENSITIVE);
5517 } 5205 }
5518 5206
5519 return states; 5207 return states;
@@ -5671,6 +5359,84 @@ _efl_ui_widget_efl_ui_focus_object_focus_set(Eo *obj, Elm_Widget_Smart_Data *pd,
5671 5359
5672/* Legacy APIs */ 5360/* Legacy APIs */
5673 5361
5362EAPI void
5363elm_widget_on_show_region_hook_set(Eo *obj, void *data, Efl_Ui_Scrollable_On_Show_Region func, Eina_Free_Cb func_free_cb)
5364{
5365 ELM_WIDGET_DATA_GET(obj, sd);
5366
5367 if ((sd->on_show_region_data == data) && (sd->on_show_region == func))
5368 return;
5369
5370 if (sd->on_show_region_data && sd->on_show_region_data_free)
5371 sd->on_show_region_data_free(sd->on_show_region_data);
5372
5373 sd->on_show_region = func;
5374 sd->on_show_region_data = data;
5375 sd->on_show_region_data_free = func_free_cb;
5376}
5377
5378EAPI void
5379elm_widget_show_region_set(Eo *obj, Eina_Rect sr, Eina_Bool forceshow)
5380{
5381 Evas_Object *parent_obj, *child_obj;
5382 Evas_Coord px, py, cx, cy, nx = 0, ny = 0;
5383
5384 ELM_WIDGET_DATA_GET_OR_RETURN(obj, sd);
5385
5386 evas_smart_objects_calculate(evas_object_evas_get(obj));
5387
5388 if (!forceshow && eina_rectangle_equal(&sr.rect, &sd->show_region.rect)) return;
5389
5390 sd->show_region = sr;
5391 if (sd->on_show_region)
5392 {
5393 sd->on_show_region(sd->on_show_region_data, obj, sr);
5394
5395 if (_elm_scrollable_is(obj))
5396 {
5397 if (elm_widget_is_legacy(obj))
5398 {
5399 elm_interface_scrollable_content_pos_get(obj, &nx, &ny);
5400 sr.x -= nx;
5401 sr.y -= ny;
5402 }
5403 else
5404 {
5405 Eina_Position2D pos;
5406 pos = efl_ui_scrollable_content_pos_get(obj);
5407 sr.x -= pos.x;
5408 sr.y -= pos.y;
5409 }
5410 }
5411 }
5412
5413 do
5414 {
5415 parent_obj = sd->parent_obj;
5416 child_obj = sd->obj;
5417 if ((!parent_obj) || (!_elm_widget_is(parent_obj))) break;
5418 sd = efl_data_scope_get(parent_obj, MY_CLASS);
5419 if (!sd) break;
5420
5421 evas_object_geometry_get(parent_obj, &px, &py, NULL, NULL);
5422 evas_object_geometry_get(child_obj, &cx, &cy, NULL, NULL);
5423
5424 sr.x += (cx - px);
5425 sr.y += (cy - py);
5426 sd->show_region = sr;
5427
5428 if (sd->on_show_region)
5429 sd->on_show_region(sd->on_show_region_data, parent_obj, sr);
5430 }
5431 while (parent_obj);
5432}
5433
5434EAPI Eina_Rect
5435elm_widget_show_region_get(const Eo *obj)
5436{
5437 ELM_WIDGET_DATA_GET_OR_RETURN(obj, sd, EINA_RECT_EMPTY());
5438 return (Eina_Rect) sd->show_region;
5439}
5674/* elm_object_content_xxx APIs are supposed to work on all objects for which 5440/* elm_object_content_xxx APIs are supposed to work on all objects for which
5675 * elm_object_widget_check() returns true. The below checks avoid printing out 5441 * elm_object_widget_check() returns true. The below checks avoid printing out
5676 * undesired ERR messages. */ 5442 * undesired ERR messages. */
@@ -5678,7 +5444,7 @@ EAPI void
5678elm_widget_content_part_set(Evas_Object *obj, const char *part, Evas_Object *content) 5444elm_widget_content_part_set(Evas_Object *obj, const char *part, Evas_Object *content)
5679{ 5445{
5680 ELM_WIDGET_CHECK(obj); 5446 ELM_WIDGET_CHECK(obj);
5681 if (efl_isa(obj, EFL_UI_LAYOUT_CLASS)) 5447 if (efl_isa(obj, EFL_UI_LAYOUT_BASE_CLASS))
5682 { 5448 {
5683 elm_layout_content_set(obj, part, content); 5449 elm_layout_content_set(obj, part, content);
5684 return; 5450 return;
@@ -5696,7 +5462,7 @@ EAPI Evas_Object *
5696elm_widget_content_part_get(const Evas_Object *obj, const char *part) 5462elm_widget_content_part_get(const Evas_Object *obj, const char *part)
5697{ 5463{
5698 ELM_WIDGET_CHECK(obj) NULL; 5464 ELM_WIDGET_CHECK(obj) NULL;
5699 if (efl_isa(obj, EFL_UI_LAYOUT_CLASS)) 5465 if (efl_isa(obj, EFL_UI_LAYOUT_BASE_CLASS))
5700 return elm_layout_content_get(obj, part); 5466 return elm_layout_content_get(obj, part);
5701 if (!efl_isa(obj, EFL_PART_INTERFACE)) return NULL; 5467 if (!efl_isa(obj, EFL_PART_INTERFACE)) return NULL;
5702 if (!part) 5468 if (!part)
@@ -5711,7 +5477,7 @@ EAPI Evas_Object *
5711elm_widget_content_part_unset(Evas_Object *obj, const char *part) 5477elm_widget_content_part_unset(Evas_Object *obj, const char *part)
5712{ 5478{
5713 ELM_WIDGET_CHECK(obj) NULL; 5479 ELM_WIDGET_CHECK(obj) NULL;
5714 if (efl_isa(obj, EFL_UI_LAYOUT_CLASS)) 5480 if (efl_isa(obj, EFL_UI_LAYOUT_BASE_CLASS))
5715 return elm_layout_content_unset(obj, part); 5481 return elm_layout_content_unset(obj, part);
5716 if (!efl_isa(obj, EFL_PART_INTERFACE)) return NULL; 5482 if (!efl_isa(obj, EFL_PART_INTERFACE)) return NULL;
5717 if (!part) 5483 if (!part)
@@ -5727,7 +5493,7 @@ elm_widget_signal_emit(Eo *obj, const char *emission, const char *source)
5727{ 5493{
5728 ELM_WIDGET_CHECK(obj); 5494 ELM_WIDGET_CHECK(obj);
5729 5495
5730 if (efl_isa(obj, EFL_UI_LAYOUT_CLASS)) 5496 if (efl_isa(obj, EFL_UI_LAYOUT_BASE_CLASS))
5731 elm_layout_signal_emit(obj, emission, source); 5497 elm_layout_signal_emit(obj, emission, source);
5732 else if (evas_object_smart_type_check(obj, "elm_icon")) 5498 else if (evas_object_smart_type_check(obj, "elm_icon"))
5733 { 5499 {
@@ -5810,8 +5576,7 @@ EFL_CALLBACKS_ARRAY_DEFINE(widget_shadow_cb,
5810{ EFL_GFX_ENTITY_EVENT_POSITION_CHANGED, _widget_shadow_event_cb }, 5576{ EFL_GFX_ENTITY_EVENT_POSITION_CHANGED, _widget_shadow_event_cb },
5811{ EFL_GFX_ENTITY_EVENT_SIZE_CHANGED, _widget_shadow_event_cb }, 5577{ EFL_GFX_ENTITY_EVENT_SIZE_CHANGED, _widget_shadow_event_cb },
5812{ EFL_GFX_ENTITY_EVENT_STACKING_CHANGED, _widget_shadow_event_cb }, 5578{ EFL_GFX_ENTITY_EVENT_STACKING_CHANGED, _widget_shadow_event_cb },
5813{ EFL_GFX_ENTITY_EVENT_HIDE, _widget_shadow_event_cb }, 5579{ EFL_GFX_ENTITY_EVENT_VISIBILITY_CHANGED, _widget_shadow_event_cb });
5814{ EFL_GFX_ENTITY_EVENT_SHOW, _widget_shadow_event_cb })
5815 5580
5816static Widget_Shadow * 5581static Widget_Shadow *
5817_widget_shadow_part_get(const Eo *part_obj) 5582_widget_shadow_part_get(const Eo *part_obj)
@@ -5878,7 +5643,7 @@ _widget_shadow_update(Widget_Shadow *ws)
5878 return; 5643 return;
5879 } 5644 }
5880 5645
5881 efl_canvas_object_clip_set(ws->surface, efl_canvas_object_clip_get(ws->widget)); 5646 efl_canvas_object_clipper_set(ws->surface, efl_canvas_object_clipper_get(ws->widget));
5882 efl_canvas_group_member_add(efl_canvas_object_render_parent_get(ws->widget), ws->surface); 5647 efl_canvas_group_member_add(efl_canvas_object_render_parent_get(ws->widget), ws->surface);
5883 efl_gfx_entity_geometry_set(ws->surface, srect); 5648 efl_gfx_entity_geometry_set(ws->surface, srect);
5884 efl_gfx_stack_below(ws->surface, ws->widget); 5649 efl_gfx_stack_below(ws->surface, ws->widget);
@@ -6087,20 +5852,60 @@ efl_ui_widget_part_bg_get(const Eo *part_obj)
6087 return _efl_ui_widget_bg_get(pd->obj); 5852 return _efl_ui_widget_bg_get(pd->obj);
6088} 5853}
6089 5854
6090EOLIAN static Eina_Bool 5855EOLIAN static Eina_Error
6091_efl_ui_widget_part_bg_efl_file_file_set(Eo *obj, void *pd EINA_UNUSED, const char *file, const char *key) 5856_efl_ui_widget_part_bg_efl_file_load(Eo *obj, void *pd EINA_UNUSED)
6092{ 5857{
6093 Evas_Object *bg_obj = efl_ui_widget_part_bg_get(obj); 5858 Evas_Object *bg_obj = efl_ui_widget_part_bg_get(obj);
6094 5859
6095 return efl_file_set(bg_obj, file, key); 5860 return efl_file_load(bg_obj);
5861}
5862
5863EOLIAN static const char *
5864_efl_ui_widget_part_bg_efl_file_file_get(const Eo *obj, void *pd EINA_UNUSED)
5865{
5866 Evas_Object *bg_obj = efl_ui_widget_part_bg_get(obj);
5867
5868 return efl_file_get(bg_obj);
5869}
5870
5871EOLIAN static Eina_Error
5872_efl_ui_widget_part_bg_efl_file_file_set(Eo *obj, void *pd EINA_UNUSED, const char *file)
5873{
5874 Evas_Object *bg_obj = efl_ui_widget_part_bg_get(obj);
5875
5876 return efl_file_set(bg_obj, file);
5877}
5878
5879EOLIAN static const char *
5880_efl_ui_widget_part_bg_efl_file_key_get(const Eo *obj, void *pd EINA_UNUSED)
5881{
5882 Evas_Object *bg_obj = efl_ui_widget_part_bg_get(obj);
5883
5884 return efl_file_key_get(bg_obj);
6096} 5885}
6097 5886
6098EOLIAN static void 5887EOLIAN static void
6099_efl_ui_widget_part_bg_efl_file_file_get(const Eo *obj, void *pd EINA_UNUSED, const char **file, const char **key) 5888_efl_ui_widget_part_bg_efl_file_key_set(Eo *obj, void *pd EINA_UNUSED, const char *key)
5889{
5890 Evas_Object *bg_obj = efl_ui_widget_part_bg_get(obj);
5891
5892 efl_file_key_set(bg_obj, key);
5893}
5894
5895EOLIAN static const Eina_File *
5896_efl_ui_widget_part_bg_efl_file_mmap_get(const Eo *obj, void *pd EINA_UNUSED)
5897{
5898 Evas_Object *bg_obj = efl_ui_widget_part_bg_get(obj);
5899
5900 return efl_file_mmap_get(bg_obj);
5901}
5902
5903EOLIAN static Eina_Error
5904_efl_ui_widget_part_bg_efl_file_mmap_set(Eo *obj, void *pd EINA_UNUSED, const Eina_File *file)
6100{ 5905{
6101 Evas_Object *bg_obj = efl_ui_widget_part_bg_get(obj); 5906 Evas_Object *bg_obj = efl_ui_widget_part_bg_get(obj);
6102 5907
6103 efl_file_get(bg_obj, file, key); 5908 return efl_file_mmap_set(bg_obj, file);
6104} 5909}
6105 5910
6106EOLIAN static void 5911EOLIAN static void
@@ -6152,10 +5957,13 @@ ELM_PART_TEXT_DEFAULT_GET(efl_ui_widget, NULL)
6152 EFL_CANVAS_GROUP_ADD_DEL_OPS(efl_ui_widget), \ 5957 EFL_CANVAS_GROUP_ADD_DEL_OPS(efl_ui_widget), \
6153 ELM_PART_CONTENT_DEFAULT_OPS(efl_ui_widget), \ 5958 ELM_PART_CONTENT_DEFAULT_OPS(efl_ui_widget), \
6154 ELM_PART_TEXT_DEFAULT_OPS(efl_ui_widget), \ 5959 ELM_PART_TEXT_DEFAULT_OPS(efl_ui_widget), \
5960 EFL_OBJECT_OP_FUNC(efl_canvas_object_is_frame_object_set, _efl_ui_widget_efl_canvas_object_is_frame_object_set), \
6155 EFL_OBJECT_OP_FUNC(efl_dbg_info_get, _efl_ui_widget_efl_object_dbg_info_get) 5961 EFL_OBJECT_OP_FUNC(efl_dbg_info_get, _efl_ui_widget_efl_object_dbg_info_get)
6156 5962
6157#include "elm_widget_item.eo.c" 5963#include "elm_widget_item_eo.c"
5964#include "elm_widget_item_container_eo.c"
6158#include "efl_ui_widget.eo.c" 5965#include "efl_ui_widget.eo.c"
5966#include "efl_ui_widget_eo.legacy.c"
6159 5967
6160/* Others */ 5968/* Others */
6161#include "efl_ui_l10n.eo.c" 5969#include "efl_ui_l10n.eo.c"