diff options
author | Marcel Hollerbach <mail@marcel-hollerbach.de> | 2019-12-02 21:41:46 +0100 |
---|---|---|
committer | Marcel Hollerbach <mail@marcel-hollerbach.de> | 2019-12-03 11:23:48 +0100 |
commit | 75a64268003af23257fc103b22d4b02e63706d91 (patch) | |
tree | 7861ac89417a050b241ba5ef11e4a1e8d0727d40 | |
parent | f7d26c9a0399ee6bb12902acaa9a3ed56bed22de (diff) |
efl_ui_tab_pager: do not directly inherit from spotlight anymoredevs/bu5hm4n/tab_pager_work
spotlight moved away from layout, this could have also been solved with
setting a edje object as resize object. However, this commit now
contains the spotlight internally.
The resons why containing it internally is better:
- You now only have one way of selecting a page, marking it as selection
via the selectable API
- You cannot build race conditions between selecting a page and setting
the active_element anymore
- The tab_pager is now also just a simple single_selectable implementor,
which makes this whole usage more convinient.
- There is now a event you can listen to if you want to know if
something has changed the selected item
- push and pop would have never worked correctly in the tab_pager, as
the item would have appeared always before the item was "faded" in. This
possibility is not given anymore
Last but not least, this makes tab_pager usable again, the tab bar is
displayed again.
Differential Revision: https://phab.enlightenment.org/D10775
-rw-r--r-- | src/bin/elementary/test_ui_tab_pager.c | 20 | ||||
-rw-r--r-- | src/lib/elementary/efl_ui_tab_pager.c | 140 | ||||
-rw-r--r-- | src/lib/elementary/efl_ui_tab_pager.eo | 22 | ||||
-rw-r--r-- | src/lib/elementary/efl_ui_tab_pager_private.h | 1 |
4 files changed, 140 insertions, 43 deletions
diff --git a/src/bin/elementary/test_ui_tab_pager.c b/src/bin/elementary/test_ui_tab_pager.c index 62e4e7df09..d70437245c 100644 --- a/src/bin/elementary/test_ui_tab_pager.c +++ b/src/bin/elementary/test_ui_tab_pager.c | |||
@@ -139,7 +139,7 @@ test_ui_tab_pager(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *ev | |||
139 | page = tab_page_add(tp); | 139 | page = tab_page_add(tp); |
140 | efl_pack_end(tp, page); | 140 | efl_pack_end(tp, page); |
141 | if (i == 0) | 141 | if (i == 0) |
142 | efl_ui_spotlight_active_element_set(tp, page); | 142 | efl_ui_selectable_selected_set(efl_ui_tab_page_tab_bar_item_get(page), EINA_TRUE); |
143 | } | 143 | } |
144 | 144 | ||
145 | ad = (App_Data*)calloc(1, sizeof(App_Data)); | 145 | ad = (App_Data*)calloc(1, sizeof(App_Data)); |
@@ -174,7 +174,9 @@ static void | |||
174 | _tab_set_btn_cb(void *data, const Efl_Event *ev EINA_UNUSED) | 174 | _tab_set_btn_cb(void *data, const Efl_Event *ev EINA_UNUSED) |
175 | { | 175 | { |
176 | Tab_Set_Data *tsd = data; | 176 | Tab_Set_Data *tsd = data; |
177 | efl_ui_spotlight_active_element_set(tsd->tab_pager, efl_pack_content_get(tsd->tab_pager, elm_spinner_value_get(tsd->spinner))); | 177 | Efl_Ui_Tab_Page *page = efl_pack_content_get(tsd->tab_pager, elm_spinner_value_get(tsd->spinner)); |
178 | |||
179 | efl_ui_selectable_selected_set(efl_ui_tab_page_tab_bar_item_get(page), EINA_TRUE); | ||
178 | } | 180 | } |
179 | 181 | ||
180 | static void | 182 | static void |
@@ -246,7 +248,7 @@ _pack_before_btn_cb(void *data, const Efl_Event *ev EINA_UNUSED) | |||
246 | Eo *tab_pager = data; | 248 | Eo *tab_pager = data; |
247 | Eo *tab_page, *cur_tab_page; | 249 | Eo *tab_page, *cur_tab_page; |
248 | 250 | ||
249 | cur_tab_page = efl_ui_spotlight_active_element_get(tab_pager); | 251 | cur_tab_page = efl_ui_selectable_last_selected_get(tab_pager); |
250 | 252 | ||
251 | tab_page = tab_page_add(tab_pager); | 253 | tab_page = tab_page_add(tab_pager); |
252 | 254 | ||
@@ -259,7 +261,7 @@ _pack_after_btn_cb(void *data, const Efl_Event *ev EINA_UNUSED) | |||
259 | Eo *tab_pager = data; | 261 | Eo *tab_pager = data; |
260 | Eo *tab_page, *cur_tab_page; | 262 | Eo *tab_page, *cur_tab_page; |
261 | 263 | ||
262 | cur_tab_page = efl_ui_spotlight_active_element_get(tab_pager); | 264 | cur_tab_page = efl_ui_selectable_last_selected_get(tab_pager); |
263 | 265 | ||
264 | tab_page = tab_page_add(tab_pager); | 266 | tab_page = tab_page_add(tab_pager); |
265 | 267 | ||
@@ -361,7 +363,7 @@ _unpack_btn_cb(void *data, const Efl_Event *ev EINA_UNUSED) | |||
361 | { | 363 | { |
362 | Eo *tab_pager = data; | 364 | Eo *tab_pager = data; |
363 | 365 | ||
364 | Eo *tab_page = efl_ui_spotlight_active_element_get(tab_pager); | 366 | Eo *tab_page = efl_ui_selectable_last_selected_get(tab_pager); |
365 | 367 | ||
366 | efl_pack_unpack(tab_pager, tab_page); | 368 | efl_pack_unpack(tab_pager, tab_page); |
367 | efl_del(tab_page); | 369 | efl_del(tab_page); |
@@ -460,7 +462,7 @@ _change_btn_cb(void *data, const Efl_Event *ev EINA_UNUSED) | |||
460 | char *label = NULL; | 462 | char *label = NULL; |
461 | char *icon = NULL; | 463 | char *icon = NULL; |
462 | 464 | ||
463 | tab_page = efl_ui_spotlight_active_element_get(tcd->tab_pager); | 465 | tab_page = efl_ui_selectable_last_selected_get(tcd->tab_pager); |
464 | 466 | ||
465 | if (efl_ui_selectable_selected_get(tcd->label_check)) | 467 | if (efl_ui_selectable_selected_get(tcd->label_check)) |
466 | { | 468 | { |
@@ -528,20 +530,20 @@ static void | |||
528 | _tran_set_btn_scroll_cb(void *data, const Efl_Event *ev EINA_UNUSED) | 530 | _tran_set_btn_scroll_cb(void *data, const Efl_Event *ev EINA_UNUSED) |
529 | { | 531 | { |
530 | Efl_Ui_Spotlight_Manager_Scroll *scroll = efl_new(EFL_UI_SPOTLIGHT_MANAGER_SCROLL_CLASS); | 532 | Efl_Ui_Spotlight_Manager_Scroll *scroll = efl_new(EFL_UI_SPOTLIGHT_MANAGER_SCROLL_CLASS); |
531 | efl_ui_spotlight_manager_set(data, scroll); | 533 | efl_ui_tab_pager_spotlight_manager_set(data, scroll); |
532 | } | 534 | } |
533 | 535 | ||
534 | static void | 536 | static void |
535 | _tran_set_btn_stack_cb(void *data, const Efl_Event *ev EINA_UNUSED) | 537 | _tran_set_btn_stack_cb(void *data, const Efl_Event *ev EINA_UNUSED) |
536 | { | 538 | { |
537 | Efl_Ui_Spotlight_Manager_Scroll *stack = efl_new(EFL_UI_SPOTLIGHT_MANAGER_STACK_CLASS); | 539 | Efl_Ui_Spotlight_Manager_Scroll *stack = efl_new(EFL_UI_SPOTLIGHT_MANAGER_STACK_CLASS); |
538 | efl_ui_spotlight_manager_set(data, stack); | 540 | efl_ui_tab_pager_spotlight_manager_set(data, stack); |
539 | } | 541 | } |
540 | 542 | ||
541 | static void | 543 | static void |
542 | _tran_unset_btn_cb(void *data, const Efl_Event *ev EINA_UNUSED) | 544 | _tran_unset_btn_cb(void *data, const Efl_Event *ev EINA_UNUSED) |
543 | { | 545 | { |
544 | efl_ui_spotlight_manager_set(data, NULL); | 546 | efl_ui_tab_pager_spotlight_manager_set(data, NULL); |
545 | } | 547 | } |
546 | 548 | ||
547 | static void | 549 | static void |
diff --git a/src/lib/elementary/efl_ui_tab_pager.c b/src/lib/elementary/efl_ui_tab_pager.c index 73e7d22c48..82b4ac4c83 100644 --- a/src/lib/elementary/efl_ui_tab_pager.c +++ b/src/lib/elementary/efl_ui_tab_pager.c | |||
@@ -12,24 +12,25 @@ | |||
12 | #define MY_CLASS EFL_UI_TAB_PAGER_CLASS | 12 | #define MY_CLASS EFL_UI_TAB_PAGER_CLASS |
13 | 13 | ||
14 | static void | 14 | static void |
15 | _select(Eo *obj EINA_UNUSED, Efl_Ui_Tab_Page *page) | 15 | _efl_ui_tab_pager_spotlight_manager_set(Eo *obj EINA_UNUSED, Efl_Ui_Tab_Pager_Data *pd, Efl_Ui_Spotlight_Manager *manager) |
16 | { | 16 | { |
17 | Efl_Ui_Tab_Bar_Default_Item *item = efl_ui_tab_page_tab_bar_item_get(page); | 17 | efl_ui_spotlight_manager_set(pd->spotlight, manager); |
18 | |||
19 | if (!efl_ui_selectable_selected_get(item)) | ||
20 | efl_ui_selectable_selected_set(item, EINA_TRUE); | ||
21 | } | 18 | } |
22 | 19 | ||
20 | |||
23 | static void | 21 | static void |
24 | _tab_select_cb(void *data, const Efl_Event *event) | 22 | _tab_select_cb(void *data, const Efl_Event *event) |
25 | { | 23 | { |
26 | Efl_Ui_Tab_Bar_Default_Item *selected; | 24 | Efl_Ui_Tab_Bar_Default_Item *selected; |
27 | Efl_Ui_Tab_Page *page; | 25 | Efl_Ui_Tab_Page *page; |
26 | Efl_Ui_Tab_Pager_Data *pd; | ||
28 | 27 | ||
28 | pd = efl_data_scope_get(data, MY_CLASS); | ||
29 | EINA_SAFETY_ON_NULL_RETURN(pd); | ||
29 | selected = efl_ui_selectable_last_selected_get(event->object); | 30 | selected = efl_ui_selectable_last_selected_get(event->object); |
30 | page = efl_parent_get(selected); | 31 | page = efl_parent_get(selected); |
31 | if (efl_ui_spotlight_active_element_get(data)) | 32 | if (efl_ui_spotlight_active_element_get(pd->spotlight)) |
32 | efl_ui_spotlight_active_element_set(data, page); | 33 | efl_ui_spotlight_active_element_set(pd->spotlight, page); |
33 | } | 34 | } |
34 | 35 | ||
35 | EOLIAN static Efl_Canvas_Object * | 36 | EOLIAN static Efl_Canvas_Object * |
@@ -39,13 +40,6 @@ _efl_ui_tab_pager_tab_bar_get(const Eo *obj EINA_UNUSED, Efl_Ui_Tab_Pager_Data * | |||
39 | } | 40 | } |
40 | 41 | ||
41 | EOLIAN static void | 42 | EOLIAN static void |
42 | _efl_ui_tab_pager_efl_ui_spotlight_container_active_element_set(Eo *obj, Efl_Ui_Tab_Pager_Data *sd EINA_UNUSED, Efl_Ui_Widget *element) | ||
43 | { | ||
44 | efl_ui_spotlight_active_element_set(efl_super(obj, MY_CLASS), element); | ||
45 | _select(obj, element); | ||
46 | } | ||
47 | |||
48 | EOLIAN static void | ||
49 | _efl_ui_tab_pager_efl_object_destructor(Eo *obj, Efl_Ui_Tab_Pager_Data *sd) | 43 | _efl_ui_tab_pager_efl_object_destructor(Eo *obj, Efl_Ui_Tab_Pager_Data *sd) |
50 | { | 44 | { |
51 | if (sd->tab_bar != NULL) | 45 | if (sd->tab_bar != NULL) |
@@ -66,10 +60,26 @@ _efl_ui_tab_pager_efl_object_constructor(Eo *obj, Efl_Ui_Tab_Pager_Data *sd) | |||
66 | 60 | ||
67 | sd->tab_bar = efl_add(EFL_UI_TAB_BAR_CLASS, obj); | 61 | sd->tab_bar = efl_add(EFL_UI_TAB_BAR_CLASS, obj); |
68 | efl_event_callback_add(sd->tab_bar, EFL_UI_EVENT_ITEM_SELECTED, _tab_select_cb, obj); | 62 | efl_event_callback_add(sd->tab_bar, EFL_UI_EVENT_ITEM_SELECTED, _tab_select_cb, obj); |
63 | efl_event_callback_forwarder_del(sd->tab_bar, EFL_UI_SELECTABLE_EVENT_SELECTION_CHANGED, obj); | ||
64 | |||
65 | sd->spotlight = efl_add(EFL_UI_SPOTLIGHT_CONTAINER_CLASS, obj); | ||
69 | 66 | ||
70 | return obj; | 67 | return obj; |
71 | } | 68 | } |
72 | 69 | ||
70 | EOLIAN static Eina_Error | ||
71 | _efl_ui_tab_pager_efl_ui_widget_theme_apply(Eo *obj, Efl_Ui_Tab_Pager_Data *pd) | ||
72 | { | ||
73 | Eina_Error err; | ||
74 | |||
75 | err = efl_ui_widget_theme_apply(efl_super(obj, MY_CLASS)); | ||
76 | |||
77 | efl_content_set(efl_part(obj, "efl.tab_root"), pd->tab_bar); | ||
78 | efl_content_set(efl_part(obj, "efl.page_root"), pd->spotlight); | ||
79 | |||
80 | return err; | ||
81 | } | ||
82 | |||
73 | EOLIAN static Efl_Object* | 83 | EOLIAN static Efl_Object* |
74 | _efl_ui_tab_pager_efl_object_finalize(Eo *obj, Efl_Ui_Tab_Pager_Data *pd) | 84 | _efl_ui_tab_pager_efl_object_finalize(Eo *obj, Efl_Ui_Tab_Pager_Data *pd) |
75 | { | 85 | { |
@@ -80,91 +90,157 @@ _efl_ui_tab_pager_efl_object_finalize(Eo *obj, Efl_Ui_Tab_Pager_Data *pd) | |||
80 | return obj; | 90 | return obj; |
81 | } | 91 | } |
82 | 92 | ||
93 | EOLIAN static int | ||
94 | _efl_ui_tab_pager_efl_container_content_count(Eo *obj EINA_UNUSED, Efl_Ui_Tab_Pager_Data *pd) | ||
95 | { | ||
96 | return efl_content_count(pd->spotlight); | ||
97 | } | ||
98 | |||
99 | EOLIAN static Eina_Iterator* | ||
100 | _efl_ui_tab_pager_efl_container_content_iterate(Eo *obj EINA_UNUSED, Efl_Ui_Tab_Pager_Data *pd) | ||
101 | { | ||
102 | return efl_content_iterate(pd->spotlight); | ||
103 | } | ||
104 | |||
105 | EOLIAN static Eina_Bool | ||
106 | _efl_ui_tab_pager_efl_pack_pack(Eo *obj EINA_UNUSED, Efl_Ui_Tab_Pager_Data *pd, Efl_Gfx_Entity *subobj) | ||
107 | { | ||
108 | return efl_pack(pd->spotlight, subobj); | ||
109 | } | ||
110 | |||
111 | EOLIAN static Efl_Gfx_Entity* | ||
112 | _efl_ui_tab_pager_efl_pack_linear_pack_content_get(Eo *obj EINA_UNUSED, Efl_Ui_Tab_Pager_Data *pd, int index) | ||
113 | { | ||
114 | return efl_pack_content_get(pd->spotlight, index); | ||
115 | } | ||
116 | |||
117 | EOLIAN static int | ||
118 | _efl_ui_tab_pager_efl_pack_linear_pack_index_get(Eo *obj EINA_UNUSED, Efl_Ui_Tab_Pager_Data *pd, const Efl_Gfx_Entity *subobj) | ||
119 | { | ||
120 | return efl_pack_index_get(pd->spotlight, subobj); | ||
121 | } | ||
122 | |||
83 | EOLIAN static Eina_Bool | 123 | EOLIAN static Eina_Bool |
84 | _efl_ui_tab_pager_efl_pack_pack_clear(Eo *obj, Efl_Ui_Tab_Pager_Data *sd) | 124 | _efl_ui_tab_pager_efl_pack_pack_clear(Eo *obj EINA_UNUSED, Efl_Ui_Tab_Pager_Data *sd) |
85 | { | 125 | { |
86 | if (!efl_pack_clear(sd->tab_bar)) | 126 | if (!efl_pack_clear(sd->tab_bar)) |
87 | return EINA_FALSE; | 127 | return EINA_FALSE; |
88 | return efl_pack_clear(efl_super(obj, MY_CLASS)); | 128 | return efl_pack_clear(sd->spotlight); |
89 | } | 129 | } |
90 | 130 | ||
91 | EOLIAN static Eina_Bool | 131 | EOLIAN static Eina_Bool |
92 | _efl_ui_tab_pager_efl_pack_unpack_all(Eo *obj, Efl_Ui_Tab_Pager_Data *sd) | 132 | _efl_ui_tab_pager_efl_pack_unpack_all(Eo *obj EINA_UNUSED, Efl_Ui_Tab_Pager_Data *sd) |
93 | { | 133 | { |
94 | if (!efl_pack_unpack_all(sd->tab_bar)) | 134 | if (!efl_pack_unpack_all(sd->tab_bar)) |
95 | return EINA_FALSE; | 135 | return EINA_FALSE; |
96 | return efl_pack_unpack_all(efl_super(obj, MY_CLASS)); | 136 | return efl_pack_unpack_all(sd->spotlight); |
97 | } | 137 | } |
98 | 138 | ||
99 | #define ITEM(s) efl_ui_tab_page_tab_bar_item_get(s) | 139 | #define ITEM(s) efl_ui_tab_page_tab_bar_item_get(s) |
100 | 140 | ||
101 | EOLIAN static Eina_Bool | 141 | EOLIAN static Eina_Bool |
102 | _efl_ui_tab_pager_efl_pack_unpack(Eo *obj, Efl_Ui_Tab_Pager_Data *sd, Efl_Gfx_Entity *subobj) | 142 | _efl_ui_tab_pager_efl_pack_unpack(Eo *obj EINA_UNUSED, Efl_Ui_Tab_Pager_Data *sd, Efl_Gfx_Entity *subobj) |
103 | { | 143 | { |
104 | if (!efl_pack_unpack(sd->tab_bar, ITEM(subobj))) | 144 | if (!efl_pack_unpack(sd->tab_bar, ITEM(subobj))) |
105 | return EINA_FALSE; | 145 | return EINA_FALSE; |
106 | return efl_pack_unpack(efl_super(obj, MY_CLASS), subobj); | 146 | return efl_pack_unpack(sd->spotlight, subobj); |
107 | } | 147 | } |
108 | 148 | ||
109 | EOLIAN static Eina_Bool | 149 | EOLIAN static Eina_Bool |
110 | _efl_ui_tab_pager_efl_pack_linear_pack_begin(Eo *obj, | 150 | _efl_ui_tab_pager_efl_pack_linear_pack_begin(Eo *obj EINA_UNUSED, |
111 | Efl_Ui_Tab_Pager_Data *sd, | 151 | Efl_Ui_Tab_Pager_Data *sd, |
112 | Efl_Gfx_Entity *subobj) | 152 | Efl_Gfx_Entity *subobj) |
113 | { | 153 | { |
114 | if (!efl_pack_begin(sd->tab_bar, ITEM(subobj))) | 154 | if (!efl_pack_begin(sd->tab_bar, ITEM(subobj))) |
115 | return EINA_FALSE; | 155 | return EINA_FALSE; |
116 | return efl_pack_begin(efl_super(obj, MY_CLASS), subobj); | 156 | return efl_pack_begin(sd->spotlight, subobj); |
117 | } | 157 | } |
118 | 158 | ||
119 | EOLIAN static Eina_Bool | 159 | EOLIAN static Eina_Bool |
120 | _efl_ui_tab_pager_efl_pack_linear_pack_end(Eo *obj, | 160 | _efl_ui_tab_pager_efl_pack_linear_pack_end(Eo *obj EINA_UNUSED, |
121 | Efl_Ui_Tab_Pager_Data *sd, | 161 | Efl_Ui_Tab_Pager_Data *sd, |
122 | Efl_Gfx_Entity *subobj) | 162 | Efl_Gfx_Entity *subobj) |
123 | { | 163 | { |
124 | if (!efl_pack_end(sd->tab_bar, ITEM(subobj))) | 164 | if (!efl_pack_end(sd->tab_bar, ITEM(subobj))) |
125 | return EINA_FALSE; | 165 | return EINA_FALSE; |
126 | return efl_pack_end(efl_super(obj, MY_CLASS), subobj); | 166 | return efl_pack_end(sd->spotlight, subobj); |
127 | } | 167 | } |
128 | 168 | ||
129 | EOLIAN static Eina_Bool | 169 | EOLIAN static Eina_Bool |
130 | _efl_ui_tab_pager_efl_pack_linear_pack_before(Eo *obj, | 170 | _efl_ui_tab_pager_efl_pack_linear_pack_before(Eo *obj EINA_UNUSED, |
131 | Efl_Ui_Tab_Pager_Data *sd, | 171 | Efl_Ui_Tab_Pager_Data *sd, |
132 | Efl_Gfx_Entity *subobj, | 172 | Efl_Gfx_Entity *subobj, |
133 | const Efl_Gfx_Entity *existing) | 173 | const Efl_Gfx_Entity *existing) |
134 | { | 174 | { |
135 | if (!efl_pack_before(sd->tab_bar, ITEM(subobj), ITEM(existing))) | 175 | if (!efl_pack_before(sd->tab_bar, ITEM(subobj), ITEM(existing))) |
136 | return EINA_FALSE; | 176 | return EINA_FALSE; |
137 | return efl_pack_before(efl_super(obj, MY_CLASS), subobj, existing); | 177 | return efl_pack_before(sd->spotlight, subobj, existing); |
138 | } | 178 | } |
139 | 179 | ||
140 | EOLIAN static Eina_Bool | 180 | EOLIAN static Eina_Bool |
141 | _efl_ui_tab_pager_efl_pack_linear_pack_after(Eo *obj, | 181 | _efl_ui_tab_pager_efl_pack_linear_pack_after(Eo *obj EINA_UNUSED, |
142 | Efl_Ui_Tab_Pager_Data *sd, | 182 | Efl_Ui_Tab_Pager_Data *sd, |
143 | Efl_Gfx_Entity *subobj, | 183 | Efl_Gfx_Entity *subobj, |
144 | const Efl_Gfx_Entity *existing) | 184 | const Efl_Gfx_Entity *existing) |
145 | { | 185 | { |
146 | if (!efl_pack_after(sd->tab_bar, ITEM(subobj), ITEM(existing))) | 186 | if (!efl_pack_after(sd->tab_bar, ITEM(subobj), ITEM(existing))) |
147 | return EINA_FALSE; | 187 | return EINA_FALSE; |
148 | return efl_pack_after(efl_super(obj, MY_CLASS), subobj, existing); | 188 | return efl_pack_after(sd->spotlight, subobj, existing); |
149 | } | 189 | } |
150 | 190 | ||
151 | EOLIAN static Eina_Bool | 191 | EOLIAN static Eina_Bool |
152 | _efl_ui_tab_pager_efl_pack_linear_pack_at(Eo *obj, | 192 | _efl_ui_tab_pager_efl_pack_linear_pack_at(Eo *obj EINA_UNUSED, |
153 | Efl_Ui_Tab_Pager_Data *sd, | 193 | Efl_Ui_Tab_Pager_Data *sd, |
154 | Efl_Gfx_Entity *subobj, | 194 | Efl_Gfx_Entity *subobj, |
155 | int index) | 195 | int index) |
156 | { | 196 | { |
157 | if (!efl_pack_at(sd->tab_bar, ITEM(subobj), index)) | 197 | if (!efl_pack_at(sd->tab_bar, ITEM(subobj), index)) |
158 | return EINA_FALSE; | 198 | return EINA_FALSE; |
159 | return efl_pack_at(efl_super(obj, MY_CLASS), subobj, index); | 199 | return efl_pack_at(sd->spotlight, subobj, index); |
160 | } | 200 | } |
161 | 201 | ||
162 | EOLIAN static Efl_Gfx_Entity * | 202 | EOLIAN static Efl_Gfx_Entity * |
163 | _efl_ui_tab_pager_efl_pack_linear_pack_unpack_at(Eo *obj, Efl_Ui_Tab_Pager_Data *sd, int index) | 203 | _efl_ui_tab_pager_efl_pack_linear_pack_unpack_at(Eo *obj EINA_UNUSED, Efl_Ui_Tab_Pager_Data *sd, int index) |
164 | { | 204 | { |
165 | if (!efl_pack_unpack_at(sd->tab_bar, index)) | 205 | if (!efl_pack_unpack_at(sd->tab_bar, index)) |
166 | return NULL; | 206 | return NULL; |
167 | return efl_pack_unpack_at(efl_super(obj, MY_CLASS), index); | 207 | return efl_pack_unpack_at(sd->spotlight, index); |
208 | } | ||
209 | |||
210 | EOLIAN static Efl_Ui_Selectable* | ||
211 | _efl_ui_tab_pager_efl_ui_single_selectable_last_selected_get(const Eo *obj EINA_UNUSED, Efl_Ui_Tab_Pager_Data *pd) | ||
212 | { | ||
213 | Efl_Ui_Tab_Bar_Default_Item *item = efl_ui_selectable_last_selected_get(pd->tab_bar); | ||
214 | |||
215 | return efl_parent_get(item); | ||
216 | } | ||
217 | |||
218 | EOLIAN static void | ||
219 | _efl_ui_tab_pager_efl_ui_single_selectable_fallback_selection_set(Eo *obj EINA_UNUSED, Efl_Ui_Tab_Pager_Data *pd, Efl_Ui_Selectable *fallback) | ||
220 | { | ||
221 | efl_ui_selectable_fallback_selection_set(pd->tab_bar, efl_ui_tab_page_tab_bar_item_get(fallback)); | ||
222 | } | ||
223 | |||
224 | EOLIAN static Efl_Ui_Selectable* | ||
225 | _efl_ui_tab_pager_efl_ui_single_selectable_fallback_selection_get(const Eo *obj EINA_UNUSED, Efl_Ui_Tab_Pager_Data *pd) | ||
226 | { | ||
227 | Efl_Ui_Tab_Bar_Default_Item *item = efl_ui_selectable_fallback_selection_get(pd->tab_bar); | ||
228 | |||
229 | return efl_parent_get(item); | ||
230 | } | ||
231 | |||
232 | EOLIAN static void | ||
233 | _efl_ui_tab_pager_efl_ui_single_selectable_allow_manual_deselection_set(Eo *obj EINA_UNUSED, Efl_Ui_Tab_Pager_Data *pd, Eina_Bool allow_manual_deselection) | ||
234 | { | ||
235 | efl_ui_selectable_allow_manual_deselection_set(pd->tab_bar, allow_manual_deselection); | ||
168 | } | 236 | } |
169 | 237 | ||
238 | |||
239 | EOLIAN static Eina_Bool | ||
240 | _efl_ui_tab_pager_efl_ui_single_selectable_allow_manual_deselection_get(const Eo *obj EINA_UNUSED, Efl_Ui_Tab_Pager_Data *pd) | ||
241 | { | ||
242 | return efl_ui_selectable_allow_manual_deselection_get(pd->tab_bar); | ||
243 | } | ||
244 | |||
245 | |||
170 | #include "efl_ui_tab_pager.eo.c" | 246 | #include "efl_ui_tab_pager.eo.c" |
diff --git a/src/lib/elementary/efl_ui_tab_pager.eo b/src/lib/elementary/efl_ui_tab_pager.eo index 9f4bb42d4f..ae284c2e97 100644 --- a/src/lib/elementary/efl_ui_tab_pager.eo +++ b/src/lib/elementary/efl_ui_tab_pager.eo | |||
@@ -1,4 +1,5 @@ | |||
1 | class @beta Efl.Ui.Tab_Pager extends Efl.Ui.Spotlight.Container | 1 | class @beta Efl.Ui.Tab_Pager extends Efl.Ui.Layout_Base |
2 | implements Efl.Pack_Linear, Efl.Ui.Single_Selectable | ||
2 | { | 3 | { |
3 | [[Container for @Efl.Ui.Tab_Page | 4 | [[Container for @Efl.Ui.Tab_Page |
4 | 5 | ||
@@ -15,20 +16,37 @@ class @beta Efl.Ui.Tab_Pager extends Efl.Ui.Spotlight.Container | |||
15 | tab_bar: Efl.Ui.Tab_Bar; [[Tab bar for the items of the @Efl.Ui.Tab_Page]] | 16 | tab_bar: Efl.Ui.Tab_Bar; [[Tab bar for the items of the @Efl.Ui.Tab_Page]] |
16 | } | 17 | } |
17 | } | 18 | } |
19 | @property spotlight_manager { | ||
20 | [[Spotlight manager to show]] | ||
21 | set { | ||
22 | |||
23 | } | ||
24 | values { | ||
25 | manager : Efl.Ui.Spotlight.Manager; | ||
26 | } | ||
27 | } | ||
18 | } | 28 | } |
19 | implements { | 29 | implements { |
20 | Efl.Object.constructor; | 30 | Efl.Object.constructor; |
21 | Efl.Object.destructor; | 31 | Efl.Object.destructor; |
22 | Efl.Object.finalize; | 32 | Efl.Object.finalize; |
33 | Efl.Container.content_count; | ||
34 | Efl.Container.content_iterate; | ||
23 | Efl.Pack.pack_clear; | 35 | Efl.Pack.pack_clear; |
24 | Efl.Pack.unpack_all; | 36 | Efl.Pack.unpack_all; |
25 | Efl.Pack.unpack; | 37 | Efl.Pack.unpack; |
38 | Efl.Pack.pack; | ||
26 | Efl.Pack_Linear.pack_begin; | 39 | Efl.Pack_Linear.pack_begin; |
27 | Efl.Pack_Linear.pack_end; | 40 | Efl.Pack_Linear.pack_end; |
28 | Efl.Pack_Linear.pack_before; | 41 | Efl.Pack_Linear.pack_before; |
29 | Efl.Pack_Linear.pack_after; | 42 | Efl.Pack_Linear.pack_after; |
30 | Efl.Pack_Linear.pack_at; | 43 | Efl.Pack_Linear.pack_at; |
44 | Efl.Pack_Linear.pack_content_get; | ||
45 | Efl.Pack_Linear.pack_index_get; | ||
31 | Efl.Pack_Linear.pack_unpack_at; | 46 | Efl.Pack_Linear.pack_unpack_at; |
32 | Efl.Ui.Spotlight.Container.active_element { set; } | 47 | Efl.Ui.Single_Selectable.last_selected {get;} |
48 | Efl.Ui.Single_Selectable.fallback_selection {set; get;} | ||
49 | Efl.Ui.Single_Selectable.allow_manual_deselection {set; get;} | ||
50 | Efl.Ui.Widget.theme_apply; | ||
33 | } | 51 | } |
34 | } | 52 | } |
diff --git a/src/lib/elementary/efl_ui_tab_pager_private.h b/src/lib/elementary/efl_ui_tab_pager_private.h index 1da72fe5ec..9ac7163286 100644 --- a/src/lib/elementary/efl_ui_tab_pager_private.h +++ b/src/lib/elementary/efl_ui_tab_pager_private.h | |||
@@ -6,6 +6,7 @@ typedef struct _Efl_Ui_Tab_Pager_Data Efl_Ui_Tab_Pager_Data; | |||
6 | struct _Efl_Ui_Tab_Pager_Data | 6 | struct _Efl_Ui_Tab_Pager_Data |
7 | { | 7 | { |
8 | Eo *tab_bar; | 8 | Eo *tab_bar; |
9 | Eo *spotlight; | ||
9 | }; | 10 | }; |
10 | 11 | ||
11 | 12 | ||