From: Enlightenment S. <no-...@en...> - 2010-06-16 20:58:16
|
Log: Standardizing elm_<widget>_{icon,content}_set API elm_<widget>_icon_set was changed to the better form and the signals was passed to hidden icons when one icon is changed/removed. Moreover, when changed by {icon,content}_set the old {icon,content} will be deleted. By: Fabiano Fidencio <fid...@pr...> Author: sachiel Date: 2010-06-16 13:58:09 -0700 (Wed, 16 Jun 2010) New Revision: 49706 Modified: trunk/TMP/st/elementary/src/lib/Elementary.h.in trunk/TMP/st/elementary/src/lib/elc_fileselector_button.c trunk/TMP/st/elementary/src/lib/elm_bubble.c trunk/TMP/st/elementary/src/lib/elm_button.c trunk/TMP/st/elementary/src/lib/elm_check.c trunk/TMP/st/elementary/src/lib/elm_conform.c trunk/TMP/st/elementary/src/lib/elm_frame.c trunk/TMP/st/elementary/src/lib/elm_hover.c trunk/TMP/st/elementary/src/lib/elm_layout.c trunk/TMP/st/elementary/src/lib/elm_list.c trunk/TMP/st/elementary/src/lib/elm_mapbuf.c trunk/TMP/st/elementary/src/lib/elm_menu.c trunk/TMP/st/elementary/src/lib/elm_notify.c trunk/TMP/st/elementary/src/lib/elm_panel.c trunk/TMP/st/elementary/src/lib/elm_progressbar.c trunk/TMP/st/elementary/src/lib/elm_radio.c trunk/TMP/st/elementary/src/lib/elm_scroller.c trunk/TMP/st/elementary/src/lib/elm_slider.c trunk/TMP/st/elementary/src/lib/elm_toggle.c trunk/TMP/st/elementary/src/lib/elm_win.c Modified: trunk/TMP/st/elementary/src/lib/Elementary.h.in =================================================================== --- trunk/TMP/st/elementary/src/lib/Elementary.h.in 2010-06-16 20:58:01 UTC (rev 49705) +++ trunk/TMP/st/elementary/src/lib/Elementary.h.in 2010-06-16 20:58:09 UTC (rev 49706) @@ -367,6 +367,7 @@ EAPI Evas_Object *elm_win_inwin_add(Evas_Object *obj); EAPI void elm_win_inwin_activate(Evas_Object *obj); EAPI void elm_win_inwin_content_set(Evas_Object *obj, Evas_Object *content); + EAPI Evas_Object *elm_win_inwin_content_unset(Evas_Object *obj); /* available styles: * default * minimal @@ -491,6 +492,7 @@ EAPI Evas_Object *elm_scroller_add(Evas_Object *parent); EAPI void elm_scroller_content_set(Evas_Object *obj, Evas_Object *child); + EAPI Evas_Object *elm_scroller_content_unset(Evas_Object *obj); EAPI void elm_scroller_custom_widget_base_theme_set(Evas_Object *obj, const char *widget, const char *base); EAPI void elm_scroller_content_min_limit(Evas_Object *obj, Eina_Bool w, Eina_Bool h); EAPI void elm_scroller_region_show(Evas_Object *obj, Evas_Coord x, Evas_Coord y, Evas_Coord w, Evas_Coord h); @@ -546,6 +548,7 @@ EAPI void elm_frame_label_set(Evas_Object *obj, const char *label); EAPI const char *elm_frame_label_get(const Evas_Object *obj); EAPI void elm_frame_content_set(Evas_Object *obj, Evas_Object *content); + EAPI Evas_Object *elm_frame_content_unset(Evas_Object *obj); /* available styles: * default * pad_small @@ -644,6 +647,7 @@ EAPI Eina_Bool elm_layout_file_set(Evas_Object *obj, const char *file, const char *group); EAPI Eina_Bool elm_layout_theme_set(Evas_Object *obj, const char *clas, const char *group, const char *style); EAPI void elm_layout_content_set(Evas_Object *obj, const char *swallow, Evas_Object *content); + EAPI Evas_Object *elm_layout_content_unset(Evas_Object *obj, const char *swallow); EAPI Evas_Object *elm_layout_edje_get(const Evas_Object *obj); EAPI void elm_layout_sizing_eval(Evas_Object *obj); /* smart callbacks called: @@ -663,6 +667,7 @@ } Elm_Notify_Orient; EAPI Evas_Object *elm_notify_add(Evas_Object *parent); EAPI void elm_notify_content_set(Evas_Object *obj, Evas_Object *content); + EAPI Evas_Object *elm_notify_content_unset(Evas_Object *obj); EAPI void elm_notify_parent_set(Evas_Object *obj, Evas_Object *parent); EAPI void elm_notify_orient_set(Evas_Object *obj, Elm_Notify_Orient orient); EAPI void elm_notify_timeout_set(Evas_Object *obj, int timeout); @@ -684,6 +689,7 @@ EAPI void elm_hover_parent_set(Evas_Object *obj, Evas_Object *parent); EAPI Evas_Object *elm_hover_parent_get(Evas_Object *obj); EAPI void elm_hover_content_set(Evas_Object *obj, const char *swallow, Evas_Object *content); + EAPI Evas_Object *elm_hover_content_unset(Evas_Object *obj, const char *swallow); EAPI const char *elm_hover_best_content_location_get(const Evas_Object *obj, Elm_Hover_Axis pref_axis); /* available styles: * default @@ -846,6 +852,7 @@ EAPI const char *elm_bubble_info_get(const Evas_Object *obj); EAPI void elm_bubble_content_set(Evas_Object *obj, Evas_Object *content); + EAPI Evas_Object *elm_bubble_content_unset(Evas_Object *obj); EAPI void elm_bubble_icon_set(Evas_Object *obj, Evas_Object *icon); EAPI Evas_Object *elm_bubble_icon_get(const Evas_Object *obj); EAPI void elm_bubble_corner_set(Evas_Object *obj, const char *corner); @@ -1455,6 +1462,7 @@ EAPI void elm_panel_orient_set(Evas_Object *obj, Elm_Panel_Orient orient); EAPI Elm_Panel_Orient elm_panel_orient_get(Evas_Object *obj); EAPI void elm_panel_content_set(Evas_Object *obj, Evas_Object *content); + EAPI Evas_Object *elm_panel_content_unset(Evas_Object *obj); EAPI void elm_panel_hidden_set(Evas_Object *obj, Eina_Bool hidden); EAPI Eina_Bool elm_panel_hidden_get(Evas_Object *obj); EAPI void elm_panel_toggle(Evas_Object *obj); @@ -1519,9 +1527,12 @@ EAPI Evas_Object *elm_conformant_add(Evas_Object *parent); EAPI void elm_conformant_content_set(Evas_Object *obj, Evas_Object *content); + EAPI Evas_Object *elm_conformant_content_unset(Evas_Object *obj); + EAPI Evas_Object *elm_mapbuf_add(Evas_Object *parent); EAPI void elm_mapbuf_content_set(Evas_Object *obj, Evas_Object *content); + EAPI Evas_Object *elm_mapbuf_content_unset(Evas_Object *obj); EAPI void elm_mapbuf_enabled_set(Evas_Object *obj, Eina_Bool enabled); EAPI Eina_Bool elm_mapbuf_enabled_get(const Evas_Object *obj); EAPI void elm_mapbuf_smooth_set(Evas_Object *obj, Eina_Bool smooth); Modified: trunk/TMP/st/elementary/src/lib/elc_fileselector_button.c =================================================================== --- trunk/TMP/st/elementary/src/lib/elc_fileselector_button.c 2010-06-16 20:58:01 UTC (rev 49705) +++ trunk/TMP/st/elementary/src/lib/elc_fileselector_button.c 2010-06-16 20:58:09 UTC (rev 49706) @@ -695,6 +695,8 @@ /** * Set the icon used for the button * + * Once the icon object is set, a previously set one will be deleted. + * * @param obj The button object * @param icon The image for the button * @@ -706,21 +708,19 @@ ELM_CHECK_WIDTYPE(obj, widtype); Widget_Data *wd = elm_widget_data_get(obj); if (!wd) return; - if ((wd->icon != icon) && (wd->icon)) - elm_widget_sub_object_del(obj, wd->icon); - if ((icon) && (wd->icon != icon)) + if (wd->icon == icon) return; + if (wd->icon) evas_object_del(wd->icon); + wd->icon = icon; + if (icon) { - wd->icon = icon; elm_widget_sub_object_add(obj, icon); evas_object_event_callback_add(icon, EVAS_CALLBACK_CHANGED_SIZE_HINTS, _changed_size_hints, obj); edje_object_part_swallow(wd->btn, "elm.swallow.content", icon); edje_object_signal_emit(wd->btn, "elm,state,icon,visible", "elm"); edje_object_message_signal_process(wd->btn); - _sizing_eval(obj); } - else - wd->icon = icon; + _sizing_eval(obj); } /** Modified: trunk/TMP/st/elementary/src/lib/elm_bubble.c =================================================================== --- trunk/TMP/st/elementary/src/lib/elm_bubble.c 2010-06-16 20:58:01 UTC (rev 49705) +++ trunk/TMP/st/elementary/src/lib/elm_bubble.c 2010-06-16 20:58:09 UTC (rev 49706) @@ -209,13 +209,17 @@ } /** - * Set the text to be showed in the bubble + * Set the content to be shown in the bubble * + * Once the content object is set, a previously set one will be deleted. + * If you want to keep the old content object, use the + * elm_bubble_content_unset() function. + * * @param obj The bubble object - * @param content The given info about the bubble + * @param content The given content of the bubble * - * This function sets the text shown on the top right of bubble. In - * the Anchorblock example of the Elementary tests application it + * This function sets the content shown on the middle of the bubble. + * In the Anchorblock example of the Elementary tests application it * shows time. * * @ingroup Bubble @@ -226,14 +230,13 @@ ELM_CHECK_WIDTYPE(obj, widtype); Widget_Data *wd = elm_widget_data_get(obj); if (!wd) return; - if ((wd->content != content) && (wd->content)) - elm_widget_sub_object_del(obj, wd->content); + if (wd->content == content) return; + if (wd->content) evas_object_del(wd->content); wd->content = content; if (content) { elm_widget_sub_object_add(obj, content); - evas_object_event_callback_add(content, - EVAS_CALLBACK_CHANGED_SIZE_HINTS, + evas_object_event_callback_add(content, EVAS_CALLBACK_CHANGED_SIZE_HINTS, _changed_size_hints, obj); edje_object_part_swallow(wd->bbl, "elm.swallow.content", content); } @@ -241,13 +244,38 @@ } /** + * Unset the content shown in the bubble + * + * Unparent and return the content object which was set for this widget. + * + * @param obj The bubble object + * @return The content that was being used + * + * @ingroup Bubble + */ +EAPI Evas_Object * +elm_bubble_content_unset(Evas_Object *obj) +{ + ELM_CHECK_WIDTYPE(obj, widtype) NULL; + Widget_Data *wd = elm_widget_data_get(obj); + Evas_Object *content; + if (!wd) return NULL; + if (!wd->content) return NULL; + content = wd->content; + elm_widget_sub_object_del(obj, wd->content); + edje_object_part_unswallow(wd->bbl, wd->content); + wd->content = NULL; + return content; +} + +/** * Set the icon of the bubble * + * Once the icon object is set, a previously set one will be deleted. + * * @param obj The bubble object * @param icon The given icon for the bubble * - * This function sets the icon shown on the top left of bubble. - * * @ingroup Bubble */ EAPI void @@ -256,8 +284,8 @@ ELM_CHECK_WIDTYPE(obj, widtype); Widget_Data *wd = elm_widget_data_get(obj); if (!wd) return; - if ((wd->icon != icon) && (wd->icon)) - elm_widget_sub_object_del(obj, wd->icon); + if (wd->icon == icon) return; + if (wd->icon) evas_object_del(wd->icon); wd->icon = icon; if (icon) { @@ -267,8 +295,8 @@ _changed_size_hints, obj); edje_object_signal_emit(wd->bbl, "elm,state,icon,visible", "elm"); edje_object_message_signal_process(wd->bbl); - _sizing_eval(obj); } + _sizing_eval(obj); } /** Modified: trunk/TMP/st/elementary/src/lib/elm_button.c =================================================================== --- trunk/TMP/st/elementary/src/lib/elm_button.c 2010-06-16 20:58:01 UTC (rev 49705) +++ trunk/TMP/st/elementary/src/lib/elm_button.c 2010-06-16 20:58:09 UTC (rev 49706) @@ -18,7 +18,6 @@ { Evas_Object *btn, *icon; const char *label; - Eina_Bool autorepeat; Eina_Bool repeating; double ar_threshold; @@ -305,8 +304,10 @@ /** * Set the icon used for the button * + * Once the icon object is set, a previously set one will be deleted + * * @param obj The button object - * @param icon The image for the button + * @param icon The image for the button * * @ingroup Button */ @@ -316,21 +317,19 @@ ELM_CHECK_WIDTYPE(obj, widtype); Widget_Data *wd = elm_widget_data_get(obj); if (!wd) return; - if ((wd->icon != icon) && (wd->icon)) - elm_widget_sub_object_del(obj, wd->icon); - if ((icon) && (wd->icon != icon)) + if (wd->icon == icon) return; + if (wd->icon) evas_object_del(wd->icon); + wd->icon = icon; + if (icon) { - wd->icon = icon; elm_widget_sub_object_add(obj, icon); evas_object_event_callback_add(icon, EVAS_CALLBACK_CHANGED_SIZE_HINTS, _changed_size_hints, obj); edje_object_part_swallow(wd->btn, "elm.swallow.content", icon); edje_object_signal_emit(wd->btn, "elm,state,icon,visible", "elm"); edje_object_message_signal_process(wd->btn); - _sizing_eval(obj); } - else - wd->icon = icon; + _sizing_eval(obj); } /** Modified: trunk/TMP/st/elementary/src/lib/elm_check.c =================================================================== --- trunk/TMP/st/elementary/src/lib/elm_check.c 2010-06-16 20:58:01 UTC (rev 49705) +++ trunk/TMP/st/elementary/src/lib/elm_check.c 2010-06-16 20:58:09 UTC (rev 49706) @@ -127,6 +127,7 @@ _changed_size_hints, obj); wd->icon = NULL; _sizing_eval(obj); + edje_object_message_signal_process(wd->chk); } } @@ -256,10 +257,7 @@ /** * Set the icon object of the check object * - * Once the icon object is set, it will become a child of the check object and - * be deleted when the check object is deleted. If another icon object is set - * then the previous one becomes orophaned and will no longer be deleted along - * with the check. + * Once the icon object is set, a previously set one will be deleted. * * @param obj The check object * @param icon The icon object @@ -272,8 +270,8 @@ ELM_CHECK_WIDTYPE(obj, widtype); Widget_Data *wd = elm_widget_data_get(obj); if (!wd) return; - if ((wd->icon != icon) && (wd->icon)) - elm_widget_sub_object_del(obj, wd->icon); + if (wd->icon == icon) return; + if (wd->icon) evas_object_del(wd->icon); wd->icon = icon; if (icon) { @@ -282,8 +280,9 @@ _changed_size_hints, obj); edje_object_part_swallow(wd->chk, "elm.swallow.content", icon); edje_object_signal_emit(wd->chk, "elm,state,icon,visible", "elm"); - _sizing_eval(obj); + edje_object_message_signal_process(wd->chk); } + _sizing_eval(obj); } /** Modified: trunk/TMP/st/elementary/src/lib/elm_conform.c =================================================================== --- trunk/TMP/st/elementary/src/lib/elm_conform.c 2010-06-16 20:58:01 UTC (rev 49705) +++ trunk/TMP/st/elementary/src/lib/elm_conform.c 2010-06-16 20:58:09 UTC (rev 49706) @@ -268,28 +268,56 @@ /** * Set the content of the conformant widget - * + * + * Once the content object is set, a previously set one will be deleted. + * If you want to keep that old content object, use the + * elm_conformat_content_unset() function. + * * @param obj The conformant object - * @param content The content that will be used inside this conformant object - * + * @return The content that was being used + * * @ingroup Conformant */ -EAPI void -elm_conformant_content_set(Evas_Object *obj, Evas_Object *content) +EAPI void +elm_conformant_content_set(Evas_Object *obj, Evas_Object *content) { ELM_CHECK_WIDTYPE(obj, widtype); Widget_Data *wd = elm_widget_data_get(obj); if (!wd) return; - if ((wd->content != content) && (wd->content)) - elm_widget_sub_object_del(obj, wd->content); + if (wd->content == content) return; + if (wd->content) evas_object_del(wd->content); wd->content = content; - if (content) + if (content) { - elm_widget_sub_object_add(obj, content); - evas_object_event_callback_add(content, - EVAS_CALLBACK_CHANGED_SIZE_HINTS, - _changed_size_hints, obj); - edje_object_part_swallow(wd->base, "elm.swallow.content", content); - _sizing_eval(obj); + elm_widget_sub_object_add(obj, content); + evas_object_event_callback_add(content, EVAS_CALLBACK_CHANGED_SIZE_HINTS, + _changed_size_hints, obj); + edje_object_part_swallow(wd->base, "elm.swallow.content", content); } + _sizing_eval(obj); } + +/** + * Unset the content of the conformant widget + * + * Unparent and return the content object which was set for this widget; + * + * @param obj The conformant object + * @return The content that was being used + * + * @ingroup Conformant + */ +EAPI Evas_Object * +elm_conformant_content_unset(Evas_Object *obj) +{ + ELM_CHECK_WIDTYPE(obj, widtype) NULL; + Widget_Data *wd = elm_widget_data_get(obj); + Evas_Object *content; + if (!wd) return NULL; + if (!wd->content) return NULL; + content = wd->content; + elm_widget_sub_object_del(obj, wd->content); + edje_object_part_unswallow(wd->base, wd->content); + wd->content = NULL; + return content; +} Modified: trunk/TMP/st/elementary/src/lib/elm_frame.c =================================================================== --- trunk/TMP/st/elementary/src/lib/elm_frame.c 2010-06-16 20:58:01 UTC (rev 49705) +++ trunk/TMP/st/elementary/src/lib/elm_frame.c 2010-06-16 20:58:09 UTC (rev 49706) @@ -152,8 +152,12 @@ } /** - * Set the frame content + * Set the content of the frame widget * + * Once the content object is set, a previously set one will be deleted. + * If you want to keep that old content object, use the + * elm_frame_content_unset() function. + * * @param obj The frame object * @param content The content will be filled in this frame object * @@ -165,16 +169,40 @@ ELM_CHECK_WIDTYPE(obj, widtype); Widget_Data *wd = elm_widget_data_get(obj); if (!wd) return; - if ((wd->content != content) && (wd->content)) - elm_widget_sub_object_del(obj, wd->content); + if (wd->content == content) return; + if (wd->content) evas_object_del(wd->content); wd->content = content; if (content) { elm_widget_sub_object_add(obj, content); - evas_object_event_callback_add(content, - EVAS_CALLBACK_CHANGED_SIZE_HINTS, + evas_object_event_callback_add(content, EVAS_CALLBACK_CHANGED_SIZE_HINTS, _changed_size_hints, obj); edje_object_part_swallow(wd->frm, "elm.swallow.content", content); - _sizing_eval(obj); } + _sizing_eval(obj); } + +/** + * Unset the content of the frame widget + * + * Unparent and return the content object which was set for this widget + * + * @param obj The frame object + * @return The content that was being used + * + * @ingroup Frame + */ +EAPI Evas_Object * +elm_frame_content_unset(Evas_Object *obj) +{ + ELM_CHECK_WIDTYPE(obj, widtype) NULL; + Widget_Data *wd = elm_widget_data_get(obj); + Evas_Object *content; + if (!wd) return NULL; + if (!wd->content) NULL; + content = wd->content; + elm_widget_sub_object_del(obj, wd->content); + edje_object_part_unswallow(wd->frm, wd->content); + wd->content = NULL; + return content; +} Modified: trunk/TMP/st/elementary/src/lib/elm_hover.c =================================================================== --- trunk/TMP/st/elementary/src/lib/elm_hover.c 2010-06-16 20:58:01 UTC (rev 49705) +++ trunk/TMP/st/elementary/src/lib/elm_hover.c 2010-06-16 20:58:09 UTC (rev 49706) @@ -426,6 +426,10 @@ * Sets the content of the hover object and the direction in which * it will pop out. * + * Once the content object is set, a previously set one will be deleted. + * If you want to keep that old content object, use the + * elm_hover_content_unset() function. + * * @param obj The hover object * @param swallow The direction that the object will display in. Multiple * objects can have the same swallow location. Objects placed in the same @@ -451,7 +455,8 @@ if (!strcmp(buf, si->swallow)) { if (content == si->obj) return; - elm_widget_sub_object_del(obj, si->obj); + evas_object_del(si->obj); + si->obj = NULL; break; } } @@ -463,11 +468,52 @@ si->swallow = eina_stringshare_add(buf); si->obj = content; wd->subs = eina_list_append(wd->subs, si); - _sizing_eval(obj); } + _sizing_eval(obj); } /** + * Unset the content of the hover object + * + * Unparent and return the content object which was set for this widget + * + * @param obj The hover object + * @param swallow The direction that the object will display in. Multiple + * objects can have the same swallow location. Objects placed in the same + * swallow will be placed starting at the middle of the hover and ending + * farther from the middle. + * Accepted values are "left" "right" "top" "bottom" "middle" + * @return The content that was being used + * + * @ingroup Hover + */ +EAPI Evas_Object * +elm_hover_content_unset(Evas_Object *obj, const char *swallow) +{ + ELM_CHECK_WIDTYPE(obj, widtype); + Widget_Data *wd = elm_widget_data_get(obj); + Subinfo *si; + Evas_Object *content; + const Eina_List *l; + char buf[1024]; + if (!wd) return NULL; + snprintf(buf, sizeof(buf), "elm.swallow.slot.%s", swallow); + EINA_LIST_FOREACH(wd->subs, l, si) + { + if (!strcmp(buf, si->swallow)) + { + if (!si->obj) return NULL; + content = si->obj; + elm_widget_sub_object_del(obj, si->obj); + edje_object_part_unswallow(wd->cov, si->obj); + si->obj = NULL; + break; + } + } + return content; +} + +/** * Returns the best swallow location for content in the hover. * * @param obj The hover object Modified: trunk/TMP/st/elementary/src/lib/elm_layout.c =================================================================== --- trunk/TMP/st/elementary/src/lib/elm_layout.c 2010-06-16 20:58:01 UTC (rev 49705) +++ trunk/TMP/st/elementary/src/lib/elm_layout.c 2010-06-16 20:58:09 UTC (rev 49706) @@ -211,6 +211,10 @@ /** * Set the layout content * + * Once the content object is set, a previously set one will be deleted. + * If you want to keep that old content object, use the + * elm_layout_content_unset() function. + * * @param obj The layout object * @param swallow The swallow group name in the edje file * @param content The content will be filled in this layout object @@ -230,7 +234,8 @@ if (!strcmp(swallow, si->swallow)) { if (content == si->obj) return; - elm_widget_sub_object_del(obj, si->obj); + evas_object_del(si->obj); + si->obj = NULL; break; } } @@ -245,11 +250,46 @@ si->swallow = eina_stringshare_add(swallow); si->obj = content; wd->subs = eina_list_append(wd->subs, si); - _request_sizing_eval(obj); } + _request_sizing_eval(obj); } /** + * Unset the layout content + * + * Unparent and return the content object which was set for this widget + * + * @param obj The layout object + * @param swallow The swallow group name in the edje file + * @return The content that was being used + * + * @ingroup Layout + */ +EAPI Evas_Object * +elm_layout_content_unset(Evas_Object *obj, const char *swallow) +{ + ELM_CHECK_WIDTYPE(obj, widtype) NULL; + Widget_Data *wd = elm_widget_data_get(obj); + Subinfo *si; + Evas_Object *content; + const Eina_List *l; + if (!wd) return NULL; + EINA_LIST_FOREACH(wd->subs, l, si) + { + if (!strcmp(swallow, si->swallow)) + { + if (!si->obj) return NULL; + content == si->obj; + elm_widget_sub_object_del(obj, si->obj); + edje_object_part_unswallow(wd->lay, si->obj); + si->obj = NULL; + break; + } + } + return content; +} + +/** * Get the edje layout * * @param obj The layout object Modified: trunk/TMP/st/elementary/src/lib/elm_list.c =================================================================== --- trunk/TMP/st/elementary/src/lib/elm_list.c 2010-06-16 20:58:01 UTC (rev 49705) +++ trunk/TMP/st/elementary/src/lib/elm_list.c 2010-06-16 20:58:09 UTC (rev 49706) @@ -1296,6 +1296,10 @@ /** * Sets the left side icon associated with the item. * + * Once the icon object is set, a previously set one will be deleted. + * You probably don't want, then, to have the <b>same</b> icon object set + * for more than one item of the list. + * * @param it The list item * @param icon The left side icon object to associate with @p it * @@ -1307,13 +1311,22 @@ ELM_LIST_ITEM_CHECK_DELETED_RETURN(it); if (it->icon == icon) return; if (it->dummy_icon && !icon) return; - if (it->dummy_icon) evas_object_del(it->icon); + if (it->dummy_icon) + { + evas_object_del(it->icon); + it->dummy_icon = EINA_FALSE; + } if (!icon) { icon = evas_object_rectangle_add(evas_object_evas_get(it->obj)); evas_object_color_set(icon, 0, 0, 0, 0); it->dummy_icon = EINA_TRUE; } + if (it->icon) + { + evas_object_del(it->icon); + it->icon = NULL; + } it->icon = icon; if (it->base) edje_object_part_swallow(it->base, "elm.swallow.icon", icon); @@ -1336,8 +1349,12 @@ } /** - * Gets the right side icon associated with the item. + * Sets the right side icon associated with the item. * + * Once the icon object is set, a previously set one will be deleted. + * You probably don't want, then, to have the <b>same</b> icon object set + * for more than one item of the list. + * * @param it The list item * @param icon The right side icon object to associate with @p it * @@ -1349,13 +1366,22 @@ ELM_LIST_ITEM_CHECK_DELETED_RETURN(it); if (it->end == end) return; if (it->dummy_end && !end) return; - if (it->dummy_end) evas_object_del(it->end); + if (it->dummy_end) + { + evas_object_del(it->end); + it->dummy_icon = EINA_FALSE; + } if (!end) { end = evas_object_rectangle_add(evas_object_evas_get(it->obj)); evas_object_color_set(end, 0, 0, 0, 0); it->dummy_end = EINA_TRUE; } + if (it->end) + { + evas_object_del(it->end); + it->end = NULL; + } it->end = end; if (it->base) edje_object_part_swallow(it->base, "elm.swallow.end", end); Modified: trunk/TMP/st/elementary/src/lib/elm_mapbuf.c =================================================================== --- trunk/TMP/st/elementary/src/lib/elm_mapbuf.c 2010-06-16 20:58:01 UTC (rev 49705) +++ trunk/TMP/st/elementary/src/lib/elm_mapbuf.c 2010-06-16 20:58:09 UTC (rev 49706) @@ -175,6 +175,10 @@ /** * Set the mapbuf front content * + * Once the content object is set, a previously set one will be deleted. + * If you want to keep that old content object, use the + * elm_mapbuf_content_unset() function. + * * @param obj The mapbuf object * @param content The content will be filled in this mapbuf object * @@ -187,25 +191,45 @@ Widget_Data *wd = elm_widget_data_get(obj); if (!wd) return; if (wd->content == content) return; - if ((wd->content != content) && (wd->content)) - { - elm_widget_sub_object_del(obj, wd->content); - evas_object_smart_member_del(wd->content); - } + if (wd->content) evas_object_del(wd->content); wd->content = content; if (content) { elm_widget_sub_object_add(content, obj); - evas_object_smart_member_add(content, obj); - evas_object_event_callback_add(content, - EVAS_CALLBACK_CHANGED_SIZE_HINTS, + evas_object_smart_member_add(content, obj); + evas_object_event_callback_add(content, EVAS_CALLBACK_CHANGED_SIZE_HINTS, _changed_size_hints, obj); - _sizing_eval(obj); } + _sizing_eval(obj); _configure(obj); } /** + * Unset the mapbuf front content + * + * Unparent and return the content object which was set for this widget. + * + * @param obj The mapbuf object + * @return The content that was being used + * + * @ingroup Mapbuf + */ +EAPI Evas_Object * +elm_mapbuf_content_unset(Evas_Object *obj) +{ + ELM_CHECK_WIDTYPE(obj, widtype) NULL; + Widget_Data *wd = elm_widget_data_get(obj); + Evas_Object *content; + if (!wd) return NULL; + if (!wd->content) return NULL; + content = wd->content; + elm_widget_sub_object_del(obj, wd->content); + evas_object_smart_member_del(wd->content); + wd->content = NULL; + return content; +} + +/** * Set the mapbuf enabled state * * @param obj The mapbuf object Modified: trunk/TMP/st/elementary/src/lib/elm_menu.c =================================================================== --- trunk/TMP/st/elementary/src/lib/elm_menu.c 2010-06-16 20:58:01 UTC (rev 49705) +++ trunk/TMP/st/elementary/src/lib/elm_menu.c 2010-06-16 20:58:09 UTC (rev 49706) @@ -80,7 +80,6 @@ ll = eina_list_append(ll, item->items); if (item->del_cb) item->del_cb((void*)item->data, item->o, item); if (item->label) eina_stringshare_del(item->label); - if (item->icon) evas_object_del(item->icon); if (item->hv) evas_object_del(item->hv); if (item->location) evas_object_del(item->location); free(item); @@ -597,6 +596,8 @@ /** * Set the icon of a menu item * + * Once the icon object is set, a previously set one will be deleted. + * * @param it The menu item object. * @param icon The icon object to set for @p item * @@ -605,24 +606,21 @@ EAPI void elm_menu_item_icon_set(Elm_Menu_Item *item, Evas_Object *icon) { - if ((item->icon != icon) && (item->icon)) - elm_widget_sub_object_del(item->menu, item->icon); - if ((icon) && (item->icon != icon)) + if(item->icon == icon) return; + if (item->icon) evas_object_del(item->icon); + item->icon = icon; + if (icon) { - item->icon = icon; elm_widget_sub_object_add(item->menu, icon); evas_object_event_callback_add(icon, EVAS_CALLBACK_CHANGED_SIZE_HINTS, - _changed_size_hints, item->menu); + _changed_size_hints, item->menu); edje_object_part_swallow(item->o, "elm.swallow.content", icon); edje_object_signal_emit(item->o, "elm,state,icon,visible", "elm"); edje_object_message_signal_process(item->o); - _sizing_eval(item->menu); } - else - item->icon = icon; + _sizing_eval(item->menu); } - /** * Set the disabled state of @p item. * Modified: trunk/TMP/st/elementary/src/lib/elm_notify.c =================================================================== --- trunk/TMP/st/elementary/src/lib/elm_notify.c 2010-06-16 20:58:01 UTC (rev 49705) +++ trunk/TMP/st/elementary/src/lib/elm_notify.c 2010-06-16 20:58:09 UTC (rev 49706) @@ -54,7 +54,6 @@ { Widget_Data *wd = elm_widget_data_get(obj); if (!wd) return; - elm_notify_content_set(obj, NULL); elm_notify_parent_set(obj, NULL); elm_notify_repeat_events_set(obj, EINA_TRUE); if (wd->timer) @@ -100,8 +99,16 @@ _sub_del(void *data __UNUSED__, Evas_Object *obj, void *event_info) { Widget_Data *wd = elm_widget_data_get(obj); + Evas_Object *sub = event_info; if (!wd) return; - if (event_info == wd->content) wd->content = NULL; + if (sub == wd->content) + { + evas_object_event_callback_del_full(sub, EVAS_CALLBACK_CHANGED_SIZE_HINTS, + _changed_size_hints, obj); + evas_object_event_callback_del_full(sub, EVAS_CALLBACK_RESIZE, + _content_resize, obj); + wd->content = NULL; + } } static void @@ -279,8 +286,12 @@ } /** - * Set the notify content + * Set the content of the notify widget * + * Once the content object is set, a previously set one will be deleted. + * If you want to keep that old content object, use the + * elm_notify_content_unset() function. + * * @param obj The notify object * @param content The content will be filled in this notify object * @@ -292,34 +303,48 @@ ELM_CHECK_WIDTYPE(obj, widtype); Widget_Data *wd = elm_widget_data_get(obj); if (!wd) return; - if (wd->content) - { - evas_object_event_callback_del_full(wd->content, - EVAS_CALLBACK_CHANGED_SIZE_HINTS, - _changed_size_hints, obj); - evas_object_event_callback_del_full(wd->content, EVAS_CALLBACK_RESIZE, - _content_resize, obj); - evas_object_del(wd->content); - wd->content = NULL; - } - + if (wd->content == content) return; + if (wd->content) evas_object_del(wd->content); + wd->content = content; if (content) { elm_widget_sub_object_add(obj, content); - wd->content = content; - evas_object_event_callback_add(content, - EVAS_CALLBACK_CHANGED_SIZE_HINTS, - _changed_size_hints, obj); + evas_object_event_callback_add(content, EVAS_CALLBACK_CHANGED_SIZE_HINTS, + _changed_size_hints, obj); evas_object_event_callback_add(content, EVAS_CALLBACK_RESIZE, - _content_resize, obj); + _content_resize, obj); edje_object_part_swallow(wd->notify, "elm.swallow.content", content); - - _sizing_eval(obj); } + _sizing_eval(obj); _calc(obj); } /** + * Unset the content of the notify widget + * + * Unparent and return the content object which was set for this widget + * + * @param obj The notify object + * @return The content that was being used + * + * @ingroup Notify + */ +EAPI Evas_Object * +elm_notify_content_unset(Evas_Object *obj) +{ + ELM_CHECK_WIDTYPE(obj, widtype) NULL; + Widget_Data *wd = elm_widget_data_get(obj); + Evas_Object *content; + if (!wd) return NULL; + if (!wd->content) return NULL; + content = wd->content; + elm_widget_sub_object_del(obj, wd->content); + edje_object_part_unswallow(wd->notify, wd->content); + wd->content = NULL; + return content; +} + +/** * Set the notify parent * * @param obj The notify object Modified: trunk/TMP/st/elementary/src/lib/elm_panel.c =================================================================== --- trunk/TMP/st/elementary/src/lib/elm_panel.c 2010-06-16 20:58:01 UTC (rev 49705) +++ trunk/TMP/st/elementary/src/lib/elm_panel.c 2010-06-16 20:58:09 UTC (rev 49706) @@ -20,7 +20,7 @@ typedef struct _Widget_Data Widget_Data; struct _Widget_Data { - Evas_Object *scr, *bx; + Evas_Object *scr, *bx, *content; Elm_Panel_Orient orient; Eina_Bool hidden : 1; }; @@ -235,25 +235,58 @@ /** * Set the content of the panel. * + * Once the content object is set, a previously set one will be deleted. + * If you want to keep that old content object, use the + * elm_panel_content_unset() function. + * * @param obj The panel object * @param content The panel content * * @ingroup Panel */ -EAPI void -elm_panel_content_set(Evas_Object *obj, Evas_Object *content) +EAPI void +elm_panel_content_set(Evas_Object *obj, Evas_Object *content) { ELM_CHECK_WIDTYPE(obj, widtype); Widget_Data *wd = elm_widget_data_get(obj); if (!wd) return; - evas_object_box_remove_all(wd->bx, EINA_TRUE); - if (!content) return; - evas_object_box_append(wd->bx, content); - evas_object_show(content); + if (wd->content == content) return; + if (wd->content) + evas_object_box_remove_all(wd->bx, EINA_TRUE); + wd->content = content; + if (content) + { + evas_object_box_append(wd->bx, wd->content); + evas_object_show(wd->content); + } _sizing_eval(obj); } /** + * Unset the content of the panel. + * + * Unparent and return the content object which was set for this widget. + * + * @param obj The panel object + * @return The content that was being used + * + * @ingroup Panel + */ +EAPI Evas_Object * +elm_panel_content_unset(Evas_Object *obj) +{ + ELM_CHECK_WIDTYPE(obj, widtype) NULL; + Widget_Data *wd = elm_widget_data_get(obj); + Evas_Object *content; + if (!wd) return NULL; + if (!wd->content) return NULL; + content = wd->content; + evas_object_box_remove_all(wd->bx, EINA_FALSE); + wd->content = NULL; + return content; +} + +/** * Set the state of the panel. * * @param obj The panel object Modified: trunk/TMP/st/elementary/src/lib/elm_progressbar.c =================================================================== --- trunk/TMP/st/elementary/src/lib/elm_progressbar.c 2010-06-16 20:58:01 UTC (rev 49705) +++ trunk/TMP/st/elementary/src/lib/elm_progressbar.c 2010-06-16 20:58:09 UTC (rev 49706) @@ -139,6 +139,7 @@ evas_object_event_callback_del_full (sub, EVAS_CALLBACK_CHANGED_SIZE_HINTS, _changed_size_hints, obj); wd->icon = NULL; + edje_object_message_signal_process(wd->progressbar); _sizing_eval(obj); } } @@ -372,10 +373,7 @@ /** * Set the icon object of the progressbar object * - * Once the icon object is set, it will become a child of the progressbar object and - * be deleted when the progressbar object is deleted. If another icon object is set - * then the previous one becomes orophaned and will no longer be deleted along - * with the progressbar. + * Once the icon object is set, a previously set one will be deleted. * * @param obj The progressbar object * @param icon The icon object @@ -388,8 +386,8 @@ ELM_CHECK_WIDTYPE(obj, widtype); Widget_Data *wd = elm_widget_data_get(obj); if (!wd) return; - if ((wd->icon != icon) && (wd->icon)) - elm_widget_sub_object_del(obj, wd->icon); + if (wd->icon == icon) return; + if (wd->icon) evas_object_del(wd->icon); wd->icon = icon; if (icon) { @@ -398,8 +396,9 @@ _changed_size_hints, obj); edje_object_part_swallow(wd->progressbar, "elm.swallow.content", icon); edje_object_signal_emit(wd->progressbar, "elm,state,icon,visible", "elm"); - _sizing_eval(obj); + edje_object_message_signal_process(wd->progressbar); } + _sizing_eval(obj); } /** Modified: trunk/TMP/st/elementary/src/lib/elm_radio.c =================================================================== --- trunk/TMP/st/elementary/src/lib/elm_radio.c 2010-06-16 20:58:01 UTC (rev 49705) +++ trunk/TMP/st/elementary/src/lib/elm_radio.c 2010-06-16 20:58:09 UTC (rev 49706) @@ -296,10 +296,7 @@ /** * Set the icon object of the radio object * - * Once the icon object is set, it will become a child of the radio object and - * be deleted when the radio object is deleted. If another icon object is set - * then the previous one becomes orophaned and will no longer be deleted along - * with the radio. + * Once the icon object is set, a previously set one will be deleted. * * @param obj The radio object * @param icon The icon object @@ -312,8 +309,8 @@ ELM_CHECK_WIDTYPE(obj, widtype); Widget_Data *wd = elm_widget_data_get(obj); if (!wd) return; - if ((wd->icon != icon) && (wd->icon)) - elm_widget_sub_object_del(obj, wd->icon); + if (wd->icon == icon) return; + if (wd->icon) evas_object_del(wd->icon); wd->icon = icon; if (icon) { @@ -322,8 +319,9 @@ _changed_size_hints, obj); edje_object_part_swallow(wd->radio, "elm.swallow.content", icon); edje_object_signal_emit(wd->radio, "elm,state,icon,visible", "elm"); - _sizing_eval(obj); + edje_object_message_signal_process(wd->radio); } + _sizing_eval(obj); } /** Modified: trunk/TMP/st/elementary/src/lib/elm_scroller.c =================================================================== --- trunk/TMP/st/elementary/src/lib/elm_scroller.c 2010-06-16 20:58:01 UTC (rev 49705) +++ trunk/TMP/st/elementary/src/lib/elm_scroller.c 2010-06-16 20:58:09 UTC (rev 49706) @@ -75,7 +75,6 @@ static void _del_hook(Evas_Object *obj) { - Widget_Data *wd = elm_widget_data_get(obj); if (!wd) return; free(wd); @@ -353,9 +352,11 @@ /** - * Set the content object + * Set the content of the scroller widget (the object to be scrolled around). * - * Sets the content of the scroller (the object to be scrolled around) + * Once the content object is set, a previously set one will be deleted. + * If you want to keep that old content object, use the + * elm_scroller_content_unset() function. * * @param obj The scroller object * @param content The new content object @@ -368,8 +369,8 @@ ELM_CHECK_WIDTYPE(obj, widtype); Widget_Data *wd = elm_widget_data_get(obj); if (!wd) return; - if ((wd->content != content) && (wd->content)) - elm_widget_sub_object_del(obj, wd->content); + if (wd->content == content) return; + if (wd->content) evas_object_del(wd->content); wd->content = content; if (content) { @@ -379,16 +380,43 @@ elm_smart_scroller_child_set(wd->scr, content); evas_object_event_callback_add(content, EVAS_CALLBACK_CHANGED_SIZE_HINTS, _changed_size_hints, obj); - _sizing_eval(obj); } + _sizing_eval(obj); } /** + * Unset the content of the scroller widget + * + * Unparent and return the content object which was set for this widget + * + * @param obj The slider objecet + * @return The content that was being used + * + * @ingroup Scroller + */ +EAPI Evas_Object * +elm_scroller_content_unset(Evas_Object *obj) +{ + ELM_CHECK_WIDTYPE(obj, widtype) NULL; + Widget_Data *wd = elm_widget_data_get(obj); + Evas_Object *content; + if (!wd) return NULL; + if (!wd->content) return NULL; + content = wd->content; + elm_widget_sub_object_del(obj, wd->content); + edje_object_part_unswallow(wd->scr, wd->content); + wd->content = NULL; + return content; +} + +/** * Set custom theme elements for the scroller * * @param obj The scroller object * @param widget The widget name to use (default is "scroller") * @param base The base name to use (default is "base") + * + * @ingroup Scroller */ EAPI void elm_scroller_custom_widget_base_theme_set(Evas_Object *obj, const char *widget, const char *base) Modified: trunk/TMP/st/elementary/src/lib/elm_slider.c =================================================================== --- trunk/TMP/st/elementary/src/lib/elm_slider.c 2010-06-16 20:58:01 UTC (rev 49705) +++ trunk/TMP/st/elementary/src/lib/elm_slider.c 2010-06-16 20:58:09 UTC (rev 49706) @@ -160,6 +160,7 @@ evas_object_event_callback_del_full (sub, EVAS_CALLBACK_CHANGED_SIZE_HINTS, _changed_size_hints, obj); wd->icon = NULL; + edje_object_message_signal_process(wd->slider); _sizing_eval(obj); } } @@ -396,10 +397,7 @@ /** * Set the icon object of the slider object * - * Once the icon object is set, it will become a child of the slider object and - * be deleted when the slider object is deleted. If another icon object is set - * then the previous one becomes orophaned and will no longer be deleted along - * with the slider. + * Once the icon object is set, a previously set one will be deleted. * * @param obj The slider object * @param icon The icon object @@ -412,8 +410,8 @@ ELM_CHECK_WIDTYPE(obj, widtype); Widget_Data *wd = elm_widget_data_get(obj); if (!wd) return; - if ((wd->icon != icon) && (wd->icon)) - elm_widget_sub_object_del(obj, wd->icon); + if (wd->icon == icon) return; + if (wd->icon) evas_object_del(wd->icon); wd->icon = icon; if (icon) { @@ -422,8 +420,9 @@ _changed_size_hints, obj); edje_object_part_swallow(wd->slider, "elm.swallow.content", icon); edje_object_signal_emit(wd->slider, "elm,state,icon,visible", "elm"); - _sizing_eval(obj); + edje_object_message_signal_process(wd->slider); } + _sizing_eval(obj); } /** Modified: trunk/TMP/st/elementary/src/lib/elm_toggle.c =================================================================== --- trunk/TMP/st/elementary/src/lib/elm_toggle.c 2010-06-16 20:58:01 UTC (rev 49705) +++ trunk/TMP/st/elementary/src/lib/elm_toggle.c 2010-06-16 20:58:09 UTC (rev 49706) @@ -125,6 +125,7 @@ evas_object_event_callback_del_full (sub, EVAS_CALLBACK_CHANGED_SIZE_HINTS, _changed_size_hints, obj); wd->icon = NULL; + edje_object_message_signal_process(wd->tgl); _sizing_eval(obj); } } @@ -242,6 +243,8 @@ /** * Sets the icon to be displayed with the toggle. * + * Once the icon object is set, a previously set one will be deleted. + * * @param obj The toggle object * @param icon The icon object to be displayed * @@ -253,15 +256,18 @@ ELM_CHECK_WIDTYPE(obj, widtype); Widget_Data *wd = elm_widget_data_get(obj); if (!wd) return; - if ((wd->icon != icon) && (wd->icon)) - elm_widget_sub_object_del(obj, wd->icon); + if (wd->icon == icon) return; + if (wd->icon) evas_object_del(wd->icon); wd->icon = icon; - if (!icon) return; - elm_widget_sub_object_add(obj, icon); - evas_object_event_callback_add(icon, EVAS_CALLBACK_CHANGED_SIZE_HINTS, - _changed_size_hints, obj); - edje_object_part_swallow(wd->tgl, "elm.swallow.content", icon); - edje_object_signal_emit(wd->tgl, "elm,state,icon,visible", "elm"); + if (icon) + { + elm_widget_sub_object_add(obj, icon); + evas_object_event_callback_add(icon, EVAS_CALLBACK_CHANGED_SIZE_HINTS, + _changed_size_hints, obj); + edje_object_part_swallow(wd->tgl, "elm.swallow.content", icon); + edje_object_signal_emit(wd->tgl, "elm,state,icon,visible", "elm"); + edje_object_message_signal_process(wd->tgl); + } _sizing_eval(obj); } Modified: trunk/TMP/st/elementary/src/lib/elm_win.c =================================================================== --- trunk/TMP/st/elementary/src/lib/elm_win.c 2010-06-16 20:58:01 UTC (rev 49705) +++ trunk/TMP/st/elementary/src/lib/elm_win.c 2010-06-16 20:58:09 UTC (rev 49706) @@ -1583,6 +1583,7 @@ _del_hook(Evas_Object *obj) { Widget_Data *wd = elm_widget_data_get(obj); + if (!wd) return; free(wd); } @@ -1688,6 +1689,10 @@ /** * Set the content of an inwin object. * + * Once the content object is set, a previously set one will be deleted. + * If you want to keep that old content object, use the + * elm_win_inwin_content_unset() function. + * * @param obj The inwin object * @param content The object to set as content * @@ -1699,8 +1704,8 @@ ELM_CHECK_WIDTYPE(obj, widtype2); Widget_Data *wd = elm_widget_data_get(obj); if (!wd) return; - if ((wd->content) && (wd->content != content)) - elm_widget_sub_object_del(obj, wd->content); + if (wd->content == content) return; + if (wd->content) evas_object_del(wd->content); wd->content = content; if (content) { @@ -1708,10 +1713,34 @@ evas_object_event_callback_add(content, EVAS_CALLBACK_CHANGED_SIZE_HINTS, _changed_size_hints, obj); edje_object_part_swallow(wd->frm, "elm.swallow.content", content); - _sizing_eval(obj); } + _sizing_eval(obj); } +/** + * Unset the content of an inwin object. + * + * Unparent and return the content object which was set for this widget. + * + * @param obj The inwin object + * @return The content that was being used + * + * @ingroup Inwin + */ +EAPI Evas_Object * +elm_win_inwin_content_unset(Evas_Object *obj) +{ + ELM_CHECK_WIDTYPE(obj, widtype2) NULL; + Widget_Data *wd = elm_widget_data_get(obj); + if (!wd) return NULL; + if (!wd->content) return NULL; + Evas_Object *content = wd->content; + elm_widget_sub_object_del(obj, wd->content); + edje_object_part_unswallow(wd->frm, wd->content); + wd->content = NULL; + return content; +} + /* windowing spcific calls - shall we do this differently? */ /** * Get the Ecore_X_Window of an Evas_Object |