diff options
Diffstat (limited to '')
-rw-r--r-- | libraries/elementary/src/lib/elc_hoversel.c | 507 |
1 files changed, 507 insertions, 0 deletions
diff --git a/libraries/elementary/src/lib/elc_hoversel.c b/libraries/elementary/src/lib/elc_hoversel.c new file mode 100644 index 0000000..fb07d78 --- /dev/null +++ b/libraries/elementary/src/lib/elc_hoversel.c | |||
@@ -0,0 +1,507 @@ | |||
1 | #include <Elementary.h> | ||
2 | #include "elm_priv.h" | ||
3 | |||
4 | typedef struct _Widget_Data Widget_Data; | ||
5 | typedef struct _Elm_Hoversel_Item Elm_Hoversel_Item; | ||
6 | |||
7 | struct _Widget_Data | ||
8 | { | ||
9 | Evas_Object *btn, *hover; | ||
10 | Evas_Object *hover_parent; | ||
11 | Eina_List *items; | ||
12 | Eina_Bool horizontal : 1; | ||
13 | Eina_Bool expanded : 1; | ||
14 | }; | ||
15 | |||
16 | struct _Elm_Hoversel_Item | ||
17 | { | ||
18 | ELM_WIDGET_ITEM; | ||
19 | const char *label; | ||
20 | const char *icon_file; | ||
21 | const char *icon_group; | ||
22 | Elm_Icon_Type icon_type; | ||
23 | Evas_Smart_Cb func; | ||
24 | }; | ||
25 | |||
26 | static const char *widtype = NULL; | ||
27 | static void _del_pre_hook(Evas_Object *obj); | ||
28 | static void _del_hook(Evas_Object *obj); | ||
29 | static void _activate(Evas_Object *obj); | ||
30 | static void _activate_hook(Evas_Object *obj); | ||
31 | static void _disable_hook(Evas_Object *obj); | ||
32 | static void _sizing_eval(Evas_Object *obj); | ||
33 | static void _changed_size_hints(void *data, Evas *e, Evas_Object *obj, void *event_info); | ||
34 | static void _parent_del(void *data, Evas *e, Evas_Object *obj, void *event_info); | ||
35 | |||
36 | static const char SIG_CLICKED[] = "clicked"; | ||
37 | static const char SIG_SELECTED[] = "selected"; | ||
38 | static const char SIG_DISMISSED[] = "dismissed"; | ||
39 | |||
40 | static const Evas_Smart_Cb_Description _signals[] = { | ||
41 | {SIG_CLICKED, ""}, | ||
42 | {SIG_SELECTED, ""}, | ||
43 | {SIG_DISMISSED, ""}, | ||
44 | {NULL, NULL} | ||
45 | }; | ||
46 | |||
47 | static void | ||
48 | _del_pre_hook(Evas_Object *obj) | ||
49 | { | ||
50 | Elm_Hoversel_Item *item; | ||
51 | Widget_Data *wd = elm_widget_data_get(obj); | ||
52 | if (!wd) return; | ||
53 | evas_object_event_callback_del_full(wd->btn, EVAS_CALLBACK_CHANGED_SIZE_HINTS, | ||
54 | _changed_size_hints, obj); | ||
55 | elm_hoversel_hover_end(obj); | ||
56 | elm_hoversel_hover_parent_set(obj, NULL); | ||
57 | EINA_LIST_FREE(wd->items, item) | ||
58 | { | ||
59 | eina_stringshare_del(item->label); | ||
60 | eina_stringshare_del(item->icon_file); | ||
61 | eina_stringshare_del(item->icon_group); | ||
62 | elm_widget_item_free(item); | ||
63 | } | ||
64 | } | ||
65 | |||
66 | static void | ||
67 | _del_hook(Evas_Object *obj) | ||
68 | { | ||
69 | Widget_Data *wd = elm_widget_data_get(obj); | ||
70 | if (!wd) return; | ||
71 | free(wd); | ||
72 | } | ||
73 | |||
74 | static void | ||
75 | _mirrored_set(Evas_Object *obj, Eina_Bool rtl) | ||
76 | { | ||
77 | Widget_Data *wd = elm_widget_data_get(obj); | ||
78 | if (!wd) return; | ||
79 | elm_widget_mirrored_set(wd->btn, rtl); | ||
80 | elm_widget_mirrored_set(wd->hover, rtl); | ||
81 | } | ||
82 | |||
83 | static void | ||
84 | _theme_hook(Evas_Object *obj) | ||
85 | { | ||
86 | Widget_Data *wd = elm_widget_data_get(obj); | ||
87 | char buf[4096]; | ||
88 | if (!wd) return; | ||
89 | _elm_widget_mirrored_reload(obj); | ||
90 | |||
91 | elm_hoversel_hover_end(obj); | ||
92 | if (wd->horizontal) | ||
93 | snprintf(buf, sizeof(buf), "hoversel_horizontal/%s", elm_widget_style_get(obj)); | ||
94 | else | ||
95 | snprintf(buf, sizeof(buf), "hoversel_vertical/%s", elm_widget_style_get(obj)); | ||
96 | elm_object_style_set(wd->btn, buf); | ||
97 | elm_object_disabled_set(wd->btn, elm_widget_disabled_get(obj)); | ||
98 | _mirrored_set(obj, elm_widget_mirrored_get(obj)); | ||
99 | } | ||
100 | |||
101 | static void | ||
102 | _disable_hook(Evas_Object *obj) | ||
103 | { | ||
104 | Widget_Data *wd = elm_widget_data_get(obj); | ||
105 | if (!wd) return; | ||
106 | elm_object_disabled_set(wd->btn, elm_widget_disabled_get(obj)); | ||
107 | } | ||
108 | |||
109 | static void | ||
110 | _sizing_eval(Evas_Object *obj) | ||
111 | { | ||
112 | Widget_Data *wd = elm_widget_data_get(obj); | ||
113 | Evas_Coord minw = -1, minh = -1, maxw = -1, maxh = -1; | ||
114 | if (!wd) return; | ||
115 | evas_object_size_hint_min_get(wd->btn, &minw, &minh); | ||
116 | evas_object_size_hint_max_get(wd->btn, &maxw, &maxh); | ||
117 | evas_object_size_hint_min_set(obj, minw, minh); | ||
118 | evas_object_size_hint_max_set(obj, maxw, maxh); | ||
119 | } | ||
120 | |||
121 | static void | ||
122 | _on_focus_hook(void *data __UNUSED__, Evas_Object *obj) | ||
123 | { | ||
124 | Widget_Data *wd = elm_widget_data_get(obj); | ||
125 | if (!wd) return; | ||
126 | if (elm_widget_focus_get(obj)) | ||
127 | elm_widget_focus_steal(wd->btn); | ||
128 | } | ||
129 | |||
130 | static void | ||
131 | _changed_size_hints(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) | ||
132 | { | ||
133 | _sizing_eval(data); | ||
134 | } | ||
135 | |||
136 | static void | ||
137 | _hover_clicked(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) | ||
138 | { | ||
139 | elm_hoversel_hover_end(data); | ||
140 | } | ||
141 | |||
142 | static void | ||
143 | _item_clicked(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) | ||
144 | { | ||
145 | Elm_Hoversel_Item *item = data; | ||
146 | Evas_Object *obj2 = WIDGET(item); | ||
147 | |||
148 | elm_hoversel_hover_end(obj2); | ||
149 | if (item->func) item->func((void *)item->base.data, obj2, item); | ||
150 | evas_object_smart_callback_call(obj2, SIG_SELECTED, item); | ||
151 | } | ||
152 | |||
153 | static void | ||
154 | _activate(Evas_Object *obj) | ||
155 | { | ||
156 | Widget_Data *wd = elm_widget_data_get(obj); | ||
157 | Evas_Object *bt, *bx, *ic; | ||
158 | const Eina_List *l; | ||
159 | const Elm_Hoversel_Item *item; | ||
160 | char buf[4096]; | ||
161 | |||
162 | if (!wd) return; | ||
163 | if (wd->expanded) | ||
164 | { | ||
165 | elm_hoversel_hover_end(obj); | ||
166 | return; | ||
167 | } | ||
168 | wd->expanded = EINA_TRUE; | ||
169 | |||
170 | if (elm_widget_disabled_get(obj)) return; | ||
171 | wd->hover = elm_hover_add(obj); | ||
172 | elm_widget_mirrored_automatic_set(wd->hover, EINA_FALSE); | ||
173 | if (wd->horizontal) | ||
174 | snprintf(buf, sizeof(buf), "hoversel_horizontal/%s", elm_widget_style_get(obj)); | ||
175 | else | ||
176 | snprintf(buf, sizeof(buf), "hoversel_vertical/%s", elm_widget_style_get(obj)); | ||
177 | elm_object_style_set(wd->hover, buf); | ||
178 | evas_object_smart_callback_add(wd->hover, "clicked", _hover_clicked, obj); | ||
179 | elm_hover_parent_set(wd->hover, wd->hover_parent); | ||
180 | elm_hover_target_set(wd->hover, wd->btn); | ||
181 | |||
182 | bx = elm_box_add(wd->hover); | ||
183 | elm_widget_mirrored_automatic_set(bx, EINA_FALSE); | ||
184 | elm_box_homogeneous_set(bx, 1); | ||
185 | |||
186 | elm_box_horizontal_set(bx, wd->horizontal); | ||
187 | |||
188 | if (wd->horizontal) | ||
189 | snprintf(buf, sizeof(buf), "hoversel_horizontal_entry/%s", | ||
190 | elm_widget_style_get(obj)); | ||
191 | else | ||
192 | snprintf(buf, sizeof(buf), "hoversel_vertical_entry/%s", | ||
193 | elm_widget_style_get(obj)); | ||
194 | EINA_LIST_FOREACH(wd->items, l, item) | ||
195 | { | ||
196 | bt = elm_button_add(wd->hover); | ||
197 | elm_widget_mirrored_automatic_set(bt, EINA_FALSE); | ||
198 | elm_widget_mirrored_set(bt, elm_widget_mirrored_get(obj)); | ||
199 | elm_object_style_set(bt, buf); | ||
200 | elm_object_text_set(bt, item->label); | ||
201 | if (item->icon_file) | ||
202 | { | ||
203 | ic = elm_icon_add(obj); | ||
204 | elm_icon_resizable_set(ic, EINA_FALSE, EINA_TRUE); | ||
205 | if (item->icon_type == ELM_ICON_FILE) | ||
206 | elm_icon_file_set(ic, item->icon_file, item->icon_group); | ||
207 | else if (item->icon_type == ELM_ICON_STANDARD) | ||
208 | elm_icon_standard_set(ic, item->icon_file); | ||
209 | elm_object_part_content_set(bt, "icon", ic); | ||
210 | evas_object_show(ic); | ||
211 | } | ||
212 | evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0); | ||
213 | evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL); | ||
214 | elm_box_pack_end(bx, bt); | ||
215 | evas_object_smart_callback_add(bt, "clicked", _item_clicked, item); | ||
216 | evas_object_show(bt); | ||
217 | } | ||
218 | |||
219 | if (wd->horizontal) | ||
220 | elm_object_part_content_set(wd->hover, | ||
221 | elm_hover_best_content_location_get(wd->hover, | ||
222 | ELM_HOVER_AXIS_HORIZONTAL), | ||
223 | bx); | ||
224 | else | ||
225 | elm_object_part_content_set(wd->hover, | ||
226 | elm_hover_best_content_location_get(wd->hover, | ||
227 | ELM_HOVER_AXIS_VERTICAL), | ||
228 | bx); | ||
229 | evas_object_show(bx); | ||
230 | |||
231 | evas_object_show(wd->hover); | ||
232 | evas_object_smart_callback_call(obj, SIG_CLICKED, NULL); | ||
233 | |||
234 | // if (wd->horizontal) evas_object_hide(wd->btn); | ||
235 | } | ||
236 | |||
237 | static void | ||
238 | _activate_hook(Evas_Object *obj) | ||
239 | { | ||
240 | _activate(obj); | ||
241 | } | ||
242 | |||
243 | static void | ||
244 | _button_clicked(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) | ||
245 | { | ||
246 | _activate(data); | ||
247 | } | ||
248 | |||
249 | static void | ||
250 | _parent_del(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) | ||
251 | { | ||
252 | Widget_Data *wd = elm_widget_data_get(data); | ||
253 | if (!wd) return; | ||
254 | wd->hover_parent = NULL; | ||
255 | } | ||
256 | |||
257 | static void | ||
258 | _elm_hoversel_label_set(Evas_Object *obj, const char *item, const char *label) | ||
259 | { | ||
260 | ELM_CHECK_WIDTYPE(obj, widtype); | ||
261 | Widget_Data *wd = elm_widget_data_get(obj); | ||
262 | if (item && strcmp(item, "default")) return; | ||
263 | if (!wd) return; | ||
264 | elm_object_text_set(wd->btn, label); | ||
265 | } | ||
266 | |||
267 | static const char * | ||
268 | _elm_hoversel_label_get(const Evas_Object *obj, const char *item) | ||
269 | { | ||
270 | ELM_CHECK_WIDTYPE(obj, widtype) NULL; | ||
271 | Widget_Data *wd = elm_widget_data_get(obj); | ||
272 | if (item && strcmp(item, "default")) return NULL; | ||
273 | if ((!wd) || (!wd->btn)) return NULL; | ||
274 | return elm_object_text_get(wd->btn); | ||
275 | } | ||
276 | |||
277 | static void | ||
278 | _content_set_hook(Evas_Object *obj, const char *part, Evas_Object *content) | ||
279 | { | ||
280 | ELM_CHECK_WIDTYPE(obj, widtype); | ||
281 | Widget_Data *wd = elm_widget_data_get(obj); | ||
282 | if (!wd) return; | ||
283 | |||
284 | elm_object_part_content_set(wd->btn, part, content); | ||
285 | } | ||
286 | |||
287 | static Evas_Object * | ||
288 | _content_get_hook(const Evas_Object *obj, const char *part) | ||
289 | { | ||
290 | ELM_CHECK_WIDTYPE(obj, widtype) NULL; | ||
291 | Widget_Data *wd = elm_widget_data_get(obj); | ||
292 | if ((!wd) || (!wd->btn)) return NULL; | ||
293 | return elm_object_part_content_get(wd->btn, part); | ||
294 | } | ||
295 | |||
296 | static Evas_Object * | ||
297 | _content_unset_hook(Evas_Object *obj, const char *part) | ||
298 | { | ||
299 | ELM_CHECK_WIDTYPE(obj, widtype) NULL; | ||
300 | Widget_Data *wd = elm_widget_data_get(obj); | ||
301 | if ((!wd) || (!wd->btn)) return NULL; | ||
302 | return elm_object_part_content_unset(wd->btn, part); | ||
303 | } | ||
304 | |||
305 | static const char * | ||
306 | _item_text_get_hook(const Elm_Object_Item *it, const char *part) | ||
307 | { | ||
308 | if (part && strcmp(part, "default")) return NULL; | ||
309 | return ((Elm_Hoversel_Item *)it)->label; | ||
310 | } | ||
311 | |||
312 | static Eina_Bool | ||
313 | _item_del_pre_hook(Elm_Object_Item *it) | ||
314 | { | ||
315 | Widget_Data *wd; | ||
316 | Elm_Hoversel_Item *item = (Elm_Hoversel_Item *)it; | ||
317 | wd = elm_widget_data_get(WIDGET(item)); | ||
318 | if (!wd) return EINA_FALSE; | ||
319 | elm_hoversel_hover_end(WIDGET(item)); | ||
320 | wd->items = eina_list_remove(wd->items, item); | ||
321 | eina_stringshare_del(item->label); | ||
322 | eina_stringshare_del(item->icon_file); | ||
323 | eina_stringshare_del(item->icon_group); | ||
324 | |||
325 | return EINA_TRUE; | ||
326 | } | ||
327 | |||
328 | EAPI Evas_Object * | ||
329 | elm_hoversel_add(Evas_Object *parent) | ||
330 | { | ||
331 | Evas_Object *obj; | ||
332 | Evas *e; | ||
333 | Widget_Data *wd; | ||
334 | |||
335 | ELM_WIDGET_STANDARD_SETUP(wd, Widget_Data, parent, e, obj, NULL); | ||
336 | |||
337 | ELM_SET_WIDTYPE(widtype, "hoversel"); | ||
338 | elm_widget_type_set(obj, "hoversel"); | ||
339 | elm_widget_sub_object_add(parent, obj); | ||
340 | elm_widget_data_set(obj, wd); | ||
341 | elm_widget_del_pre_hook_set(obj, _del_pre_hook); | ||
342 | elm_widget_del_hook_set(obj, _del_hook); | ||
343 | elm_widget_theme_hook_set(obj, _theme_hook); | ||
344 | elm_widget_disable_hook_set(obj, _disable_hook); | ||
345 | elm_widget_activate_hook_set(obj, _activate_hook); | ||
346 | elm_widget_on_focus_hook_set(obj, _on_focus_hook, NULL); | ||
347 | elm_widget_can_focus_set(obj, EINA_TRUE); | ||
348 | elm_widget_text_set_hook_set(obj, _elm_hoversel_label_set); | ||
349 | elm_widget_text_get_hook_set(obj, _elm_hoversel_label_get); | ||
350 | elm_widget_content_set_hook_set(obj, _content_set_hook); | ||
351 | elm_widget_content_get_hook_set(obj, _content_get_hook); | ||
352 | elm_widget_content_unset_hook_set(obj, _content_unset_hook); | ||
353 | |||
354 | wd->btn = elm_button_add(parent); | ||
355 | elm_widget_mirrored_automatic_set(wd->btn, EINA_FALSE); | ||
356 | wd->expanded = EINA_FALSE; | ||
357 | elm_widget_resize_object_set(obj, wd->btn); | ||
358 | evas_object_event_callback_add(wd->btn, EVAS_CALLBACK_CHANGED_SIZE_HINTS, | ||
359 | _changed_size_hints, obj); | ||
360 | evas_object_smart_callback_add(wd->btn, "clicked", _button_clicked, obj); | ||
361 | evas_object_smart_callbacks_descriptions_set(obj, _signals); | ||
362 | |||
363 | elm_widget_sub_object_add(obj, wd->btn); | ||
364 | |||
365 | elm_hoversel_hover_parent_set(obj, parent); | ||
366 | _theme_hook(obj); | ||
367 | |||
368 | return obj; | ||
369 | } | ||
370 | |||
371 | EAPI void | ||
372 | elm_hoversel_hover_parent_set(Evas_Object *obj, Evas_Object *parent) | ||
373 | { | ||
374 | ELM_CHECK_WIDTYPE(obj, widtype); | ||
375 | Widget_Data *wd = elm_widget_data_get(obj); | ||
376 | if (!wd) return; | ||
377 | if (wd->hover_parent) | ||
378 | evas_object_event_callback_del_full(wd->hover_parent, EVAS_CALLBACK_DEL, | ||
379 | _parent_del, obj); | ||
380 | wd->hover_parent = parent; | ||
381 | if (wd->hover_parent) | ||
382 | evas_object_event_callback_add(wd->hover_parent, EVAS_CALLBACK_DEL, | ||
383 | _parent_del, obj); | ||
384 | } | ||
385 | |||
386 | EAPI Evas_Object * | ||
387 | elm_hoversel_hover_parent_get(const Evas_Object *obj) | ||
388 | { | ||
389 | ELM_CHECK_WIDTYPE(obj, widtype) NULL; | ||
390 | Widget_Data *wd = elm_widget_data_get(obj); | ||
391 | if (!wd) return NULL; | ||
392 | return wd->hover_parent; | ||
393 | } | ||
394 | |||
395 | EAPI void | ||
396 | elm_hoversel_horizontal_set(Evas_Object *obj, Eina_Bool horizontal) | ||
397 | { | ||
398 | ELM_CHECK_WIDTYPE(obj, widtype); | ||
399 | Widget_Data *wd = elm_widget_data_get(obj); | ||
400 | if (!wd) return; | ||
401 | wd->horizontal = !!horizontal; | ||
402 | } | ||
403 | |||
404 | EAPI Eina_Bool | ||
405 | elm_hoversel_horizontal_get(const Evas_Object *obj) | ||
406 | { | ||
407 | ELM_CHECK_WIDTYPE(obj, widtype) EINA_FALSE; | ||
408 | Widget_Data *wd = elm_widget_data_get(obj); | ||
409 | if (!wd) return EINA_FALSE; | ||
410 | return wd->horizontal; | ||
411 | } | ||
412 | |||
413 | EAPI void | ||
414 | elm_hoversel_hover_begin(Evas_Object *obj) | ||
415 | { | ||
416 | ELM_CHECK_WIDTYPE(obj, widtype); | ||
417 | Widget_Data *wd = elm_widget_data_get(obj); | ||
418 | if (!wd) return; | ||
419 | if (wd->hover) return; | ||
420 | _activate(obj); | ||
421 | } | ||
422 | |||
423 | EAPI void | ||
424 | elm_hoversel_hover_end(Evas_Object *obj) | ||
425 | { | ||
426 | ELM_CHECK_WIDTYPE(obj, widtype); | ||
427 | Widget_Data *wd = elm_widget_data_get(obj); | ||
428 | if (!wd) return; | ||
429 | if (!wd->hover) return; | ||
430 | wd->expanded = EINA_FALSE; | ||
431 | evas_object_del(wd->hover); | ||
432 | wd->hover = NULL; | ||
433 | evas_object_smart_callback_call(obj, SIG_DISMISSED, NULL); | ||
434 | } | ||
435 | |||
436 | EAPI Eina_Bool | ||
437 | elm_hoversel_expanded_get(const Evas_Object *obj) | ||
438 | { | ||
439 | ELM_CHECK_WIDTYPE(obj, widtype) EINA_FALSE; | ||
440 | Widget_Data *wd = elm_widget_data_get(obj); | ||
441 | if (!wd) return EINA_FALSE; | ||
442 | return (wd->hover) ? EINA_TRUE : EINA_FALSE; | ||
443 | } | ||
444 | |||
445 | EAPI void | ||
446 | elm_hoversel_clear(Evas_Object *obj) | ||
447 | { | ||
448 | Elm_Object_Item *it; | ||
449 | Eina_List *l, *ll; | ||
450 | ELM_CHECK_WIDTYPE(obj, widtype); | ||
451 | Widget_Data *wd = elm_widget_data_get(obj); | ||
452 | if (!wd) return; | ||
453 | EINA_LIST_FOREACH_SAFE(wd->items, l, ll, it) | ||
454 | { | ||
455 | _item_del_pre_hook(it); | ||
456 | elm_widget_item_free(it); | ||
457 | } | ||
458 | } | ||
459 | |||
460 | EAPI const Eina_List * | ||
461 | elm_hoversel_items_get(const Evas_Object *obj) | ||
462 | { | ||
463 | ELM_CHECK_WIDTYPE(obj, widtype) NULL; | ||
464 | Widget_Data *wd = elm_widget_data_get(obj); | ||
465 | if (!wd) return NULL; | ||
466 | return wd->items; | ||
467 | } | ||
468 | |||
469 | EAPI Elm_Object_Item * | ||
470 | elm_hoversel_item_add(Evas_Object *obj, const char *label, const char *icon_file, Elm_Icon_Type icon_type, Evas_Smart_Cb func, const void *data) | ||
471 | { | ||
472 | ELM_CHECK_WIDTYPE(obj, widtype) NULL; | ||
473 | Widget_Data *wd = elm_widget_data_get(obj); | ||
474 | if (!wd) return NULL; | ||
475 | Elm_Hoversel_Item *item = elm_widget_item_new(obj, Elm_Hoversel_Item); | ||
476 | if (!item) return NULL; | ||
477 | elm_widget_item_del_pre_hook_set(item, _item_del_pre_hook); | ||
478 | elm_widget_item_text_get_hook_set(item, _item_text_get_hook); | ||
479 | wd->items = eina_list_append(wd->items, item); | ||
480 | item->label = eina_stringshare_add(label); | ||
481 | item->icon_file = eina_stringshare_add(icon_file); | ||
482 | item->icon_type = icon_type; | ||
483 | item->func = func; | ||
484 | item->base.data = data; | ||
485 | return (Elm_Object_Item *)item; | ||
486 | } | ||
487 | |||
488 | EAPI void | ||
489 | elm_hoversel_item_icon_set(Elm_Object_Item *it, const char *icon_file, const char *icon_group, Elm_Icon_Type icon_type) | ||
490 | { | ||
491 | ELM_OBJ_ITEM_CHECK_OR_RETURN(it); | ||
492 | Elm_Hoversel_Item *item = (Elm_Hoversel_Item *)it; | ||
493 | eina_stringshare_replace(&item->icon_file, icon_file); | ||
494 | eina_stringshare_replace(&item->icon_group, icon_group); | ||
495 | item->icon_type = icon_type; | ||
496 | } | ||
497 | |||
498 | EAPI void | ||
499 | elm_hoversel_item_icon_get(const Elm_Object_Item *it, const char **icon_file, const char **icon_group, Elm_Icon_Type *icon_type) | ||
500 | { | ||
501 | ELM_OBJ_ITEM_CHECK_OR_RETURN(it); | ||
502 | Elm_Hoversel_Item *item = (Elm_Hoversel_Item *)it; | ||
503 | if (icon_file) *icon_file = item->icon_file; | ||
504 | if (icon_group) *icon_group = item->icon_group; | ||
505 | if (icon_type) *icon_type = item->icon_type; | ||
506 | } | ||
507 | |||