Merge remote-tracking branch 'remotes/origin/upstream'
[framework/uifw/elementary.git] / src / lib / elm_toolbar.c
1 #include <Elementary.h>
2 #include "elm_priv.h"
3 #include "els_scroller.h"
4 #include "els_box.h"
5 #include "els_icon.h"
6
7 typedef struct _Widget_Data Widget_Data;
8 typedef struct _Elm_Toolbar_Item Elm_Toolbar_Item;
9
10 struct _Widget_Data
11 {
12    Evas_Object *scr, *bx;
13    Evas_Object *menu_parent;
14    Eina_Inlist *items;
15    Elm_Toolbar_Item *more_item, *selected_item;
16    Elm_Toolbar_Shrink_Mode shrink_mode;
17    Elm_Icon_Lookup_Order lookup_order;
18    int icon_size;
19    unsigned int item_count;
20    double align;
21 <<<<<<< HEAD
22    Eina_Bool homogeneous : 1;
23    Eina_Bool no_select : 1;
24    Eina_Bool always_select : 1;
25 =======
26    Elm_Object_Select_Mode select_mode;
27    Eina_Bool homogeneous : 1;
28 >>>>>>> remotes/origin/upstream
29    Eina_Bool vertical : 1;
30    Eina_Bool long_press : 1;
31    Ecore_Timer *long_timer;
32    Ecore_Job *resize_job;
33 };
34
35 struct _Elm_Toolbar_Item
36 {
37    ELM_WIDGET_ITEM;
38    EINA_INLIST;
39    const char *label;
40    const char *icon_str;
41    Evas_Object *icon;
42    Evas_Object *object;
43    Evas_Object *o_menu;
44    Evas_Smart_Cb func;
45    struct {
46       int priority;
47       Eina_Bool visible : 1;
48    } prio;
49    Eina_Bool selected : 1;
50    Eina_Bool separator : 1;
51    Eina_Bool menu : 1;
52    Eina_List *states;
53    Eina_List *current_state;
54 };
55
56 #define ELM_TOOLBAR_ITEM_FROM_INLIST(item)      \
57   ((item) ? EINA_INLIST_CONTAINER_GET(item, Elm_Toolbar_Item) : NULL)
58
59 struct _Elm_Toolbar_Item_State
60 {
61    const char *label;
62    const char *icon_str;
63    Evas_Object *icon;
64    Evas_Smart_Cb func;
65    const void *data;
66 };
67
68 static const char *widtype = NULL;
69 static void _item_show(Elm_Toolbar_Item *it);
70 static void _item_select(Elm_Toolbar_Item *it);
71 static void _item_unselect(Elm_Toolbar_Item *it);
72 static void _del_pre_hook(Evas_Object *obj);
73 static void _del_hook(Evas_Object *obj);
74 static void _mirrored_set(Evas_Object *obj, Eina_Bool mirrored);
75 static void _mirrored_set_item(Evas_Object *obj, Elm_Toolbar_Item *it, Eina_Bool mirrored);
76 static void _theme_hook(Evas_Object *obj);
77 static void _sizing_eval(Evas_Object *obj);
78 static void _resize(void *data, Evas *e, Evas_Object *obj, void *event_info);
79 static void _menu_move_resize(void *data, Evas *e, Evas_Object *obj, void *event_info);
80 static void _menu_hide(void *data, Evas *e, Evas_Object *obj, void *event_info);
81 static void _layout(Evas_Object *o, Evas_Object_Box_Data *priv, void *data);
82 <<<<<<< HEAD
83 static void _elm_toolbar_item_icon_obj_set(Evas_Object *obj, Elm_Toolbar_Item *item, Evas_Object *icon_obj, const char *icon_str, double icon_size, const char *signal);
84 static void _item_label_set(Elm_Toolbar_Item *item, const char *label, const char *signal);
85 =======
86 static void _elm_toolbar_item_icon_obj_set(Evas_Object *obj, Elm_Toolbar_Item *item, Evas_Object *icon_obj, const char *icon_str, double icon_size, const char *sig);
87 static void _item_label_set(Elm_Toolbar_Item *item, const char *label, const char *sig);
88 >>>>>>> remotes/origin/upstream
89
90 static const char SIG_CLICKED[] = "clicked";
91 static const char SIG_LONGPRESSED[] = "longpressed";
92 static const char SIG_CLICKED_DOUBLE[] = "clicked,double";
93
94 static const Evas_Smart_Cb_Description _signals[] = {
95    {SIG_CLICKED, ""},
96    {SIG_LONGPRESSED, ""},
97    {SIG_CLICKED_DOUBLE, ""},
98    {NULL, NULL}
99 };
100
101 static void
102 _item_disable_hook(Elm_Object_Item *it)
103 {
104 <<<<<<< HEAD
105    ELM_OBJ_ITEM_CHECK_OR_RETURN(it);
106
107    Widget_Data *wd;
108    Elm_Toolbar_Item *toolbar_it = (Elm_Toolbar_Item *) it;
109 =======
110    Widget_Data *wd;
111    Elm_Toolbar_Item *toolbar_it = (Elm_Toolbar_Item *)it;
112 >>>>>>> remotes/origin/upstream
113
114    wd = elm_widget_data_get(WIDGET(toolbar_it));
115    if (!wd) return;
116
117    if (elm_widget_item_disabled_get(toolbar_it))
118      {
119         edje_object_signal_emit(VIEW(toolbar_it), "elm,state,disabled", "elm");
120         elm_widget_signal_emit(toolbar_it->icon, "elm,state,disabled", "elm");
121      }
122    else
123      {
124         edje_object_signal_emit(VIEW(toolbar_it), "elm,state,enabled", "elm");
125         elm_widget_signal_emit(toolbar_it->icon, "elm,state,enabled", "elm");
126      }
127    _resize(WIDGET(toolbar_it), NULL, NULL, NULL);
128 }
129
130 static Eina_Bool
131 _item_icon_set(Evas_Object *icon_obj, const char *type, const char *icon)
132 {
133    char icon_str[512];
134
135    if ((!type) || (!*type)) goto end;
136    if ((!icon) || (!*icon)) return EINA_FALSE;
137    if ((snprintf(icon_str, sizeof(icon_str), "%s%s", type, icon) > 0)
138        && (elm_icon_standard_set(icon_obj, icon_str)))
139      return EINA_TRUE;
140 end:
141    if (elm_icon_standard_set(icon_obj, icon))
142      return EINA_TRUE;
143    WRN("couldn't find icon definition for '%s'", icon);
144    return EINA_FALSE;
145 }
146
147 static int
148 _elm_toolbar_icon_size_get(Widget_Data *wd)
149 {
150    const char *icon_size = edje_object_data_get(
151       elm_smart_scroller_edje_object_get(wd->scr), "icon_size");
152    if (icon_size)
153      return atoi(icon_size);
154    return _elm_config->icon_size;
155 }
156
157 static void
158 _item_show(Elm_Toolbar_Item *it)
159 {
160    Widget_Data *wd = elm_widget_data_get(WIDGET(it));
161    Evas_Coord x, y, w, h, bx, by;
162
163    if (!wd) return;
164    evas_object_geometry_get(wd->bx, &bx, &by, NULL, NULL);
165    evas_object_geometry_get(VIEW(it), &x, &y, &w, &h);
166    elm_smart_scroller_child_region_show(wd->scr, x - bx, y - by, w, h);
167 }
168
169 static void
170 _item_unselect(Elm_Toolbar_Item *item)
171 {
172    Widget_Data *wd;
173    if ((!item) || (!item->selected)) return;
174    wd = elm_widget_data_get(WIDGET(item));
175    if (!wd) return;
176    item->selected = EINA_FALSE;
177    wd->selected_item = NULL;
178    edje_object_signal_emit(VIEW(item), "elm,state,unselected", "elm");
179    elm_widget_signal_emit(item->icon, "elm,state,unselected", "elm");
180 }
181
182 static void
183 _item_select(Elm_Toolbar_Item *it)
184 {
185    Elm_Toolbar_Item *it2;
186    Widget_Data *wd = elm_widget_data_get(WIDGET(it));
187    Evas_Object *obj2;
188    Eina_Bool sel;
189
190    if (!wd) return;
191    if (elm_widget_item_disabled_get(it) || (it->separator) || (it->object)) return;
192    sel = it->selected;
193
194 <<<<<<< HEAD
195    if (!wd->no_select)
196      {
197         if (sel)
198           {
199              if (wd->always_select) return;
200 =======
201    if (wd->select_mode != ELM_OBJECT_SELECT_MODE_NONE)
202      {
203         if (sel)
204           {
205              if (wd->select_mode == ELM_OBJECT_SELECT_MODE_ALWAYS) return;
206 >>>>>>> remotes/origin/upstream
207              _item_unselect(it);
208           }
209         else
210           {
211              it2 = (Elm_Toolbar_Item *)
212                 elm_toolbar_selected_item_get(WIDGET(it));
213              _item_unselect(it2);
214
215              it->selected = EINA_TRUE;
216              wd->selected_item = it;
217              edje_object_signal_emit(VIEW(it), "elm,state,selected", "elm");
218              elm_widget_signal_emit(it->icon, "elm,state,selected", "elm");
219              _item_show(it);
220           }
221      }
222    obj2 = WIDGET(it);
223    if (it->menu && (!sel))
224      {
225         evas_object_show(it->o_menu);
226         evas_object_event_callback_add(VIEW(it), EVAS_CALLBACK_RESIZE,
227                                        _menu_move_resize, it);
228         evas_object_event_callback_add(VIEW(it), EVAS_CALLBACK_MOVE,
229                                        _menu_move_resize, it);
230
231         _menu_move_resize(it, NULL, NULL, NULL);
232      }
233    if (it->func) it->func((void *)(it->base.data), WIDGET(it), it);
234    evas_object_smart_callback_call(obj2, SIG_CLICKED, it);
235 }
236
237 static void
238 _menu_hide(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
239 {
240    Elm_Toolbar_Item *selected;
241    Elm_Toolbar_Item *it = data;
242    selected = (Elm_Toolbar_Item *) elm_toolbar_selected_item_get(WIDGET(it));
243    _item_unselect(selected);
244 }
245
246 static void
247 _menu_del(void *data, Evas *e __UNUSED__, Evas_Object *obj, void *event_info __UNUSED__)
248 {
249    // avoid hide being emitted during object deletion
250    evas_object_event_callback_del_full
251       (obj, EVAS_CALLBACK_HIDE, _menu_hide, data);
252 }
253
254 static void
255 _menu_move_resize(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
256 {
257    Elm_Toolbar_Item *it = data;
258    Evas_Coord x,y,w,h;
259    Widget_Data *wd = elm_widget_data_get(WIDGET(it));
260
261    if ((!wd) || (!wd->menu_parent)) return;
262    evas_object_geometry_get(VIEW(it), &x, &y, &w, &h);
263    elm_menu_move(it->o_menu, x, y+h);
264 }
265
266 static void
267 _item_del(Elm_Toolbar_Item *it)
268 {
269    Elm_Toolbar_Item_State *it_state;
270    _item_unselect(it);
271    EINA_LIST_FREE(it->states, it_state)
272      {
273         if (it->icon == it_state->icon)
274           it->icon = NULL;
275         eina_stringshare_del(it_state->label);
276         eina_stringshare_del(it_state->icon_str);
277         if (it_state->icon) evas_object_del(it_state->icon);
278         free(it_state);
279      }
280    eina_stringshare_del(it->label);
281    eina_stringshare_del(it->icon_str);
282    if (it->icon) evas_object_del(it->icon);
283    //TODO: See if checking for wd->menu_parent is necessary before deleting menu
284    if (it->o_menu) evas_object_del(it->o_menu);
285 }
286
287 static void
288 _del_pre_hook(Evas_Object *obj)
289 {
290    Widget_Data *wd = elm_widget_data_get(obj);
291    Elm_Toolbar_Item *it, *next;
292
293    if (!wd) return;
294    it = ELM_TOOLBAR_ITEM_FROM_INLIST(wd->items);
295    while(it)
296      {
297         next = ELM_TOOLBAR_ITEM_FROM_INLIST(EINA_INLIST_GET(it)->next);
298         _item_del(it);
299         elm_widget_item_free(it);
300         it = next;
301      }
302    if (wd->more_item)
303      {
304         _item_del(wd->more_item);
305         elm_widget_item_free(wd->more_item);
306      }
307    if (wd->long_timer)
308      {
309         ecore_timer_del(wd->long_timer);
310         wd->long_timer = NULL;
311      }
312 }
313
314 static void
315 _del_hook(Evas_Object *obj)
316 {
317    Widget_Data *wd = elm_widget_data_get(obj);
318
319    if (!wd) return;
320    free(wd);
321 }
322
323
324 static void
325 _mirrored_set_item(Evas_Object *obj __UNUSED__, Elm_Toolbar_Item *it, Eina_Bool mirrored)
326 {
327    edje_object_mirrored_set(VIEW(it), mirrored);
328    elm_widget_mirrored_set(it->o_menu, mirrored);
329 }
330
331 static void
332 _theme_hook_item(Evas_Object *obj, Elm_Toolbar_Item *it, double scale, int icon_size)
333 {
334    Widget_Data *wd = elm_widget_data_get(obj);
335    Evas_Object *view = VIEW(it);
336    Evas_Coord mw, mh;
337    const char *style = elm_widget_style_get(obj);
338
339    _mirrored_set_item(obj, it, elm_widget_mirrored_get(obj));
340    edje_object_scale_set(view, scale);
341    if (!it->separator && !it->object)
342      {
343         _elm_theme_object_set(obj, view, "toolbar", "item", style);
344         if (it->selected)
345           {
346              edje_object_signal_emit(view, "elm,state,selected", "elm");
347              elm_widget_signal_emit(it->icon, "elm,state,selected", "elm");
348           }
349         if (elm_widget_item_disabled_get(it))
350           {
351              edje_object_signal_emit(view, "elm,state,disabled", "elm");
352              elm_widget_signal_emit(it->icon, "elm,state,disabled", "elm");
353           }
354         if (it->icon)
355           {
356              int ms = 0;
357
358              ms = ((double)icon_size * scale);
359              evas_object_size_hint_min_set(it->icon, ms, ms);
360              evas_object_size_hint_max_set(it->icon, ms, ms);
361              edje_object_part_swallow(view, "elm.swallow.icon", it->icon);
362           }
363         edje_object_part_text_set(view, "elm.text", it->label);
364      }
365    else
366      {
367         if (!it->object)
368           {
369              _elm_theme_object_set(obj, view, "toolbar", "separator", style);
370              if (wd->vertical)
371                {
372                   evas_object_size_hint_weight_set(view, EVAS_HINT_EXPAND, -1.0);
373                   evas_object_size_hint_align_set(view, EVAS_HINT_FILL, 0.5);
374                }
375              else
376                {
377                   evas_object_size_hint_weight_set(view, -1.0, EVAS_HINT_EXPAND);
378                   evas_object_size_hint_align_set(view, 0.5, EVAS_HINT_FILL);
379                }
380           }
381         else
382           {
383              _elm_theme_object_set(obj, view, "toolbar", "object", style);
384              edje_object_part_swallow(view, "elm.swallow.object", it->object);
385           }
386      }
387
388    mw = mh = -1;
389    if (!it->separator && !it->object)
390      elm_coords_finger_size_adjust(1, &mw, 1, &mh);
391    edje_object_size_min_restricted_calc(view, &mw, &mh, mw, mh);
392    if (!it->separator && !it->object)
393      elm_coords_finger_size_adjust(1, &mw, 1, &mh);
394    evas_object_size_hint_min_set(view, mw, mh);
395 }
396
397 static void
398 _mirrored_set(Evas_Object *obj, Eina_Bool mirrored)
399 {
400    Widget_Data *wd = elm_widget_data_get(obj);
401    Elm_Toolbar_Item *it;
402
403    EINA_INLIST_FOREACH(wd->items, it)
404       _mirrored_set_item(obj, it, mirrored);
405    if (wd->more_item)
406      _mirrored_set_item(obj, wd->more_item, mirrored);
407 }
408
409 static void
410 _theme_hook(Evas_Object *obj)
411 {
412    Widget_Data *wd = elm_widget_data_get(obj);
413    Elm_Toolbar_Item *it;
414    double scale = 0;
415
416    if (!wd) return;
417    _elm_widget_mirrored_reload(obj);
418    elm_smart_scroller_object_theme_set(obj, wd->scr, "toolbar", "base", elm_widget_style_get(obj));
419    _mirrored_set(obj, elm_widget_mirrored_get(obj));
420    scale = (elm_widget_scale_get(obj) * _elm_config->scale);
421    edje_object_scale_set(wd->scr, scale);
422    wd->icon_size = _elm_toolbar_icon_size_get(wd);
423    EINA_INLIST_FOREACH(wd->items, it)
424       _theme_hook_item(obj, it, scale, wd->icon_size);
425    if (wd->more_item)
426      _theme_hook_item(obj, wd->more_item, scale, wd->icon_size);
427    _sizing_eval(obj);
428 }
429
430 static void
431 _item_text_set_hook(Elm_Object_Item *it,
432                     const char *part,
433                     const char *label)
434 {
435 <<<<<<< HEAD
436    ELM_OBJ_ITEM_CHECK_OR_RETURN(it);
437    if (part && strcmp(part, "default")) return;
438    _item_label_set(((Elm_Toolbar_Item *) it), label, "elm,state,label_set");
439 =======
440    if (part && strcmp(part, "default")) return;
441    _item_label_set(((Elm_Toolbar_Item *)it), label, "elm,state,label_set");
442 >>>>>>> remotes/origin/upstream
443 }
444
445 static const char *
446 _item_text_get_hook(const Elm_Object_Item *it, const char *part)
447 {
448 <<<<<<< HEAD
449    ELM_OBJ_ITEM_CHECK_OR_RETURN(it, NULL);
450    if (part && strcmp(part, "default")) return NULL;
451    return ((Elm_Toolbar_Item *) it)->label;
452 =======
453    if (part && strcmp(part, "default")) return NULL;
454    return ((Elm_Toolbar_Item *)it)->label;
455 >>>>>>> remotes/origin/upstream
456 }
457
458 static void
459 _item_content_set_hook(Elm_Object_Item *it,
460 <<<<<<< HEAD
461                     const char *part,
462                     Evas_Object *content)
463 {
464 =======
465                        const char *part,
466                        Evas_Object *content)
467 {
468    double scale;
469
470 >>>>>>> remotes/origin/upstream
471    if (part && strcmp(part, "object")) return;
472    Elm_Toolbar_Item *item = (Elm_Toolbar_Item *) it;
473    Evas_Object *obj = WIDGET(item);
474    Widget_Data *wd = elm_widget_data_get(obj);
475 <<<<<<< HEAD
476    double scale;
477 =======
478
479 >>>>>>> remotes/origin/upstream
480    if (item->object == content) return;
481    item->object = content;
482    elm_widget_sub_object_add(obj, item->object);
483    scale = (elm_widget_scale_get(obj) * _elm_config->scale);
484    _theme_hook_item(obj, item, scale, wd->icon_size);
485 }
486
487 static Evas_Object *
488 _item_content_get_hook(const Elm_Object_Item *it, const char *part)
489 {
490    if (part && strcmp(part, "object")) return NULL;
491    return ((Elm_Toolbar_Item *) it)->object;
492 }
493
494 static Evas_Object *
495 _item_content_unset_hook(Elm_Object_Item *it, const char *part)
496 {
497 <<<<<<< HEAD
498    if (part && strcmp(part, "object")) return;
499    Elm_Toolbar_Item *item = (Elm_Toolbar_Item *) it;
500    Evas_Object *obj = WIDGET(item);
501    Widget_Data *wd = elm_widget_data_get(obj);
502    double scale;
503    edje_object_part_unswallow(VIEW(it), item->object);
504    elm_widget_sub_object_del(obj, item->object);
505    item->object = NULL;
506    scale = (elm_widget_scale_get(obj) * _elm_config->scale);
507    _theme_hook_item(obj, item, scale, wd->icon_size);
508 =======
509    Evas_Object *o;
510    double scale;
511
512    if (part && strcmp(part, "object")) return NULL;
513    Elm_Toolbar_Item *item = (Elm_Toolbar_Item *) it;
514    Evas_Object *obj = WIDGET(item);
515    Widget_Data *wd = elm_widget_data_get(obj);
516
517    edje_object_part_unswallow(VIEW(it), item->object);
518    elm_widget_sub_object_del(obj, item->object);
519    o = item->object;
520    item->object = NULL;
521    scale = (elm_widget_scale_get(obj) * _elm_config->scale);
522    _theme_hook_item(obj, item, scale, wd->icon_size);
523    return o;
524 >>>>>>> remotes/origin/upstream
525 }
526
527 static void
528 _translate_hook(Evas_Object *obj)
529 {
530    evas_object_smart_callback_call(obj, "language,changed", NULL);
531 }
532
533 static void
534 _sizing_eval(Evas_Object *obj)
535 {
536    Widget_Data *wd = elm_widget_data_get(obj);
537    Evas_Coord minw = -1, minh = -1, minw_bx = -1, minh_bx = -1;
538    Evas_Coord vw = 0, vh = 0;
539    Evas_Coord w, h;
540
541    if (!wd) return;
542    evas_object_smart_need_recalculate_set(wd->bx, EINA_TRUE);
543    evas_object_smart_calculate(wd->bx);
544    edje_object_size_min_calc(elm_smart_scroller_edje_object_get(wd->scr),
545                              &minw, &minh);
546    evas_object_geometry_get(obj, NULL, NULL, &w, &h);
547    if (w < minw) w = minw;
548    if (h < minh) h = minh;
549    evas_object_resize(wd->scr, w, h);
550
551    evas_object_size_hint_min_get(wd->bx, &minw_bx, &minh_bx);
552 //   if (wd->vertical && (h > minh)) minh = h;
553 //   if ((!wd->vertical) && (w > minw)) minw = w;
554    elm_smart_scroller_child_viewport_size_get(wd->scr, &vw, &vh);
555    if (wd->shrink_mode == ELM_TOOLBAR_SHRINK_NONE)
556      {
557         if (wd->vertical)
558           {
559              minw = minw_bx + (w - vw);
560              minh = minh_bx + (h - vh);
561           }
562         else
563           {
564              minw = minw_bx + (w - vw);
565              minh = minh_bx + (h - vh);
566           }
567      }
568    else if (wd->shrink_mode == ELM_TOOLBAR_SHRINK_EXPAND)
569      {
570         minw = minw_bx + (w - vw);
571         minh = minh_bx + (h - vh);
572         if (minw_bx < vw) minw_bx = vw;
573         if (minh_bx < vh) minh_bx = vh;
574      }
575    else
576      {
577         if (wd->vertical)
578           {
579              minw = minw_bx + (w - vw);
580              minh = h - vh;
581           }
582         else
583           {
584              minw = w - vw;
585              minh = minh_bx + (h - vh);
586           }
587 //        if (wd->vertical) minh = h - vh;
588 //        else minw = w - vw;
589 //        minh = minh + (h - vh);
590      }
591    evas_object_resize(wd->bx, minw_bx, minh_bx);
592    evas_object_size_hint_min_set(obj, minw, minh);
593    evas_object_size_hint_max_set(obj, -1, -1);
594 }
595
596 static void
597 _item_menu_create(Widget_Data *wd, Elm_Toolbar_Item *item)
598 {
599    item->o_menu = elm_menu_add(VIEW(item));
600    item->menu = EINA_TRUE;
601    if (wd->menu_parent)
602      elm_menu_parent_set(item->o_menu, wd->menu_parent);
603    evas_object_event_callback_add(item->o_menu, EVAS_CALLBACK_HIDE,
604                                   _menu_hide, item);
605    evas_object_event_callback_add(item->o_menu, EVAS_CALLBACK_DEL,
606                                   _menu_del, item);
607 }
608
609 static void
610 _item_menu_destroy(Elm_Toolbar_Item *item)
611 {
612    if (item->o_menu)
613      {
614         evas_object_del(item->o_menu);
615         item->o_menu = NULL;
616      }
617    item->menu = EINA_FALSE;
618 }
619
620 static int
621 _toolbar_item_prio_compare_cb(const void *i1, const void *i2)
622 {
623    const Elm_Toolbar_Item *eti1 = i1;
624    const Elm_Toolbar_Item *eti2 = i2;
625
626    if (!eti2) return 1;
627    if (!eti1) return -1;
628
629    return eti2->prio.priority - eti1->prio.priority;
630 }
631
632 static void
633 _fix_items_visibility(Widget_Data *wd, Evas_Coord *iw, Evas_Coord vw)
634 {
635    Elm_Toolbar_Item *it;
636    Eina_List *sorted = NULL;
637    Evas_Coord ciw = 0, cih = 0;
638
639    EINA_INLIST_FOREACH(wd->items, it)
640      {
641         sorted = eina_list_sorted_insert(sorted,
642                                          _toolbar_item_prio_compare_cb, it);
643      }
644
645    if (wd->more_item)
646      {
647         evas_object_geometry_get(wd->VIEW(more_item), NULL, NULL, &ciw, &cih);
648         if (wd->vertical) *iw += cih;
649         else              *iw += ciw;
650      }
651    EINA_LIST_FREE(sorted, it)
652      {
653         evas_object_geometry_get(VIEW(it), NULL, NULL, &ciw, &cih);
654         if (wd->vertical) *iw += cih;
655         else              *iw += ciw;
656         it->prio.visible = (*iw <= vw);
657      }
658 }
659
660 static void
661 _elm_toolbar_item_menu_cb(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
662 {
663    Elm_Toolbar_Item *it = data;
664    if (it->func) it->func((void *)(it->base.data), WIDGET(it), it);
665 }
666
667 static void
668 _resize_job(void *data)
669 {
670    Evas_Object *obj = (Evas_Object *)data;
671    Widget_Data *wd = elm_widget_data_get(obj);
672    Evas_Coord mw, mh, vw = 0, vh = 0, w = 0, h = 0;
673    Elm_Toolbar_Item *it;
674
675    if (!wd) return;
676    wd->resize_job = NULL;
677    elm_smart_scroller_child_viewport_size_get(wd->scr, &vw, &vh);
678    evas_object_size_hint_min_get(wd->bx, &mw, &mh);
679    evas_object_geometry_get(wd->bx, NULL, NULL, &w, &h);
680    if (wd->shrink_mode == ELM_TOOLBAR_SHRINK_MENU)
681      {
682         Evas_Coord iw = 0, ih = 0, more_w = 0, more_h = 0;
683
684         if (wd->vertical)
685           {
686              evas_object_resize(wd->bx, w, vh);
687              _fix_items_visibility(wd, &ih, vh);
688           }
689         else
690           {
691              evas_object_resize(wd->bx, vw, h);
692              _fix_items_visibility(wd, &iw, vw);
693           }
694         evas_object_geometry_get(wd->VIEW(more_item), NULL, NULL,
695                                  &more_w, &more_h);
696         if (wd->vertical)
697           {
698              if ((ih - more_h) <= vh) ih -= more_h;
699           }
700         else
701           {
702              if ((iw - more_w) <= vw) iw -= more_w;
703           }
704
705         /* All items are removed from the box object, since removing individual
706          * items won't trigger a resize. Items are be readded below. */
707         evas_object_box_remove_all(wd->bx, EINA_FALSE);
708 <<<<<<< HEAD
709         if (((wd->vertical)  && (ih > vh)) || 
710 =======
711         if (((wd->vertical)  && (ih > vh)) ||
712 >>>>>>> remotes/origin/upstream
713             ((!wd->vertical) && (iw > vw)))
714           {
715              Evas_Object *menu;
716
717              _item_menu_destroy(wd->more_item);
718              _item_menu_create(wd, wd->more_item);
719              menu = elm_toolbar_item_menu_get((Elm_Object_Item *)wd->more_item);
720              EINA_INLIST_FOREACH(wd->items, it)
721                {
722                   if (!it->prio.visible)
723                     {
724                        if (it->separator)
725                          elm_menu_item_separator_add(menu, NULL);
726                        else
727                          {
728                             Elm_Object_Item *menu_it;
729                             menu_it = elm_menu_item_add
730                               (menu, NULL, it->icon_str, it->label,
731                                   _elm_toolbar_item_menu_cb, it);
732                             elm_object_item_disabled_set
733                               (menu_it, elm_widget_item_disabled_get(it));
734                             if (it->o_menu)
735                               elm_menu_clone(it->o_menu, menu, menu_it);
736                          }
737                        evas_object_hide(VIEW(it));
738                     }
739                   else
740                     {
741                        evas_object_box_append(wd->bx, VIEW(it));
742                        evas_object_show(VIEW(it));
743                     }
744                }
745              evas_object_box_append(wd->bx, wd->VIEW(more_item));
746              evas_object_show(wd->VIEW(more_item));
747           }
748         else
749           {
750              /* All items are visible, show them all (except for the "More"
751               * button, of course). */
752              EINA_INLIST_FOREACH(wd->items, it)
753                {
754                   evas_object_show(VIEW(it));
755                   evas_object_box_append(wd->bx, VIEW(it));
756                }
757              evas_object_hide(wd->VIEW(more_item));
758           }
759      }
760    else if (wd->shrink_mode == ELM_TOOLBAR_SHRINK_HIDE)
761      {
762         Evas_Coord iw = 0, ih = 0;
763
764         if (wd->vertical)
765           {
766              evas_object_resize(wd->bx, w, vh);
767              _fix_items_visibility(wd, &ih, vh);
768           }
769         else
770           {
771              evas_object_resize(wd->bx, vw, h);
772              _fix_items_visibility(wd, &iw, vw);
773           }
774         evas_object_box_remove_all(wd->bx, EINA_FALSE);
775 <<<<<<< HEAD
776         if (((wd->vertical)  && (ih > vh)) || 
777 =======
778         if (((wd->vertical)  && (ih > vh)) ||
779 >>>>>>> remotes/origin/upstream
780             ((!wd->vertical) && (iw > vw)))
781           {
782              EINA_INLIST_FOREACH(wd->items, it)
783                {
784                   if (!it->prio.visible)
785                     evas_object_hide(VIEW(it));
786                   else
787                     {
788                        evas_object_box_append(wd->bx, VIEW(it));
789                        evas_object_show(VIEW(it));
790                     }
791                }
792           }
793         else
794           {
795              /* All items are visible, show them all */
796              EINA_INLIST_FOREACH(wd->items, it)
797                {
798                   evas_object_show(VIEW(it));
799                   evas_object_box_append(wd->bx, VIEW(it));
800                }
801           }
802      }
803    else if (wd->shrink_mode == ELM_TOOLBAR_SHRINK_EXPAND)
804      {
805         if ((vw >= mw) && (vh >= mh))
806           evas_object_resize(wd->bx, vw, vh);
807         else if (vw < mw)
808           evas_object_resize(wd->bx, mw, vh);
809         else if (vh < mh)
810           evas_object_resize(wd->bx, vw, mh);
811      }
812    else
813      {
814         if (wd->vertical)
815           {
816              if ((vh >= mh) && (h != vh)) evas_object_resize(wd->bx, w, vh);
817           }
818         else
819           {
820              if ((vw >= mw) && (w != vw)) evas_object_resize(wd->bx, vw, h);
821           }
822         EINA_INLIST_FOREACH(wd->items, it)
823           {
824              if (it->selected)
825                {
826                   _item_show(it);
827                   break;
828                }
829           }
830      }
831
832    _mirrored_set(obj, elm_widget_mirrored_get(obj));
833 }
834
835 static void
836 _resize_item(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
837 {
838    _sizing_eval(data);
839    _resize(data, NULL, NULL, NULL);
840 }
841
842 static void
843 _resize(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
844 {
845    Widget_Data *wd = elm_widget_data_get(data);
846    if (!wd->resize_job)
847      wd->resize_job = ecore_job_add(_resize_job, data);
848 }
849
850 static void
851 _select_filter(Elm_Toolbar_Item *it, Evas_Object *obj __UNUSED__, const char *emission, const char *source __UNUSED__)
852 {
853    int button;
854    char buf[sizeof("elm,action,click,") + 1];
855
856    button = atoi(emission + sizeof("mouse,clicked,") - 1);
857    if (button == 1) return; /* regular left click event */
858    snprintf(buf, sizeof(buf), "elm,action,click,%d", button);
859    edje_object_signal_emit(VIEW(it), buf, "elm");
860 }
861
862 static void
863 _select(void *data, Evas_Object *obj __UNUSED__, const char *emission __UNUSED__, const char *source __UNUSED__)
864 {
865    Elm_Toolbar_Item *it = data;
866
867    if ((_elm_config->access_mode == ELM_ACCESS_MODE_OFF) ||
868        (_elm_access_2nd_click_timeout(VIEW(it))))
869      {
870         if (_elm_config->access_mode != ELM_ACCESS_MODE_OFF)
871            _elm_access_say(E_("Selected"));
872         _item_select(it);
873      }
874 }
875
876 static Eina_Bool
877 _long_press(Elm_Toolbar_Item *it)
878 {
879    Widget_Data *wd = elm_widget_data_get(WIDGET(it));
880    wd->long_timer = NULL;
881    wd->long_press = EINA_TRUE;
882    evas_object_smart_callback_call(WIDGET(it), SIG_LONGPRESSED, it);
883    return ECORE_CALLBACK_CANCEL;
884 }
885
886 static void
887 _mouse_down(Elm_Toolbar_Item *it, Evas *evas __UNUSED__, Evas_Object *obj __UNUSED__, Evas_Event_Mouse_Down *ev)
888 {
889    Widget_Data *wd = elm_widget_data_get(WIDGET(it));
890    if (!wd) return;
891    if (ev->button != 1) return;
892    if (ev->flags & EVAS_BUTTON_DOUBLE_CLICK)
893      evas_object_smart_callback_call(WIDGET(it), SIG_CLICKED_DOUBLE, it);
894    wd->long_press = EINA_FALSE;
895    if (wd->long_timer) ecore_timer_interval_set(wd->long_timer, _elm_config->longpress_timeout);
896    else wd->long_timer = ecore_timer_add(_elm_config->longpress_timeout, (Ecore_Task_Cb)_long_press, it);
897 }
898
899 static void
900 _mouse_up(Elm_Toolbar_Item *it, Evas *evas __UNUSED__, Evas_Object *obj __UNUSED__, Evas_Event_Mouse_Up *ev)
901 {
902    Widget_Data *wd = elm_widget_data_get(WIDGET(it));
903    if (!wd) return;
904    if (ev->button != 1) return;
905    if (wd->long_timer)
906      {
907         ecore_timer_del(wd->long_timer);
908         wd->long_timer = NULL;
909      }
910 }
911
912 static void
913 _mouse_in(void *data, Evas_Object *obj __UNUSED__, const char *emission __UNUSED__, const char *source __UNUSED__)
914 {
915    Elm_Toolbar_Item *it = data;
916    edje_object_signal_emit(VIEW(it), "elm,state,highlighted", "elm");
917    elm_widget_signal_emit(it->icon, "elm,state,highlighted", "elm");
918 }
919
920 static void
921 _mouse_out(void *data, Evas_Object *obj __UNUSED__, const char *emission __UNUSED__, const char *source __UNUSED__)
922 {
923    Elm_Toolbar_Item *it = data;
924    edje_object_signal_emit(VIEW(it), "elm,state,unhighlighted", "elm");
925    elm_widget_signal_emit(it->icon, "elm,state,unhighlighted", "elm");
926 }
927
928 static void
929 _layout(Evas_Object *o, Evas_Object_Box_Data *priv, void *data)
930 {
931    Evas_Object *obj = (Evas_Object *) data;
932    Widget_Data *wd = elm_widget_data_get(obj);
933    if (!wd) return;
934 <<<<<<< HEAD
935    _els_box_layout(o, priv, !wd->vertical, wd->homogeneous, 
936 =======
937    _els_box_layout(o, priv, !wd->vertical, wd->homogeneous,
938 >>>>>>> remotes/origin/upstream
939                    elm_widget_mirrored_get(obj));
940 }
941
942 static char *
943 _access_info_cb(void *data __UNUSED__, Evas_Object *obj __UNUSED__, Elm_Widget_Item *item)
944 {
945    Elm_Toolbar_Item *it = (Elm_Toolbar_Item *)item;
946    const char *txt = item->access_info;
947    if (!txt) txt = it->label;
948    if (txt) return strdup(txt);
949    return NULL;
950 }
951
952 static char *
953 _access_state_cb(void *data __UNUSED__, Evas_Object *obj __UNUSED__, Elm_Widget_Item *item __UNUSED__)
954 {
955    Elm_Toolbar_Item *it = (Elm_Toolbar_Item *)item;
956    if (it->separator)
957       return strdup(E_("Separator"));
958    else if (elm_widget_item_disabled_get(it))
959       return strdup(E_("State: Disabled"));
960    else if (it->selected)
961       return strdup(E_("State: Selected"));
962    else if (it->menu)
963       return strdup(E_("Has menu"));
964    return NULL;
965 }
966
967 static Eina_Bool
968 _item_del_pre_hook(Elm_Object_Item *it)
969 {
970 <<<<<<< HEAD
971    ELM_OBJ_ITEM_CHECK_OR_RETURN(it, EINA_FALSE);
972
973    Widget_Data *wd;
974    Evas_Object *obj2;
975    Elm_Toolbar_Item *item, *next;
976    item = (Elm_Toolbar_Item *) it;
977 =======
978    Widget_Data *wd;
979    Evas_Object *obj2;
980    Elm_Toolbar_Item *item, *next;
981    item = (Elm_Toolbar_Item *)it;
982 >>>>>>> remotes/origin/upstream
983
984    wd = elm_widget_data_get(WIDGET(item));
985    if (!wd) return EINA_FALSE;
986
987    obj2 = WIDGET(item);
988    next = ELM_TOOLBAR_ITEM_FROM_INLIST(EINA_INLIST_GET(item)->next);
989    wd->items = eina_inlist_remove(wd->items, EINA_INLIST_GET(item));
990    wd->item_count--;
991    if (!next) next = ELM_TOOLBAR_ITEM_FROM_INLIST(wd->items);
992 <<<<<<< HEAD
993    if (wd->always_select && item->selected && next) _item_select(next);
994 =======
995    if ((wd->select_mode == ELM_OBJECT_SELECT_MODE_ALWAYS) &&
996        item->selected && next) _item_select(next);
997 >>>>>>> remotes/origin/upstream
998    _item_del(item);
999    _theme_hook(obj2);
1000
1001    return EINA_TRUE;
1002 }
1003
1004 static Elm_Toolbar_Item *
1005 _item_new(Evas_Object *obj, const char *icon, const char *label, Evas_Smart_Cb func, const void *data)
1006 {
1007    Widget_Data *wd = elm_widget_data_get(obj);
1008    Evas_Object *icon_obj;
1009    Evas_Coord mw, mh;
1010    Elm_Toolbar_Item *it;
1011
1012    icon_obj = elm_icon_add(obj);
1013    elm_icon_order_lookup_set(icon_obj, wd->lookup_order);
1014    if (!icon_obj) return NULL;
1015    it = elm_widget_item_new(obj, Elm_Toolbar_Item);
1016    if (!it)
1017      {
1018         evas_object_del(icon_obj);
1019         return NULL;
1020      }
1021
1022    elm_widget_item_del_pre_hook_set(it, _item_del_pre_hook);
1023    elm_widget_item_disable_hook_set(it, _item_disable_hook);
1024    elm_widget_item_text_set_hook_set(it, _item_text_set_hook);
1025    elm_widget_item_text_get_hook_set(it, _item_text_get_hook);
1026    elm_widget_item_content_set_hook_set(it, _item_content_set_hook);
1027    elm_widget_item_content_get_hook_set(it, _item_content_get_hook);
1028    elm_widget_item_content_unset_hook_set(it, _item_content_unset_hook);
1029
1030    it->label = eina_stringshare_add(label);
1031    it->prio.visible = 1;
1032    it->prio.priority = 0;
1033    it->func = func;
1034    it->separator = EINA_FALSE;
1035    it->object = NULL;
1036    it->base.data = data;
1037    VIEW(it) = edje_object_add(evas_object_evas_get(obj));
1038    _elm_access_item_register(&it->base, VIEW(it));
1039    _elm_access_text_set(_elm_access_item_get(&it->base),
1040                         ELM_ACCESS_TYPE, E_("Tool Item"));
1041    _elm_access_callback_set(_elm_access_item_get(&it->base),
1042                             ELM_ACCESS_INFO, _access_info_cb, it);
1043    _elm_access_callback_set(_elm_access_item_get(&it->base),
1044                             ELM_ACCESS_STATE, _access_state_cb, it);
1045
1046    if (_item_icon_set(icon_obj, "toolbar/", icon))
1047      {
1048         it->icon = icon_obj;
1049         it->icon_str = eina_stringshare_add(icon);
1050      }
1051    else
1052      {
1053         it->icon = NULL;
1054         it->icon_str = NULL;
1055         evas_object_del(icon_obj);
1056      }
1057
1058    _elm_theme_object_set(obj, VIEW(it), "toolbar", "item",
1059                          elm_widget_style_get(obj));
1060    edje_object_signal_callback_add(VIEW(it), "elm,action,click", "elm",
1061                                    _select, it);
1062    edje_object_signal_callback_add(VIEW(it), "mouse,clicked,*", "*",
1063                                    (Edje_Signal_Cb)_select_filter, it);
1064    edje_object_signal_callback_add(VIEW(it), "elm,mouse,in", "elm",
1065                                    _mouse_in, it);
1066    edje_object_signal_callback_add(VIEW(it), "elm,mouse,out", "elm",
1067                                    _mouse_out, it);
1068    evas_object_event_callback_add(VIEW(it), EVAS_CALLBACK_MOUSE_DOWN,
1069                                   (Evas_Object_Event_Cb)_mouse_down, it);
1070    evas_object_event_callback_add(VIEW(it), EVAS_CALLBACK_MOUSE_UP,
1071                                   (Evas_Object_Event_Cb)_mouse_up, it);
1072    elm_widget_sub_object_add(obj, VIEW(it));
1073    if (it->icon)
1074      {
1075         int ms = 0;
1076
1077         ms = ((double)wd->icon_size * _elm_config->scale);
1078         evas_object_size_hint_min_set(it->icon, ms, ms);
1079         evas_object_size_hint_max_set(it->icon, ms, ms);
1080         edje_object_part_swallow(VIEW(it), "elm.swallow.icon", it->icon);
1081         evas_object_show(it->icon);
1082         elm_widget_sub_object_add(obj, it->icon);
1083      }
1084    edje_object_part_text_set(VIEW(it), "elm.text", it->label);
1085    mw = mh = -1;
1086    elm_coords_finger_size_adjust(1, &mw, 1, &mh);
1087    edje_object_size_min_restricted_calc(VIEW(it), &mw, &mh, mw, mh);
1088    elm_coords_finger_size_adjust(1, &mw, 1, &mh);
1089    if (wd->shrink_mode != ELM_TOOLBAR_SHRINK_EXPAND)
1090      {
1091         if (wd->vertical)
1092           {
1093              evas_object_size_hint_weight_set(VIEW(it), EVAS_HINT_EXPAND, -1.0);
1094              evas_object_size_hint_align_set(VIEW(it), EVAS_HINT_FILL, 0.5);
1095           }
1096         else
1097           {
1098              evas_object_size_hint_weight_set(VIEW(it), -1.0, EVAS_HINT_EXPAND);
1099              evas_object_size_hint_align_set(VIEW(it), 0.5, EVAS_HINT_FILL);
1100           }
1101      }
1102    else
1103      {
1104         evas_object_size_hint_weight_set(VIEW(it), EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
1105         evas_object_size_hint_align_set(VIEW(it), EVAS_HINT_FILL, EVAS_HINT_FILL);
1106      }
1107    evas_object_size_hint_min_set(VIEW(it), mw, mh);
1108    evas_object_size_hint_max_set(VIEW(it), -1, -1);
1109    evas_object_event_callback_add(VIEW(it), EVAS_CALLBACK_RESIZE,
1110                                   _resize_item, obj);
1111 <<<<<<< HEAD
1112    if ((!wd->items) && wd->always_select) _item_select(it);
1113 =======
1114    if ((!wd->items) && (wd->select_mode == ELM_OBJECT_SELECT_MODE_ALWAYS))
1115      _item_select(it);
1116 >>>>>>> remotes/origin/upstream
1117    wd->item_count++;
1118    return it;
1119 }
1120
1121 static void
1122 _elm_toolbar_item_label_update(Elm_Toolbar_Item *item)
1123 {
1124    Evas_Coord mw = -1, mh = -1;
1125    Widget_Data *wd = elm_widget_data_get(WIDGET(item));
1126    edje_object_part_text_set(VIEW(item), "elm.text", item->label);
1127
1128    elm_coords_finger_size_adjust(1, &mw, 1, &mh);
1129    edje_object_size_min_restricted_calc(VIEW(item), &mw, &mh, mw, mh);
1130    elm_coords_finger_size_adjust(1, &mw, 1, &mh);
1131    if (wd->shrink_mode != ELM_TOOLBAR_SHRINK_EXPAND)
1132      {
1133         if (wd->vertical)
1134           {
1135              evas_object_size_hint_weight_set(VIEW(item), EVAS_HINT_EXPAND, -1.0);
1136              evas_object_size_hint_align_set(VIEW(item), EVAS_HINT_FILL, 0.5);
1137           }
1138         else
1139           {
1140              evas_object_size_hint_weight_set(VIEW(item), -1.0, EVAS_HINT_EXPAND);
1141              evas_object_size_hint_align_set(VIEW(item), 0.5, EVAS_HINT_FILL);
1142           }
1143      }
1144    else
1145      {
1146         evas_object_size_hint_weight_set(VIEW(item), EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
1147         evas_object_size_hint_align_set(VIEW(item), EVAS_HINT_FILL, EVAS_HINT_FILL);
1148      }
1149    evas_object_size_hint_min_set(VIEW(item), mw, mh);
1150 }
1151
1152 static void
1153 _elm_toolbar_item_label_set_cb (void *data, Evas_Object *obj, const char *emission, const char *source)
1154 {
1155    Elm_Toolbar_Item *item = data;
1156    _elm_toolbar_item_label_update(item);
1157    edje_object_signal_callback_del(obj, emission, source,
1158                                    _elm_toolbar_item_label_set_cb);
1159    edje_object_signal_emit (VIEW(item), "elm,state,label,reset", "elm");
1160 }
1161
1162 static void
1163 <<<<<<< HEAD
1164 _item_label_set(Elm_Toolbar_Item *item, const char *label, const char *signal)
1165 =======
1166 _item_label_set(Elm_Toolbar_Item *item, const char *label, const char *sig)
1167 >>>>>>> remotes/origin/upstream
1168 {
1169    const char *s;
1170
1171    if ((label) && (item->label) && (!strcmp(label, item->label))) return;
1172
1173    eina_stringshare_replace(&item->label, label);
1174    s = edje_object_data_get(VIEW(item), "transition_animation_on");
1175    if ((s) && (atoi(s)))
1176      {
1177         edje_object_part_text_set(VIEW(item), "elm.text_new", item->label);
1178 <<<<<<< HEAD
1179         edje_object_signal_emit (VIEW(item), signal, "elm");
1180 =======
1181         edje_object_signal_emit (VIEW(item), sig, "elm");
1182 >>>>>>> remotes/origin/upstream
1183         edje_object_signal_callback_add(VIEW(item),
1184                                         "elm,state,label_set,done", "elm",
1185                                         _elm_toolbar_item_label_set_cb, item);
1186      }
1187    else
1188      _elm_toolbar_item_label_update(item);
1189    _resize(WIDGET(item), NULL, NULL, NULL);
1190 }
1191
1192 static void
1193 _elm_toolbar_item_icon_update(Elm_Toolbar_Item *item)
1194 {
1195    Elm_Toolbar_Item_State *it_state;
1196    Eina_List *l;
1197    Evas_Coord mw = -1, mh = -1;
1198    Widget_Data *wd = elm_widget_data_get(WIDGET(item));
1199    Evas_Object *old_icon = edje_object_part_swallow_get(VIEW(item),
1200                                                         "elm.swallow.icon");
1201    elm_widget_sub_object_del(VIEW(item), old_icon);
1202    evas_object_hide(old_icon);
1203    edje_object_part_swallow(VIEW(item), "elm.swallow.icon", item->icon);
1204    elm_coords_finger_size_adjust(1, &mw, 1, &mh);
1205    edje_object_size_min_restricted_calc(VIEW(item), &mw, &mh, mw, mh);
1206    elm_coords_finger_size_adjust(1, &mw, 1, &mh);
1207    if (wd->shrink_mode != ELM_TOOLBAR_SHRINK_EXPAND)
1208      {
1209         if (wd->vertical)
1210           {
1211              evas_object_size_hint_weight_set(VIEW(item), EVAS_HINT_EXPAND, -1.0);
1212              evas_object_size_hint_align_set(VIEW(item), EVAS_HINT_FILL, 0.5);
1213           }
1214         else
1215           {
1216              evas_object_size_hint_weight_set(VIEW(item), -1.0, EVAS_HINT_EXPAND);
1217              evas_object_size_hint_align_set(VIEW(item), 0.5, EVAS_HINT_FILL);
1218           }
1219      }
1220    else
1221      {
1222         evas_object_size_hint_weight_set(VIEW(item), EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
1223         evas_object_size_hint_align_set(VIEW(item), EVAS_HINT_FILL, EVAS_HINT_FILL);
1224      }
1225    evas_object_size_hint_min_set(VIEW(item), mw, mh);
1226
1227    EINA_LIST_FOREACH(item->states, l, it_state)
1228      {
1229         if (it_state->icon == old_icon) return;
1230      }
1231    evas_object_del(old_icon);
1232 }
1233
1234 static void
1235 _elm_toolbar_item_icon_set_cb (void *data, Evas_Object *obj, const char *emission, const char *source)
1236 {
1237    Elm_Toolbar_Item *item = data;
1238    edje_object_part_unswallow(VIEW(item), item->icon);
1239    _elm_toolbar_item_icon_update(item);
1240    edje_object_signal_callback_del(obj, emission, source,
1241                                    _elm_toolbar_item_icon_set_cb);
1242    edje_object_signal_emit (VIEW(item), "elm,state,icon,reset", "elm");
1243 }
1244
1245 static void
1246 <<<<<<< HEAD
1247 _elm_toolbar_item_icon_obj_set(Evas_Object *obj, Elm_Toolbar_Item *item, Evas_Object *icon_obj, const char *icon_str, double icon_size, const char *signal)
1248 =======
1249 _elm_toolbar_item_icon_obj_set(Evas_Object *obj, Elm_Toolbar_Item *item, Evas_Object *icon_obj, const char *icon_str, double icon_size, const char *sig)
1250 >>>>>>> remotes/origin/upstream
1251 {
1252    Evas_Object *old_icon;
1253    int ms = 0;
1254    const char *s;
1255
1256    if (icon_str)
1257      eina_stringshare_replace(&item->icon_str, icon_str);
1258    else
1259      {
1260         eina_stringshare_del(item->icon_str);
1261         item->icon_str = NULL;
1262      }
1263    item->icon = icon_obj;
1264    if (icon_obj)
1265      {
1266         ms = (icon_size * _elm_config->scale);
1267         evas_object_size_hint_min_set(item->icon, ms, ms);
1268         evas_object_size_hint_max_set(item->icon, ms, ms);
1269         evas_object_show(item->icon);
1270         elm_widget_sub_object_add(obj, item->icon);
1271      }
1272    s = edje_object_data_get(VIEW(item), "transition_animation_on");
1273    if ((s) && (atoi(s)))
1274      {
1275         old_icon = edje_object_part_swallow_get(VIEW(item),
1276                                                 "elm.swallow.icon_new");
1277         if (old_icon)
1278           {
1279              elm_widget_sub_object_del(VIEW(item), old_icon);
1280              evas_object_hide(old_icon);
1281           }
1282         edje_object_part_swallow(VIEW(item), "elm.swallow.icon_new",
1283                                  item->icon);
1284 <<<<<<< HEAD
1285         edje_object_signal_emit (VIEW(item), signal, "elm");
1286 =======
1287         edje_object_signal_emit (VIEW(item), sig, "elm");
1288 >>>>>>> remotes/origin/upstream
1289         edje_object_signal_callback_add(VIEW(item),
1290                                         "elm,state,icon_set,done", "elm",
1291                                         _elm_toolbar_item_icon_set_cb, item);
1292      }
1293    else
1294      _elm_toolbar_item_icon_update(item);
1295    _resize(obj, NULL, NULL, NULL);
1296 }
1297
1298 static void
1299 _elm_toolbar_item_state_cb(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info)
1300 {
1301    Elm_Toolbar_Item *it = event_info;
1302    Elm_Toolbar_Item_State *it_state;
1303
1304    it_state = eina_list_data_get(it->current_state);
1305    if (it_state->func)
1306      it_state->func((void *)it_state->data, obj, event_info);
1307 }
1308
1309 static Elm_Toolbar_Item_State *
1310 _item_state_new(const char *label, const char *icon_str, Evas_Object *icon, Evas_Smart_Cb func, const void *data)
1311 {
1312    Elm_Toolbar_Item_State *it_state;
1313    it_state = ELM_NEW(Elm_Toolbar_Item_State);
1314    it_state->label = eina_stringshare_add(label);
1315    it_state->icon_str = eina_stringshare_add(icon_str);
1316    it_state->icon = icon;
1317    it_state->func = func;
1318    it_state->data = data;
1319    return it_state;
1320 }
1321
1322 EAPI Evas_Object *
1323 elm_toolbar_add(Evas_Object *parent)
1324 {
1325    Evas_Object *obj;
1326    Evas *e;
1327    Widget_Data *wd;
1328
1329    ELM_WIDGET_STANDARD_SETUP(wd, Widget_Data, parent, e, obj, NULL);
1330
1331    ELM_SET_WIDTYPE(widtype, "toolbar");
1332    elm_widget_type_set(obj, "toolbar");
1333    elm_widget_sub_object_add(parent, obj);
1334    elm_widget_data_set(obj, wd);
1335    elm_widget_del_pre_hook_set(obj, _del_pre_hook);
1336    elm_widget_del_hook_set(obj, _del_hook);
1337    elm_widget_theme_hook_set(obj, _theme_hook);
1338    elm_widget_translate_hook_set(obj, _translate_hook);
1339    elm_widget_can_focus_set(obj, EINA_FALSE);
1340
1341    wd->more_item = NULL;
1342    wd->selected_item = NULL;
1343    wd->scr = elm_smart_scroller_add(e);
1344    elm_smart_scroller_widget_set(wd->scr, obj);
1345    elm_smart_scroller_object_theme_set(obj, wd->scr, "toolbar", "base", "default");
1346    elm_smart_scroller_bounce_allow_set(wd->scr,
1347                                        _elm_config->thumbscroll_bounce_enable,
1348                                        EINA_FALSE);
1349    elm_widget_resize_object_set(obj, wd->scr);
1350    elm_smart_scroller_policy_set(wd->scr,
1351                                  ELM_SMART_SCROLLER_POLICY_AUTO,
1352                                  ELM_SMART_SCROLLER_POLICY_OFF);
1353
1354
1355    wd->icon_size = _elm_toolbar_icon_size_get(wd);
1356
1357
1358    wd->homogeneous = EINA_TRUE;
1359    wd->align = 0.5;
1360
1361    wd->bx = evas_object_box_add(e);
1362    evas_object_size_hint_align_set(wd->bx, wd->align, 0.5);
1363    evas_object_box_layout_set(wd->bx, _layout, obj, NULL);
1364    elm_widget_sub_object_add(obj, wd->bx);
1365    elm_smart_scroller_child_set(wd->scr, wd->bx);
1366    evas_object_show(wd->bx);
1367
1368    elm_toolbar_shrink_mode_set(obj, _elm_config->toolbar_shrink_mode);
1369    evas_object_event_callback_add(wd->scr, EVAS_CALLBACK_RESIZE, _resize, obj);
1370    evas_object_event_callback_add(wd->bx, EVAS_CALLBACK_RESIZE, _resize, obj);
1371    elm_toolbar_icon_order_lookup_set(obj, ELM_ICON_LOOKUP_THEME_FDO);
1372
1373    evas_object_smart_callbacks_descriptions_set(obj, _signals);
1374
1375    _sizing_eval(obj);
1376    return obj;
1377 }
1378
1379 EAPI void
1380 elm_toolbar_icon_size_set(Evas_Object *obj, int icon_size)
1381 {
1382    ELM_CHECK_WIDTYPE(obj, widtype);
1383    Widget_Data *wd = elm_widget_data_get(obj);
1384    if (!wd) return;
1385    if (wd->icon_size == icon_size) return;
1386    wd->icon_size = icon_size;
1387    _theme_hook(obj);
1388 }
1389
1390 EAPI int
1391 elm_toolbar_icon_size_get(const Evas_Object *obj)
1392 {
1393    ELM_CHECK_WIDTYPE(obj, widtype) 0;
1394    Widget_Data *wd = elm_widget_data_get(obj);
1395    if (!wd) return 0;
1396    return wd->icon_size;
1397 }
1398
1399 EAPI Elm_Object_Item *
1400 elm_toolbar_item_append(Evas_Object *obj, const char *icon, const char *label, Evas_Smart_Cb func, const void *data)
1401 {
1402    ELM_CHECK_WIDTYPE(obj, widtype) NULL;
1403    Widget_Data *wd = elm_widget_data_get(obj);
1404    if (!wd) return NULL;
1405
1406    Elm_Toolbar_Item *it = _item_new(obj, icon, label, func, data);
1407    if (!it) return NULL;
1408    double scale = (elm_widget_scale_get(obj) * _elm_config->scale);
1409
1410    wd->items = eina_inlist_append(wd->items, EINA_INLIST_GET(it));
1411    evas_object_box_append(wd->bx, VIEW(it));
1412    evas_object_show(VIEW(it));
1413
1414    _theme_hook_item(obj, it, scale, wd->icon_size);
1415    _sizing_eval(obj);
1416
1417 <<<<<<< HEAD
1418    return (Elm_Object_Item *) it;
1419 =======
1420    return (Elm_Object_Item *)it;
1421 >>>>>>> remotes/origin/upstream
1422 }
1423
1424 EAPI Elm_Object_Item *
1425 elm_toolbar_item_prepend(Evas_Object *obj, const char *icon, const char *label, Evas_Smart_Cb func, const void *data)
1426 {
1427    ELM_CHECK_WIDTYPE(obj, widtype) NULL;
1428    Widget_Data *wd = elm_widget_data_get(obj);
1429    if (!wd) return NULL;
1430
1431    Elm_Toolbar_Item *it = _item_new(obj, icon, label, func, data);
1432    if (!it) return NULL;
1433    double scale = (elm_widget_scale_get(obj) * _elm_config->scale);
1434
1435    wd->items = eina_inlist_prepend(wd->items, EINA_INLIST_GET(it));
1436    evas_object_box_prepend(wd->bx, VIEW(it));
1437    evas_object_show(VIEW(it));
1438    _theme_hook_item(obj, it, scale, wd->icon_size);
1439    _sizing_eval(obj);
1440
1441 <<<<<<< HEAD
1442    return (Elm_Object_Item *) it;
1443 =======
1444    return (Elm_Object_Item *)it;
1445 >>>>>>> remotes/origin/upstream
1446 }
1447
1448 EAPI Elm_Object_Item *
1449 elm_toolbar_item_insert_before(Evas_Object *obj, Elm_Object_Item *before, const char *icon, const char *label, Evas_Smart_Cb func, const void *data)
1450 {
1451    ELM_CHECK_WIDTYPE(obj, widtype) NULL;
1452    ELM_OBJ_ITEM_CHECK_OR_RETURN(before, NULL);
1453    Widget_Data *wd;
1454    Elm_Toolbar_Item *it, *_before;
1455
1456    wd = elm_widget_data_get(obj);
1457    if (!wd) return NULL;
1458    _before = (Elm_Toolbar_Item *) before;
1459    it = _item_new(obj, icon, label, func, data);
1460    if (!it) return NULL;
1461    double scale = (elm_widget_scale_get(obj) * _elm_config->scale);
1462
1463    wd->items = eina_inlist_prepend_relative(wd->items, EINA_INLIST_GET(it),
1464                                             EINA_INLIST_GET(_before));
1465    evas_object_box_insert_before(wd->bx, VIEW(it), VIEW(_before));
1466    evas_object_show(VIEW(it));
1467    _theme_hook_item(obj, it, scale, wd->icon_size);
1468    _sizing_eval(obj);
1469
1470 <<<<<<< HEAD
1471    return (Elm_Object_Item *) it;
1472 =======
1473    return (Elm_Object_Item *)it;
1474 >>>>>>> remotes/origin/upstream
1475 }
1476
1477 EAPI Elm_Object_Item *
1478 elm_toolbar_item_insert_after(Evas_Object *obj, Elm_Object_Item *after, const char *icon, const char *label, Evas_Smart_Cb func, const void *data)
1479 {
1480    ELM_CHECK_WIDTYPE(obj, widtype) NULL;
1481    ELM_OBJ_ITEM_CHECK_OR_RETURN(after, NULL);
1482    Widget_Data *wd;
1483    Elm_Toolbar_Item *it, *_after;
1484
1485    wd = elm_widget_data_get(obj);
1486    if (!wd) return NULL;
1487    _after = (Elm_Toolbar_Item *) after;
1488    it = _item_new(obj, icon, label, func, data);
1489    if (!it) return NULL;
1490    double scale = (elm_widget_scale_get(obj) * _elm_config->scale);
1491
1492    wd->items = eina_inlist_append_relative(wd->items, EINA_INLIST_GET(it),
1493                                            EINA_INLIST_GET(_after));
1494    evas_object_box_insert_after(wd->bx, VIEW(it), VIEW(_after));
1495    evas_object_show(VIEW(it));
1496    _theme_hook_item(obj, it, scale, wd->icon_size);
1497    _sizing_eval(obj);
1498
1499 <<<<<<< HEAD
1500    return (Elm_Object_Item *) it;
1501 =======
1502    return (Elm_Object_Item *)it;
1503 >>>>>>> remotes/origin/upstream
1504 }
1505
1506 EAPI Elm_Object_Item *
1507 elm_toolbar_first_item_get(const Evas_Object *obj)
1508 {
1509    ELM_CHECK_WIDTYPE(obj, widtype) NULL;
1510    Widget_Data *wd = elm_widget_data_get(obj);
1511    if (!wd || !wd->items) return NULL;
1512    return (Elm_Object_Item *) ELM_TOOLBAR_ITEM_FROM_INLIST(wd->items);
1513 }
1514
1515 EAPI Elm_Object_Item *
1516 elm_toolbar_last_item_get(const Evas_Object *obj)
1517 {
1518    ELM_CHECK_WIDTYPE(obj, widtype) NULL;
1519    Widget_Data *wd = elm_widget_data_get(obj);
1520    if (!wd || !wd->items) return NULL;
1521    return (Elm_Object_Item *) ELM_TOOLBAR_ITEM_FROM_INLIST(wd->items->last);
1522 }
1523
1524 EAPI Elm_Object_Item *
1525 elm_toolbar_item_next_get(const Elm_Object_Item *it)
1526 {
1527    ELM_OBJ_ITEM_CHECK_OR_RETURN(it, NULL);
1528    return (Elm_Object_Item *) ELM_TOOLBAR_ITEM_FROM_INLIST(
1529 <<<<<<< HEAD
1530       EINA_INLIST_GET(((Elm_Toolbar_Item *) it))->next);
1531 =======
1532       EINA_INLIST_GET(((Elm_Toolbar_Item *)it))->next);
1533 >>>>>>> remotes/origin/upstream
1534 }
1535
1536 EAPI Elm_Object_Item *
1537 elm_toolbar_item_prev_get(const Elm_Object_Item *it)
1538 {
1539    ELM_OBJ_ITEM_CHECK_OR_RETURN(it, NULL);
1540    return (Elm_Object_Item *) ELM_TOOLBAR_ITEM_FROM_INLIST(
1541 <<<<<<< HEAD
1542       EINA_INLIST_GET(((Elm_Toolbar_Item *) it))->prev);
1543 =======
1544       EINA_INLIST_GET(((Elm_Toolbar_Item *)it))->prev);
1545 >>>>>>> remotes/origin/upstream
1546 }
1547
1548 EAPI Evas_Object *
1549 elm_toolbar_item_toolbar_get(const Elm_Object_Item *it)
1550 {
1551    ELM_OBJ_ITEM_CHECK_OR_RETURN(it, NULL);
1552    return elm_object_item_widget_get(it);
1553 }
1554
1555 EAPI void
1556 elm_toolbar_item_priority_set(Elm_Object_Item *it, int priority)
1557 {
1558    ELM_OBJ_ITEM_CHECK_OR_RETURN(it);
1559 <<<<<<< HEAD
1560    Elm_Toolbar_Item *item = (Elm_Toolbar_Item *) it;
1561 =======
1562    Elm_Toolbar_Item *item = (Elm_Toolbar_Item *)it;
1563 >>>>>>> remotes/origin/upstream
1564    if (item->prio.priority == priority) return;
1565    item->prio.priority = priority;
1566    _resize(WIDGET(item), NULL, NULL, NULL);
1567 }
1568
1569 EAPI int
1570 elm_toolbar_item_priority_get(const Elm_Object_Item *it)
1571 {
1572    ELM_OBJ_ITEM_CHECK_OR_RETURN(it, 0);
1573 <<<<<<< HEAD
1574    return ((Elm_Toolbar_Item *) it)->prio.priority;
1575 =======
1576    return ((Elm_Toolbar_Item *)it)->prio.priority;
1577 >>>>>>> remotes/origin/upstream
1578 }
1579
1580 EAPI const char *
1581 elm_toolbar_item_label_get(const Elm_Object_Item *it)
1582 {
1583    return _item_text_get_hook(it, NULL);
1584 }
1585
1586 EAPI void
1587 elm_toolbar_item_label_set(Elm_Object_Item *it, const char *label)
1588 {
1589    _item_text_set_hook(it, NULL, label);
1590 }
1591
1592 EAPI void *
1593 elm_toolbar_item_data_get(const Elm_Object_Item *it)
1594 {
1595    return elm_object_item_data_get(it);
1596 }
1597
1598 EAPI void
1599 elm_toolbar_item_data_set(Elm_Object_Item *it, const void *data)
1600 {
1601    elm_object_item_data_set(it, (void *) data);
1602 }
1603
1604 EAPI Elm_Object_Item *
1605 elm_toolbar_item_find_by_label(const Evas_Object *obj, const char *label)
1606 {
1607    ELM_CHECK_WIDTYPE(obj, widtype) NULL;
1608    Elm_Toolbar_Item *it;
1609    Widget_Data *wd = elm_widget_data_get(obj);
1610    if (!wd) return NULL;
1611
1612    EINA_INLIST_FOREACH(wd->items, it)
1613      {
1614         if (!strcmp(it->label, label))
1615 <<<<<<< HEAD
1616           return (Elm_Object_Item *) it;
1617 =======
1618           return (Elm_Object_Item *)it;
1619 >>>>>>> remotes/origin/upstream
1620      }
1621    return NULL;
1622 }
1623
1624 EAPI void
1625 elm_toolbar_item_selected_set(Elm_Object_Item *it, Eina_Bool selected)
1626 {
1627    ELM_OBJ_ITEM_CHECK_OR_RETURN(it);
1628 <<<<<<< HEAD
1629    Elm_Toolbar_Item *item = (Elm_Toolbar_Item *) it;
1630 =======
1631    Elm_Toolbar_Item *item = (Elm_Toolbar_Item *)it;
1632 >>>>>>> remotes/origin/upstream
1633    Widget_Data *wd = elm_widget_data_get(WIDGET(item));
1634    if (!wd) return;
1635
1636    if (item->selected == selected) return;
1637    if (selected) _item_select(item);
1638    else _item_unselect(item);
1639 }
1640
1641 EAPI Eina_Bool
1642 elm_toolbar_item_selected_get(const Elm_Object_Item *it)
1643 {
1644    ELM_OBJ_ITEM_CHECK_OR_RETURN(it, EINA_FALSE);
1645 <<<<<<< HEAD
1646    return ((Elm_Toolbar_Item *) it)->selected;
1647 =======
1648    return ((Elm_Toolbar_Item *)it)->selected;
1649 >>>>>>> remotes/origin/upstream
1650 }
1651
1652 EAPI Elm_Object_Item *
1653 elm_toolbar_selected_item_get(const Evas_Object *obj)
1654 {
1655    ELM_CHECK_WIDTYPE(obj, widtype) NULL;
1656    Widget_Data *wd = elm_widget_data_get(obj);
1657    if (!wd) return NULL;
1658    return (Elm_Object_Item *) wd->selected_item;
1659 }
1660
1661 EAPI void
1662 elm_toolbar_item_icon_set(Elm_Object_Item *it, const char *icon)
1663 {
1664    ELM_OBJ_ITEM_CHECK_OR_RETURN(it);
1665
1666    Evas_Object *icon_obj;
1667    Widget_Data *wd;
1668    Evas_Object *obj;
1669 <<<<<<< HEAD
1670    Elm_Toolbar_Item * item = (Elm_Toolbar_Item *) it;
1671 =======
1672    Elm_Toolbar_Item * item = (Elm_Toolbar_Item *)it;
1673 >>>>>>> remotes/origin/upstream
1674
1675    obj = WIDGET(item);
1676    wd = elm_widget_data_get(obj);
1677    if (!wd) return;
1678    if ((icon) && (item->icon_str) && (!strcmp(icon, item->icon_str))) return;
1679
1680    icon_obj = elm_icon_add(obj);
1681    if (!icon_obj) return;
1682    if (_item_icon_set(icon_obj, "toolbar/", icon))
1683      _elm_toolbar_item_icon_obj_set(obj, item, icon_obj, icon, wd->icon_size,
1684                                     "elm,state,icon_set");
1685    else
1686      {
1687         _elm_toolbar_item_icon_obj_set(obj, item, NULL, NULL, 0,
1688                                        "elm,state,icon_set");
1689         evas_object_del(icon_obj);
1690      }
1691 }
1692
1693 EAPI const char *
1694 elm_toolbar_item_icon_get(const Elm_Object_Item *it)
1695 {
1696    ELM_OBJ_ITEM_CHECK_OR_RETURN(it, NULL);
1697 <<<<<<< HEAD
1698    return ((Elm_Toolbar_Item *) it)->icon_str;
1699 =======
1700    return ((Elm_Toolbar_Item *)it)->icon_str;
1701 >>>>>>> remotes/origin/upstream
1702 }
1703
1704 EAPI Evas_Object *
1705 elm_toolbar_item_object_get(const Elm_Object_Item *it)
1706 {
1707    ELM_OBJ_ITEM_CHECK_OR_RETURN(it, NULL);
1708
1709    Widget_Data *wd;
1710    Evas_Object *obj;
1711 <<<<<<< HEAD
1712    Elm_Toolbar_Item *item = (Elm_Toolbar_Item *) it;
1713 =======
1714    Elm_Toolbar_Item *item = (Elm_Toolbar_Item *)it;
1715 >>>>>>> remotes/origin/upstream
1716
1717    obj = WIDGET(item);
1718    wd = elm_widget_data_get(obj);
1719    if (!wd) return NULL;
1720
1721    return VIEW(item);
1722 }
1723
1724 EAPI Evas_Object *
1725 elm_toolbar_item_icon_object_get(Elm_Object_Item *it)
1726 {
1727    ELM_OBJ_ITEM_CHECK_OR_RETURN(it, NULL);
1728 <<<<<<< HEAD
1729    return ((Elm_Toolbar_Item *) it)->icon;
1730 =======
1731    return ((Elm_Toolbar_Item *)it)->icon;
1732 >>>>>>> remotes/origin/upstream
1733 }
1734
1735 EAPI Eina_Bool
1736 elm_toolbar_item_icon_memfile_set(Elm_Object_Item *it, const void *img, size_t size, const char *format, const char *key)
1737 {
1738    ELM_OBJ_ITEM_CHECK_OR_RETURN(it, EINA_FALSE);
1739
1740    Evas_Object *icon_obj;
1741    Widget_Data *wd;
1742    Evas_Object *obj;
1743    Eina_Bool ret;
1744 <<<<<<< HEAD
1745    Elm_Toolbar_Item *item = (Elm_Toolbar_Item *) it;
1746 =======
1747    Elm_Toolbar_Item *item = (Elm_Toolbar_Item *)it;
1748 >>>>>>> remotes/origin/upstream
1749
1750    obj = WIDGET(item);
1751    wd = elm_widget_data_get(obj);
1752    if (!wd) return EINA_FALSE;
1753
1754    if (img && size)
1755      {
1756         icon_obj = _els_smart_icon_add(evas_object_evas_get(obj));
1757         evas_object_repeat_events_set(icon_obj, EINA_TRUE);
1758         ret = _els_smart_icon_memfile_set(icon_obj, img, size, format, key);
1759         if (!ret)
1760           {
1761              evas_object_del(icon_obj);
1762              return EINA_FALSE;
1763           }
1764         _elm_toolbar_item_icon_obj_set(obj, item, icon_obj, NULL, wd->icon_size,
1765                                          "elm,state,icon_set");
1766      }
1767    else
1768      _elm_toolbar_item_icon_obj_set(obj, item, NULL, NULL, 0, "elm,state,icon_set");
1769    return EINA_TRUE;
1770 }
1771
1772 EAPI Eina_Bool
1773 elm_toolbar_item_icon_file_set(Elm_Object_Item *it, const char *file, const char *key)
1774 {
1775    ELM_OBJ_ITEM_CHECK_OR_RETURN(it, EINA_FALSE);
1776
1777    Evas_Object *icon_obj;
1778    Widget_Data *wd;
1779    Evas_Object *obj;
1780    Eina_Bool ret;
1781 <<<<<<< HEAD
1782    Elm_Toolbar_Item *item = (Elm_Toolbar_Item *) it;
1783 =======
1784    Elm_Toolbar_Item *item = (Elm_Toolbar_Item *)it;
1785 >>>>>>> remotes/origin/upstream
1786
1787    obj = WIDGET(item);
1788    wd = elm_widget_data_get(obj);
1789    if (!wd) return EINA_FALSE;
1790
1791    if (file)
1792      {
1793         icon_obj = _els_smart_icon_add(evas_object_evas_get(obj));
1794         evas_object_repeat_events_set(icon_obj, EINA_TRUE);
1795         ret = _els_smart_icon_file_key_set(icon_obj, file, key);
1796         if (!ret)
1797           {
1798              evas_object_del(icon_obj);
1799              return EINA_FALSE;
1800           }
1801         _elm_toolbar_item_icon_obj_set(obj, item, icon_obj, NULL, wd->icon_size,
1802                                          "elm,state,icon_set");
1803      }
1804    else
1805      _elm_toolbar_item_icon_obj_set(obj, item, NULL, NULL, 0, "elm,state,icon_set");
1806    return EINA_TRUE;
1807 }
1808
1809 EAPI void
1810 elm_toolbar_item_del(Elm_Object_Item *it)
1811 {
1812    elm_object_item_del(it);
1813 }
1814
1815 EAPI void
1816 elm_toolbar_item_del_cb_set(Elm_Object_Item *it, Evas_Smart_Cb func)
1817 {
1818    elm_object_item_del_cb_set(it, func);
1819 }
1820
1821 EAPI Eina_Bool
1822 elm_toolbar_item_disabled_get(const Elm_Object_Item *it)
1823 {
1824    return elm_object_item_disabled_get(it);
1825 }
1826
1827 EAPI void
1828 elm_toolbar_item_disabled_set(Elm_Object_Item *it, Eina_Bool disabled)
1829 {
1830    elm_object_item_disabled_set(it, disabled);
1831 }
1832
1833 EAPI void
1834 elm_toolbar_item_separator_set(Elm_Object_Item *it, Eina_Bool separator)
1835 {
1836    ELM_OBJ_ITEM_CHECK_OR_RETURN(it);
1837 <<<<<<< HEAD
1838    Elm_Toolbar_Item *item = (Elm_Toolbar_Item *) it;
1839 =======
1840    Elm_Toolbar_Item *item = (Elm_Toolbar_Item *)it;
1841 >>>>>>> remotes/origin/upstream
1842    Evas_Object *obj = WIDGET(item);
1843    Widget_Data *wd = elm_widget_data_get(obj);
1844    double scale;
1845    if (item->separator == separator) return;
1846    item->separator = separator;
1847    scale = (elm_widget_scale_get(obj) * _elm_config->scale);
1848    _theme_hook_item(obj, item, scale, wd->icon_size);
1849 }
1850
1851 EAPI Eina_Bool
1852 elm_toolbar_item_separator_get(const Elm_Object_Item *it)
1853 {
1854    ELM_OBJ_ITEM_CHECK_OR_RETURN(it, EINA_FALSE);
1855 <<<<<<< HEAD
1856    return ((Elm_Toolbar_Item *) it)->separator;
1857 =======
1858    return ((Elm_Toolbar_Item *)it)->separator;
1859 >>>>>>> remotes/origin/upstream
1860 }
1861
1862 EAPI void
1863 elm_toolbar_shrink_mode_set(Evas_Object *obj, Elm_Toolbar_Shrink_Mode shrink_mode)
1864 {
1865    ELM_CHECK_WIDTYPE(obj, widtype);
1866    Widget_Data *wd = elm_widget_data_get(obj);
1867    Eina_Bool bounce;
1868
1869    if (!wd) return;
1870    wd->shrink_mode = shrink_mode;
1871    bounce = (_elm_config->thumbscroll_bounce_enable) &&
1872       (shrink_mode == ELM_TOOLBAR_SHRINK_SCROLL);
1873    elm_smart_scroller_bounce_allow_set(wd->scr, bounce, EINA_FALSE);
1874
1875    if (wd->more_item)
1876      {
1877         _item_del(wd->more_item);
1878         elm_widget_item_free(wd->more_item);
1879         wd->more_item = NULL;
1880      }
1881
1882    if (shrink_mode == ELM_TOOLBAR_SHRINK_MENU)
1883      {
1884 <<<<<<< HEAD
1885         elm_smart_scroller_policy_set(wd->scr, ELM_SMART_SCROLLER_POLICY_OFF, 
1886 =======
1887         elm_smart_scroller_policy_set(wd->scr, ELM_SMART_SCROLLER_POLICY_OFF,
1888 >>>>>>> remotes/origin/upstream
1889                                       ELM_SMART_SCROLLER_POLICY_OFF);
1890         wd->more_item = _item_new(obj, "more_menu", "More", NULL, NULL);
1891      }
1892    else if (shrink_mode == ELM_TOOLBAR_SHRINK_HIDE)
1893      elm_smart_scroller_policy_set(wd->scr, ELM_SMART_SCROLLER_POLICY_OFF,
1894                                    ELM_SMART_SCROLLER_POLICY_OFF);
1895    else
1896      elm_smart_scroller_policy_set(wd->scr, ELM_SMART_SCROLLER_POLICY_AUTO,
1897                                    ELM_SMART_SCROLLER_POLICY_OFF);
1898    _sizing_eval(obj);
1899 }
1900
1901 EAPI Elm_Toolbar_Shrink_Mode
1902 elm_toolbar_shrink_mode_get(const Evas_Object *obj)
1903 {
1904    ELM_CHECK_WIDTYPE(obj, widtype) ELM_TOOLBAR_SHRINK_NONE;
1905    Widget_Data *wd = elm_widget_data_get(obj);
1906
1907    if (!wd) return ELM_TOOLBAR_SHRINK_NONE;
1908    return wd->shrink_mode;
1909 }
1910
1911 EAPI void
1912 elm_toolbar_homogeneous_set(Evas_Object *obj, Eina_Bool homogeneous)
1913 {
1914    ELM_CHECK_WIDTYPE(obj, widtype);
1915    Widget_Data *wd = elm_widget_data_get(obj);
1916
1917    if (!wd) return;
1918    wd->homogeneous = !!homogeneous;
1919    evas_object_smart_calculate(wd->bx);
1920 }
1921
1922 EAPI Eina_Bool
1923 elm_toolbar_homogeneous_get(const Evas_Object *obj)
1924 {
1925    ELM_CHECK_WIDTYPE(obj, widtype) EINA_FALSE;
1926    Widget_Data *wd = elm_widget_data_get(obj);
1927
1928    if (!wd) return EINA_FALSE;
1929    return wd->homogeneous;
1930 }
1931
1932 EAPI void
1933 elm_toolbar_menu_parent_set(Evas_Object *obj, Evas_Object *parent)
1934 {
1935    Elm_Toolbar_Item *it;
1936    ELM_CHECK_WIDTYPE(obj, widtype);
1937    Widget_Data *wd = elm_widget_data_get(obj);
1938
1939    if (!wd) return;
1940    EINA_SAFETY_ON_NULL_RETURN(parent);
1941    wd->menu_parent = parent;
1942    EINA_INLIST_FOREACH(wd->items, it)
1943      {
1944         if (it->o_menu)
1945           elm_menu_parent_set(it->o_menu, wd->menu_parent);
1946      }
1947    if ((wd->more_item) && (wd->more_item->o_menu))
1948      elm_menu_parent_set(wd->more_item->o_menu, wd->menu_parent);
1949 }
1950
1951 EAPI Evas_Object *
1952 elm_toolbar_menu_parent_get(const Evas_Object *obj)
1953 {
1954    ELM_CHECK_WIDTYPE(obj, widtype) NULL;
1955    Widget_Data *wd = elm_widget_data_get(obj);
1956
1957    if (!wd) return NULL;
1958    return wd->menu_parent;
1959 }
1960
1961 EAPI void
1962 elm_toolbar_align_set(Evas_Object *obj, double align)
1963 {
1964    ELM_CHECK_WIDTYPE(obj, widtype);
1965    Widget_Data *wd = elm_widget_data_get(obj);
1966
1967    if (!wd) return;
1968    if (wd->vertical)
1969      {
1970         if (wd->align != align)
1971           evas_object_size_hint_align_set(wd->bx, 0.5, align);
1972      }
1973    else
1974      {
1975         if (wd->align != align)
1976           evas_object_size_hint_align_set(wd->bx, align, 0.5);
1977      }
1978    wd->align = align;
1979 }
1980
1981 EAPI double
1982 elm_toolbar_align_get(const Evas_Object *obj)
1983 {
1984    ELM_CHECK_WIDTYPE(obj, widtype) 0.0;
1985    Widget_Data *wd = elm_widget_data_get(obj);
1986
1987    if (!wd) return 0.0;
1988    return wd->align;
1989 }
1990
1991 EAPI void
1992 elm_toolbar_item_menu_set(Elm_Object_Item *it, Eina_Bool menu)
1993 {
1994    ELM_OBJ_ITEM_CHECK_OR_RETURN(it);
1995 <<<<<<< HEAD
1996    Elm_Toolbar_Item *item = (Elm_Toolbar_Item *) it;
1997 =======
1998    Elm_Toolbar_Item *item = (Elm_Toolbar_Item *)it;
1999 >>>>>>> remotes/origin/upstream
2000    Widget_Data *wd = elm_widget_data_get(WIDGET(item));
2001    if (!wd) return;
2002
2003    if (item->menu == menu) return;
2004    if (menu) _item_menu_create(wd, item);
2005    else _item_menu_destroy(item);
2006 }
2007
2008 EAPI Evas_Object *
2009 elm_toolbar_item_menu_get(const Elm_Object_Item *it)
2010 {
2011    ELM_OBJ_ITEM_CHECK_OR_RETURN(it, NULL);
2012 <<<<<<< HEAD
2013    Elm_Toolbar_Item *item = (Elm_Toolbar_Item *) it;
2014 =======
2015    Elm_Toolbar_Item *item = (Elm_Toolbar_Item *)it;
2016 >>>>>>> remotes/origin/upstream
2017    if (!item->menu) return NULL;
2018    Widget_Data *wd = elm_widget_data_get(WIDGET(item));
2019    if (!wd) return NULL;
2020    return item->o_menu;
2021 }
2022
2023 EAPI Elm_Toolbar_Item_State *
2024 elm_toolbar_item_state_add(Elm_Object_Item *it, const char *icon, const char *label, Evas_Smart_Cb func, const void *data)
2025 {
2026    ELM_OBJ_ITEM_CHECK_OR_RETURN(it, NULL);
2027
2028    Elm_Toolbar_Item_State *it_state;
2029    Evas_Object *icon_obj;
2030    Evas_Object *obj;
2031    Widget_Data *wd;
2032 <<<<<<< HEAD
2033    Elm_Toolbar_Item *item = (Elm_Toolbar_Item *) it;
2034 =======
2035    Elm_Toolbar_Item *item = (Elm_Toolbar_Item *)it;
2036 >>>>>>> remotes/origin/upstream
2037    obj = WIDGET(item);
2038    wd = elm_widget_data_get(WIDGET(item));
2039    if (!wd) return NULL;
2040
2041    if (!item->states)
2042      {
2043         it_state = _item_state_new(item->label, item->icon_str, item->icon,
2044                                    item->func, item->base.data);
2045         item->states = eina_list_append(item->states, it_state);
2046         item->current_state = item->states;
2047      }
2048
2049    icon_obj = elm_icon_add(obj);
2050    elm_icon_order_lookup_set(icon_obj, wd->lookup_order);
2051    if (!icon_obj) goto error_state_add;
2052
2053    if (!_item_icon_set(icon_obj, "toolbar/", icon))
2054      {
2055         evas_object_del(icon_obj);
2056         icon_obj = NULL;
2057         icon = NULL;
2058      }
2059
2060    it_state = _item_state_new(label, icon, icon_obj, func, data);
2061    item->states = eina_list_append(item->states, it_state);
2062    item->func = _elm_toolbar_item_state_cb;
2063    item->base.data = NULL;
2064
2065    return it_state;
2066
2067 error_state_add:
2068    if (item->states && !eina_list_next(item->states))
2069      {
2070         eina_stringshare_del(item->label);
2071         eina_stringshare_del(item->icon_str);
2072         free(eina_list_data_get(item->states));
2073         eina_list_free(item->states);
2074         item->states = NULL;
2075      }
2076    return NULL;
2077 }
2078
2079 EAPI Eina_Bool
2080 elm_toolbar_item_state_del(Elm_Object_Item *it, Elm_Toolbar_Item_State *state)
2081 {
2082    ELM_OBJ_ITEM_CHECK_OR_RETURN(it, EINA_FALSE);
2083
2084    Eina_List *del_state;
2085    Elm_Toolbar_Item_State *it_state;
2086    Elm_Toolbar_Item *item;
2087
2088    if (!state) return EINA_FALSE;
2089
2090 <<<<<<< HEAD
2091    item = (Elm_Toolbar_Item *) it;
2092 =======
2093    item = (Elm_Toolbar_Item *)it;
2094 >>>>>>> remotes/origin/upstream
2095    if (!item->states) return EINA_FALSE;
2096
2097    del_state = eina_list_data_find_list(item->states, state);
2098    if (del_state == item->states) return EINA_FALSE;
2099    if (del_state == item->current_state)
2100      elm_toolbar_item_state_unset(it);
2101
2102    eina_stringshare_del(state->label);
2103    eina_stringshare_del(state->icon_str);
2104    if (state->icon) evas_object_del(state->icon);
2105    free(state);
2106    item->states = eina_list_remove_list(item->states, del_state);
2107    if (item->states && !eina_list_next(item->states))
2108      {
2109         it_state = eina_list_data_get(item->states);
2110         item->base.data = it_state->data;
2111         item->func = it_state->func;
2112         eina_stringshare_del(it_state->label);
2113         eina_stringshare_del(it_state->icon_str);
2114         free(eina_list_data_get(item->states));
2115         eina_list_free(item->states);
2116         item->states = NULL;
2117      }
2118    return EINA_TRUE;
2119 }
2120
2121 EAPI Eina_Bool
2122 elm_toolbar_item_state_set(Elm_Object_Item *it, Elm_Toolbar_Item_State *state)
2123 {
2124    ELM_OBJ_ITEM_CHECK_OR_RETURN(it, EINA_FALSE);
2125
2126    Widget_Data *wd;
2127    Eina_List *next_state;
2128    Elm_Toolbar_Item_State *it_state;
2129    Evas_Object *obj;
2130 <<<<<<< HEAD
2131    Elm_Toolbar_Item *item = (Elm_Toolbar_Item *) it;
2132 =======
2133    Elm_Toolbar_Item *item = (Elm_Toolbar_Item *)it;
2134 >>>>>>> remotes/origin/upstream
2135
2136    obj = WIDGET(item);
2137    wd = elm_widget_data_get(obj);
2138    if (!wd) return EINA_FALSE;
2139    if (!item->states) return EINA_FALSE;
2140
2141    if (state)
2142      {
2143         next_state = eina_list_data_find_list(item->states, state);
2144         if (!next_state) return EINA_FALSE;
2145      }
2146    else
2147      next_state = item->states;
2148
2149    if (next_state == item->current_state) return EINA_TRUE;
2150
2151    it_state = eina_list_data_get(next_state);
2152    if (eina_list_data_find(item->current_state, state))
2153      {
2154         _item_label_set(item, it_state->label, "elm,state,label_set,forward");
2155         _elm_toolbar_item_icon_obj_set(obj, item, it_state->icon, it_state->icon_str,
2156                                        wd->icon_size, "elm,state,icon_set,forward");
2157      }
2158    else
2159      {
2160         _item_label_set(item, it_state->label, "elm,state,label_set,backward");
2161         _elm_toolbar_item_icon_obj_set(obj,
2162                                        item,
2163                                        it_state->icon,
2164                                        it_state->icon_str,
2165                                        wd->icon_size,
2166                                        "elm,state,icon_set,backward");
2167      }
2168    if (elm_widget_item_disabled_get(item))
2169      elm_widget_signal_emit(item->icon, "elm,state,disabled", "elm");
2170    else
2171      elm_widget_signal_emit(item->icon, "elm,state,enabled", "elm");
2172
2173    item->current_state = next_state;
2174    return EINA_TRUE;
2175 }
2176
2177 EAPI void
2178 elm_toolbar_item_state_unset(Elm_Object_Item *it)
2179 {
2180    elm_toolbar_item_state_set(it, NULL);
2181 }
2182
2183 EAPI Elm_Toolbar_Item_State *
2184 elm_toolbar_item_state_get(const Elm_Object_Item *it)
2185 {
2186    ELM_OBJ_ITEM_CHECK_OR_RETURN(it, NULL);
2187 <<<<<<< HEAD
2188    Elm_Toolbar_Item *item = (Elm_Toolbar_Item *) it;
2189 =======
2190    Elm_Toolbar_Item *item = (Elm_Toolbar_Item *)it;
2191 >>>>>>> remotes/origin/upstream
2192
2193    if ((!item->states) || (!item->current_state)) return NULL;
2194    if (item->current_state == item->states) return NULL;
2195
2196    return eina_list_data_get(item->current_state);
2197 }
2198
2199 EAPI Elm_Toolbar_Item_State *
2200 elm_toolbar_item_state_next(Elm_Object_Item *it)
2201 {
2202    ELM_OBJ_ITEM_CHECK_OR_RETURN(it, NULL);
2203
2204    Widget_Data *wd;
2205    Evas_Object *obj;
2206    Eina_List *next_state;
2207 <<<<<<< HEAD
2208    Elm_Toolbar_Item *item = (Elm_Toolbar_Item *) it;
2209 =======
2210    Elm_Toolbar_Item *item = (Elm_Toolbar_Item *)it;
2211 >>>>>>> remotes/origin/upstream
2212
2213    obj = WIDGET(item);
2214    wd = elm_widget_data_get(obj);
2215    if (!wd) return NULL;
2216    if (!item->states) return NULL;
2217
2218    next_state = eina_list_next(item->current_state);
2219    if (!next_state)
2220      next_state = eina_list_next(item->states);
2221    return eina_list_data_get(next_state);
2222 }
2223
2224 EAPI Elm_Toolbar_Item_State *
2225 elm_toolbar_item_state_prev(Elm_Object_Item *it)
2226 {
2227    ELM_OBJ_ITEM_CHECK_OR_RETURN(it, NULL);
2228
2229    Widget_Data *wd;
2230    Evas_Object *obj;
2231    Eina_List *prev_state;
2232 <<<<<<< HEAD
2233    Elm_Toolbar_Item *item = (Elm_Toolbar_Item *) it;
2234 =======
2235    Elm_Toolbar_Item *item = (Elm_Toolbar_Item *)it;
2236 >>>>>>> remotes/origin/upstream
2237
2238    obj = WIDGET(item);
2239    wd = elm_widget_data_get(obj);
2240    if (!wd) return NULL;
2241    if (!item->states) return NULL;
2242
2243    prev_state = eina_list_prev(item->current_state);
2244    if ((!prev_state) || (prev_state == item->states))
2245      prev_state = eina_list_last(item->states);
2246    return eina_list_data_get(prev_state);
2247 }
2248
2249 EAPI void
2250 elm_toolbar_item_tooltip_text_set(Elm_Object_Item *it, const char *text)
2251 {
2252    elm_object_item_tooltip_text_set(it, text);
2253 }
2254
2255 EAPI void
2256 elm_toolbar_item_tooltip_content_cb_set(Elm_Object_Item *it, Elm_Tooltip_Item_Content_Cb func, const void *data, Evas_Smart_Cb del_cb)
2257 {
2258    elm_object_item_tooltip_content_cb_set(it, func, data, del_cb);
2259 }
2260
2261 EAPI void
2262 elm_toolbar_item_tooltip_unset(Elm_Object_Item *it)
2263 {
2264    elm_object_item_tooltip_unset(it);
2265 }
2266
2267 EAPI void
2268 elm_toolbar_item_tooltip_style_set(Elm_Object_Item *it, const char *style)
2269 {
2270    elm_object_item_tooltip_style_set(it, style);
2271 }
2272
2273 EAPI const char *
2274 elm_toolbar_item_tooltip_style_get(const Elm_Object_Item *it)
2275 {
2276    return elm_object_item_tooltip_style_get(it);
2277 }
2278
2279 EAPI void
2280 elm_toolbar_item_cursor_set(Elm_Object_Item *it, const char *cursor)
2281 {
2282    elm_object_item_cursor_set(it, cursor);
2283 }
2284
2285 EAPI const char *
2286 elm_toolbar_item_cursor_get(const Elm_Object_Item *it)
2287 {
2288    return elm_object_item_cursor_get(it);
2289 }
2290
2291 EAPI void
2292 elm_toolbar_item_cursor_unset(Elm_Object_Item *it)
2293 {
2294    elm_object_item_cursor_unset(it);
2295 }
2296
2297 EAPI void
2298 elm_toolbar_item_cursor_style_set(Elm_Object_Item *it, const char *style)
2299 {
2300    elm_object_item_cursor_style_set(it, style);
2301 }
2302
2303 EAPI const char *
2304 elm_toolbar_item_cursor_style_get(const Elm_Object_Item *it)
2305 {
2306    return elm_object_item_cursor_style_get(it);
2307 }
2308
2309 EAPI void
2310 elm_toolbar_item_cursor_engine_only_set(Elm_Object_Item *it, Eina_Bool engine_only)
2311 {
2312    elm_object_item_cursor_engine_only_set(it, engine_only);
2313 }
2314
2315 EAPI Eina_Bool
2316 elm_toolbar_item_cursor_engine_only_get(const Elm_Object_Item *it)
2317 {
2318    return elm_object_item_cursor_engine_only_get(it);
2319 }
2320
2321 <<<<<<< HEAD
2322 EAPI void
2323 =======
2324 EINA_DEPRECATED EAPI void
2325 >>>>>>> remotes/origin/upstream
2326 elm_toolbar_always_select_mode_set(Evas_Object *obj, Eina_Bool always_select)
2327 {
2328    ELM_CHECK_WIDTYPE(obj, widtype);
2329    Widget_Data *wd = elm_widget_data_get(obj);
2330    if (!wd) return;
2331 <<<<<<< HEAD
2332    if (always_select && (!wd->always_select) && wd->items)
2333      _item_select(ELM_TOOLBAR_ITEM_FROM_INLIST(wd->items));
2334    wd->always_select = always_select;
2335 }
2336
2337 EAPI Eina_Bool
2338 =======
2339    if (always_select)
2340      elm_toolbar_select_mode_set(obj, ELM_OBJECT_SELECT_MODE_ALWAYS);
2341    else
2342      {
2343         Elm_Object_Select_Mode oldmode = elm_toolbar_select_mode_get(obj);
2344         if (oldmode == ELM_OBJECT_SELECT_MODE_ALWAYS)
2345           elm_toolbar_select_mode_set(obj, ELM_OBJECT_SELECT_MODE_DEFAULT);
2346      }
2347 }
2348
2349 EINA_DEPRECATED EAPI Eina_Bool
2350 >>>>>>> remotes/origin/upstream
2351 elm_toolbar_always_select_mode_get(const Evas_Object *obj)
2352 {
2353    ELM_CHECK_WIDTYPE(obj, widtype) EINA_FALSE;
2354    Widget_Data *wd = elm_widget_data_get(obj);
2355    if (!wd) return EINA_FALSE;
2356 <<<<<<< HEAD
2357    return wd->always_select;
2358 }
2359
2360 EAPI void
2361 =======
2362    Elm_Object_Select_Mode oldmode = elm_toolbar_select_mode_get(obj);
2363    if (oldmode == ELM_OBJECT_SELECT_MODE_ALWAYS)
2364      return EINA_TRUE;
2365    else
2366      return EINA_FALSE;
2367 }
2368
2369 EINA_DEPRECATED EAPI void
2370 >>>>>>> remotes/origin/upstream
2371 elm_toolbar_no_select_mode_set(Evas_Object *obj, Eina_Bool no_select)
2372 {
2373    ELM_CHECK_WIDTYPE(obj, widtype);
2374    Widget_Data *wd = elm_widget_data_get(obj);
2375    if (!wd) return;
2376 <<<<<<< HEAD
2377    wd->no_select = no_select;
2378 }
2379
2380 EAPI Eina_Bool
2381 =======
2382    if (no_select)
2383      elm_toolbar_select_mode_set(obj, ELM_OBJECT_SELECT_MODE_NONE);
2384    else
2385      {
2386         Elm_Object_Select_Mode oldmode = elm_toolbar_select_mode_get(obj);
2387         if (oldmode == ELM_OBJECT_SELECT_MODE_NONE)
2388           elm_toolbar_select_mode_set(obj, ELM_OBJECT_SELECT_MODE_DEFAULT);
2389      }
2390 }
2391
2392 EINA_DEPRECATED EAPI Eina_Bool
2393 >>>>>>> remotes/origin/upstream
2394 elm_toolbar_no_select_mode_get(const Evas_Object *obj)
2395 {
2396    ELM_CHECK_WIDTYPE(obj, widtype) EINA_FALSE;
2397    Widget_Data *wd = elm_widget_data_get(obj);
2398    if (!wd) return EINA_FALSE;
2399 <<<<<<< HEAD
2400    return wd->no_select;
2401 =======
2402    Elm_Object_Select_Mode oldmode = elm_toolbar_select_mode_get(obj);
2403    if (oldmode == ELM_OBJECT_SELECT_MODE_NONE)
2404      return EINA_TRUE;
2405    else
2406      return EINA_FALSE;
2407 >>>>>>> remotes/origin/upstream
2408 }
2409
2410 EAPI void
2411 elm_toolbar_icon_order_lookup_set(Evas_Object *obj, Elm_Icon_Lookup_Order order)
2412 {
2413    ELM_CHECK_WIDTYPE(obj, widtype);
2414    Elm_Toolbar_Item *it;
2415    Widget_Data *wd = elm_widget_data_get(obj);
2416    if (!wd) return;
2417
2418    wd->lookup_order = order;
2419    EINA_INLIST_FOREACH(wd->items, it)
2420       elm_icon_order_lookup_set(it->icon, order);
2421    if (wd->more_item)
2422      elm_icon_order_lookup_set(wd->more_item->icon, order);
2423 }
2424
2425 EAPI Elm_Icon_Lookup_Order
2426 elm_toolbar_icon_order_lookup_get(const Evas_Object *obj)
2427 {
2428    ELM_CHECK_WIDTYPE(obj, widtype) ELM_ICON_LOOKUP_THEME_FDO;
2429    Widget_Data *wd = elm_widget_data_get(obj);
2430    if (!wd) return ELM_ICON_LOOKUP_THEME_FDO;
2431    return wd->lookup_order;
2432 }
2433
2434 EINA_DEPRECATED EAPI void
2435 elm_toolbar_orientation_set(Evas_Object *obj, Eina_Bool vertical)
2436 {
2437    elm_toolbar_horizontal_set(obj, !vertical);
2438 }
2439
2440 EINA_DEPRECATED EAPI Eina_Bool
2441 elm_toolbar_orientation_get(const Evas_Object *obj)
2442 {
2443    return !elm_toolbar_horizontal_get(obj);
2444 }
2445
2446 EAPI void
2447 elm_toolbar_horizontal_set(Evas_Object *obj, Eina_Bool horizontal)
2448 {
2449    ELM_CHECK_WIDTYPE(obj, widtype);
2450    Widget_Data *wd = elm_widget_data_get(obj);
2451    if (!wd) return;
2452    wd->vertical = !horizontal;
2453    if (wd->vertical)
2454      evas_object_size_hint_align_set(wd->bx, 0.5, wd->align);
2455    else
2456      evas_object_size_hint_align_set(wd->bx, wd->align, 0.5);
2457    _sizing_eval(obj);
2458 }
2459
2460 EAPI Eina_Bool
2461 elm_toolbar_horizontal_get(const Evas_Object *obj)
2462 {
2463    ELM_CHECK_WIDTYPE(obj, widtype) EINA_FALSE;
2464    Widget_Data *wd = elm_widget_data_get(obj);
2465    if (!wd) return EINA_FALSE;
2466    return !wd->vertical;
2467 }
2468
2469 EAPI unsigned int
2470 elm_toolbar_items_count(const Evas_Object *obj)
2471 {
2472    ELM_CHECK_WIDTYPE(obj, widtype) 0;
2473    Widget_Data *wd = elm_widget_data_get(obj);
2474    if (!wd) return 0;
2475    return wd->item_count;
2476 }
2477
2478 EINA_DEPRECATED EAPI void
2479 elm_toolbar_mode_shrink_set(Evas_Object *obj, Elm_Toolbar_Shrink_Mode shrink_mode)
2480 {
2481    elm_toolbar_shrink_mode_set(obj, shrink_mode);
2482 }
2483
2484 EINA_DEPRECATED EAPI Elm_Toolbar_Shrink_Mode
2485 elm_toolbar_mode_shrink_get(const Evas_Object *obj)
2486 {
2487    return elm_toolbar_shrink_mode_get(obj);
2488 }
2489 <<<<<<< HEAD
2490 =======
2491
2492 EAPI void
2493 elm_toolbar_select_mode_set(Evas_Object *obj, Elm_Object_Select_Mode mode)
2494 {
2495    ELM_CHECK_WIDTYPE(obj, widtype);
2496    Widget_Data *wd = elm_widget_data_get(obj);
2497    if (!wd) return;
2498    if (mode >= ELM_OBJECT_SELECT_MODE_MAX)
2499      return;
2500    if ((mode == ELM_OBJECT_SELECT_MODE_ALWAYS) &&
2501        (wd->select_mode != ELM_OBJECT_SELECT_MODE_ALWAYS) &&
2502        wd->items)
2503      _item_select(ELM_TOOLBAR_ITEM_FROM_INLIST(wd->items));
2504    if (wd->select_mode != mode)
2505      wd->select_mode = mode;
2506 }
2507
2508 EAPI Elm_Object_Select_Mode
2509 elm_toolbar_select_mode_get(const Evas_Object *obj)
2510 {
2511    ELM_CHECK_WIDTYPE(obj, widtype) ELM_OBJECT_SELECT_MODE_MAX;
2512    Widget_Data *wd = elm_widget_data_get(obj);
2513    if (!wd) return ELM_OBJECT_SELECT_MODE_MAX;
2514    return wd->select_mode;
2515 }
2516
2517 >>>>>>> remotes/origin/upstream