From: Jonathan Atton Date: Sun, 1 Aug 2010 17:29:20 +0000 (+0000) Subject: Elementary: X-Git-Tag: v1.0.0~4435 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=d5931d33e08361a3231f1eb7c864d133819539c9;p=platform%2Fupstream%2Felementary.git Elementary: - we can get the content of a external object - a signal can be send to the content of a external object SVN revision: 50731 --- diff --git a/src/edje_externals/elm.c b/src/edje_externals/elm.c index b2a815e..af91e60 100644 --- a/src/edje_externals/elm.c +++ b/src/edje_externals/elm.c @@ -4,9 +4,39 @@ int _elm_log_dom = -1; void -external_signal(void *data __UNUSED__, Evas_Object *obj __UNUSED__, const char *signal, const char *source) +external_signal(void *data __UNUSED__, Evas_Object *obj, const char *signal, const char *source) { - printf("External Signal received: '%s' '%s'\n", signal, source); + char *_signal = strdup(signal); + char *p = _signal; + Evas_Object *content; + + while((*p!='\0') && (*p!=']')) + p++; + + + if((*p=='\0') || (*(p+1)!=':')) + { + ERR("Invalid External Signal received: '%s' '%s'\n", signal, source); + free(_signal); + return ; + } + + *p = '\0'; + p+=2; //jump ']' and ':' + + Edje_External_Type *type = evas_object_data_get(obj, "Edje_External_Type"); + if (!type->content_get) + { + ERR("external type '%s' from module '%s' does not provide content_get()", + type->module_name, type->module); + free(_signal); + return ; + } + + content = type->content_get(type->data, obj, _signal); + free(_signal); + if(content) + edje_object_signal_emit(content, signal + (p - _signal), source); } const char * diff --git a/src/edje_externals/elm_anchorblock.c b/src/edje_externals/elm_anchorblock.c index cb5dc91..0e0c2eb 100644 --- a/src/edje_externals/elm_anchorblock.c +++ b/src/edje_externals/elm_anchorblock.c @@ -76,6 +76,13 @@ external_anchorblock_params_parse(void *data __UNUSED__, Evas_Object *obj __UNUS return mem; } +static Evas_Object *external_anchorblock_content_get(void *data __UNUSED__, + const Evas_Object *obj, const char *content) +{ + ERR("so content"); + return NULL; +} + static void external_anchorblock_params_free(void *params) { diff --git a/src/edje_externals/elm_anchorview.c b/src/edje_externals/elm_anchorview.c index 88ebdff..f4f3d9a 100644 --- a/src/edje_externals/elm_anchorview.c +++ b/src/edje_externals/elm_anchorview.c @@ -76,6 +76,13 @@ external_anchorview_params_parse(void *data __UNUSED__, Evas_Object *obj __UNUSE return mem; } +static Evas_Object *external_anchorview_content_get(void *data __UNUSED__, + const Evas_Object *obj, const char *content) +{ + ERR("so content"); + return NULL; +} + static void external_anchorview_params_free(void *params) { diff --git a/src/edje_externals/elm_bubble.c b/src/edje_externals/elm_bubble.c index 76eae78..f8f0f2d 100644 --- a/src/edje_externals/elm_bubble.c +++ b/src/edje_externals/elm_bubble.c @@ -130,6 +130,13 @@ external_bubble_params_parse(void *data, Evas_Object *obj, const Eina_List *para return mem; } +static Evas_Object *external_bubble_content_get(void *data __UNUSED__, + const Evas_Object *obj, const char *content) +{ + ERR("so content"); + return NULL; +} + static void external_bubble_params_free(void *params) { diff --git a/src/edje_externals/elm_button.c b/src/edje_externals/elm_button.c index 5b8395e..329cf45 100644 --- a/src/edje_externals/elm_button.c +++ b/src/edje_externals/elm_button.c @@ -86,6 +86,13 @@ external_button_params_parse(void *data, Evas_Object *obj, const Eina_List *para return mem; } +static Evas_Object *external_button_content_get(void *data __UNUSED__, + const Evas_Object *obj, const char *content) +{ + ERR("so content"); + return NULL; +} + static void external_button_params_free(void *params) { diff --git a/src/edje_externals/elm_check.c b/src/edje_externals/elm_check.c index ac167ca..89e4930 100644 --- a/src/edje_externals/elm_check.c +++ b/src/edje_externals/elm_check.c @@ -114,6 +114,13 @@ external_check_params_parse(void *data, Evas_Object *obj, const Eina_List *param return mem; } +static Evas_Object *external_check_content_get(void *data __UNUSED__, + const Evas_Object *obj, const char *content) +{ + ERR("so content"); + return NULL; +} + static void external_check_params_free(void *params) { diff --git a/src/edje_externals/elm_clock.c b/src/edje_externals/elm_clock.c index 74f0818..13bda6d 100644 --- a/src/edje_externals/elm_clock.c +++ b/src/edje_externals/elm_clock.c @@ -210,6 +210,13 @@ external_clock_params_parse(void *data __UNUSED__, Evas_Object *obj __UNUSED__, return mem; } +static Evas_Object *external_clock_content_get(void *data __UNUSED__, + const Evas_Object *obj, const char *content) +{ + ERR("so content"); + return NULL; +} + static void external_clock_params_free(void *params) { diff --git a/src/edje_externals/elm_fileselector.c b/src/edje_externals/elm_fileselector.c index 571cd13..c955bc4 100644 --- a/src/edje_externals/elm_fileselector.c +++ b/src/edje_externals/elm_fileselector.c @@ -155,6 +155,13 @@ external_fileselector_params_parse(void *data __UNUSED__, Evas_Object *obj __UNU return mem; } +static Evas_Object *external_fileselector_content_get(void *data __UNUSED__, + const Evas_Object *obj, const char *content) +{ + ERR("so content"); + return NULL; +} + static void external_fileselector_params_free(void *params) { diff --git a/src/edje_externals/elm_fileselector_button.c b/src/edje_externals/elm_fileselector_button.c index f4239d3..f17e6bd 100644 --- a/src/edje_externals/elm_fileselector_button.c +++ b/src/edje_externals/elm_fileselector_button.c @@ -215,6 +215,13 @@ external_fileselector_button_params_parse(void *data, Evas_Object *obj, const Ei return mem; } +static Evas_Object *external_fileselector_button_content_get(void *data __UNUSED__, + const Evas_Object *obj, const char *content) +{ + ERR("so content"); + return NULL; +} + static void external_fileselector_button_params_free(void *params) { diff --git a/src/edje_externals/elm_genlist.c b/src/edje_externals/elm_genlist.c index bc3f634..a8b2405 100644 --- a/src/edje_externals/elm_genlist.c +++ b/src/edje_externals/elm_genlist.c @@ -297,6 +297,13 @@ external_genlist_params_parse(void *data __UNUSED__, Evas_Object *obj __UNUSED__ return mem; } +static Evas_Object *external_genlist_content_get(void *data __UNUSED__, + const Evas_Object *obj, const char *content) +{ + ERR("so content"); + return NULL; +} + static void external_genlist_params_free(void *params) { diff --git a/src/edje_externals/elm_hoversel.c b/src/edje_externals/elm_hoversel.c index 41f0f11..2bc49e0 100644 --- a/src/edje_externals/elm_hoversel.c +++ b/src/edje_externals/elm_hoversel.c @@ -117,6 +117,13 @@ external_hoversel_params_parse(void *data, Evas_Object *obj, const Eina_List *pa return mem; } +static Evas_Object *external_hoversel_content_get(void *data __UNUSED__, + const Evas_Object *obj, const char *content) +{ + ERR("so content"); + return NULL; +} + static void external_hoversel_params_free(void *params) { diff --git a/src/edje_externals/elm_list.c b/src/edje_externals/elm_list.c index 2f6d193..8f782af 100644 --- a/src/edje_externals/elm_list.c +++ b/src/edje_externals/elm_list.c @@ -242,6 +242,13 @@ external_list_params_parse(void *data __UNUSED__, Evas_Object *obj __UNUSED__, c return mem; } +static Evas_Object *external_list_content_get(void *data __UNUSED__, + const Evas_Object *obj, const char *content) +{ + ERR("so content"); + return NULL; +} + static void external_list_params_free(void *params) { diff --git a/src/edje_externals/elm_map.c b/src/edje_externals/elm_map.c index 13c0592..3077cf2 100644 --- a/src/edje_externals/elm_map.c +++ b/src/edje_externals/elm_map.c @@ -172,6 +172,13 @@ external_map_params_parse(void *data __UNUSED__, Evas_Object *obj __UNUSED__, co return mem; } +static Evas_Object *external_map_content_get(void *data __UNUSED__, + const Evas_Object *obj, const char *content) +{ + ERR("so content"); + return NULL; +} + static void external_map_params_free(void *params) { diff --git a/src/edje_externals/elm_notepad.c b/src/edje_externals/elm_notepad.c index 7eaef04..a99eeb6 100644 --- a/src/edje_externals/elm_notepad.c +++ b/src/edje_externals/elm_notepad.c @@ -37,6 +37,13 @@ external_notepad_params_parse(void *data __UNUSED__, Evas_Object *obj __UNUSED__ return NULL; } +static Evas_Object *external_notepad_content_get(void *data __UNUSED__, + const Evas_Object *obj, const char *content) +{ + ERR("so content"); + return NULL; +} + static void external_notepad_params_free(void *params) { diff --git a/src/edje_externals/elm_notify.c b/src/edje_externals/elm_notify.c index 54db415..5ec004b 100644 --- a/src/edje_externals/elm_notify.c +++ b/src/edje_externals/elm_notify.c @@ -186,6 +186,16 @@ static void * external_notify_params_parse(void *data, Evas_Object *obj, return mem; } +static Evas_Object *external_notify_content_get(void *data __UNUSED__, + const Evas_Object *obj, const char *content) +{ + if (!strcmp(content, "content")) + return elm_notify_content_get(obj); + + ERR("unknown content '%s'", content); + return NULL; +} + static void external_notify_params_free(void *params) { Elm_Params_Notify *mem = params; diff --git a/src/edje_externals/elm_panes.c b/src/edje_externals/elm_panes.c index e4d1817..336e7e9 100644 --- a/src/edje_externals/elm_panes.c +++ b/src/edje_externals/elm_panes.c @@ -140,6 +140,20 @@ static void * external_panes_params_parse(void *data, Evas_Object *obj, return mem; } +static Evas_Object *external_panes_content_get(void *data __UNUSED__, + const Evas_Object *obj, const char *content) +{ + if (!strcmp(content, "left")) + return elm_panes_content_left_get(obj); + else if (!strcmp(content, "right")) + return elm_panes_content_right_get(obj); + + ERR("unknown content '%s'", content); + + return NULL; +} + + static void external_panes_params_free(void *params) { Elm_Params_Panes *mem = params; diff --git a/src/edje_externals/elm_photocam.c b/src/edje_externals/elm_photocam.c index 4cb821d..f4b942f 100644 --- a/src/edje_externals/elm_photocam.c +++ b/src/edje_externals/elm_photocam.c @@ -175,6 +175,13 @@ external_photocam_params_parse(void *data, Evas_Object *obj, const Eina_List *pa return mem; } +static Evas_Object *external_photocam_content_get(void *data __UNUSED__, + const Evas_Object *obj, const char *content) +{ + ERR("so content"); + return NULL; +} + static void external_photocam_params_free(void *params) { diff --git a/src/edje_externals/elm_progressbar.c b/src/edje_externals/elm_progressbar.c index c289952..295ce61 100644 --- a/src/edje_externals/elm_progressbar.c +++ b/src/edje_externals/elm_progressbar.c @@ -213,6 +213,13 @@ external_progressbar_params_parse(void *data __UNUSED__, Evas_Object *obj __UNUS return mem; } +static Evas_Object *external_progressbar_content_get(void *data __UNUSED__, + const Evas_Object *obj, const char *content) +{ + ERR("so content"); + return NULL; +} + static void external_progressbar_params_free(void *params) { diff --git a/src/edje_externals/elm_radio.c b/src/edje_externals/elm_radio.c index bb1298a..ab847e4 100644 --- a/src/edje_externals/elm_radio.c +++ b/src/edje_externals/elm_radio.c @@ -141,6 +141,13 @@ external_radio_params_parse(void *data, Evas_Object *obj, const Eina_List *param return mem; } +static Evas_Object *external_radio_content_get(void *data __UNUSED__, + const Evas_Object *obj, const char *content) +{ + ERR("so content"); + return NULL; +} + static void external_radio_params_free(void *params) { diff --git a/src/edje_externals/elm_scrolled_entry.c b/src/edje_externals/elm_scrolled_entry.c index 446106a..f81ca62 100644 --- a/src/edje_externals/elm_scrolled_entry.c +++ b/src/edje_externals/elm_scrolled_entry.c @@ -153,6 +153,13 @@ external_scrolled_entry_params_parse(void *data __UNUSED__, Evas_Object *obj __U return mem; } +static Evas_Object *external_scrolled_entry_content_get(void *data __UNUSED__, + const Evas_Object *obj, const char *content) +{ + ERR("so content"); + return NULL; +} + static void external_scrolled_entry_params_free(void *params) { diff --git a/src/edje_externals/elm_slider.c b/src/edje_externals/elm_slider.c index 2c82394..ba76cd4 100644 --- a/src/edje_externals/elm_slider.c +++ b/src/edje_externals/elm_slider.c @@ -296,6 +296,13 @@ external_slider_params_parse(void *data __UNUSED__, Evas_Object *obj __UNUSED__, return mem; } +static Evas_Object *external_slider_content_get(void *data __UNUSED__, + const Evas_Object *obj, const char *content) +{ + ERR("so content"); + return NULL; +} + static void external_slider_params_free(void *params) { diff --git a/src/edje_externals/elm_slideshow.c b/src/edje_externals/elm_slideshow.c index 783fa85..23c50a8 100644 --- a/src/edje_externals/elm_slideshow.c +++ b/src/edje_externals/elm_slideshow.c @@ -155,6 +155,13 @@ external_slideshow_params_parse(void *data, Evas_Object *obj, const Eina_List *p return mem; } +static Evas_Object *external_slideshow_content_get(void *data __UNUSED__, + const Evas_Object *obj, const char *content) +{ + ERR("so content"); + return NULL; +} + static void external_slideshow_params_free(void *params) { diff --git a/src/edje_externals/elm_spinner.c b/src/edje_externals/elm_spinner.c index ba86ea0..e63e45b 100644 --- a/src/edje_externals/elm_spinner.c +++ b/src/edje_externals/elm_spinner.c @@ -211,6 +211,13 @@ external_spinner_params_parse(void *data __UNUSED__, Evas_Object *obj __UNUSED__ return mem; } +static Evas_Object *external_spinner_content_get(void *data __UNUSED__, + const Evas_Object *obj, const char *content) +{ + ERR("so content"); + return NULL; +} + static void external_spinner_params_free(void *params) { diff --git a/src/edje_externals/elm_thumb.c b/src/edje_externals/elm_thumb.c index a548cbf..311ecc9 100644 --- a/src/edje_externals/elm_thumb.c +++ b/src/edje_externals/elm_thumb.c @@ -104,6 +104,13 @@ external_thumb_params_parse(void *data __UNUSED__, Evas_Object *obj __UNUSED__, return mem; } +static Evas_Object *external_thumb_content_get(void *data __UNUSED__, + const Evas_Object *obj, const char *content) +{ + ERR("so content"); + return NULL; +} + static void external_thumb_params_free(void *params) { diff --git a/src/edje_externals/elm_toggle.c b/src/edje_externals/elm_toggle.c index c226b43..90c4d2c 100644 --- a/src/edje_externals/elm_toggle.c +++ b/src/edje_externals/elm_toggle.c @@ -176,6 +176,13 @@ external_toggle_params_parse(void *data __UNUSED__, Evas_Object *obj __UNUSED__, return mem; } +static Evas_Object *external_toggle_content_get(void *data __UNUSED__, + const Evas_Object *obj, const char *content) +{ + ERR("so content"); + return NULL; +} + static void external_toggle_params_free(void *params) { diff --git a/src/edje_externals/elm_toolbar.c b/src/edje_externals/elm_toolbar.c index a41cb69..27c6f24 100644 --- a/src/edje_externals/elm_toolbar.c +++ b/src/edje_externals/elm_toolbar.c @@ -103,6 +103,13 @@ external_toolbar_params_parse(void *data, Evas_Object *obj, const Eina_List *par return mem; } +static Evas_Object *external_toolbar_content_get(void *data __UNUSED__, + const Evas_Object *obj, const char *content) +{ + ERR("so content"); + return NULL; +} + static void external_toolbar_params_free(void *params) { diff --git a/src/edje_externals/private.h b/src/edje_externals/private.h index 45591b1..a4b5a88 100644 --- a/src/edje_externals/private.h +++ b/src/edje_externals/private.h @@ -39,6 +39,7 @@ const Edje_External_Type external_##type_name##_type = {\ .params_parse = external_##type_name##_params_parse,\ .params_free = external_##type_name##_params_free, \ .label_get = external_##type_name##_label_get, \ + .content_get = external_##type_name##_content_get, \ .description_get = NULL, \ .icon_add = external_##type_name##_icon_add, \ .preview_add = NULL, \ diff --git a/src/lib/Elementary.h.in b/src/lib/Elementary.h.in index 57c1172..c935880 100644 --- a/src/lib/Elementary.h.in +++ b/src/lib/Elementary.h.in @@ -685,6 +685,7 @@ extern "C" { 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 Evas_Object *elm_notify_content_get(const 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 Elm_Notify_Orient elm_notify_orient_get(const Evas_Object *obj); @@ -1506,6 +1507,8 @@ extern "C" { EAPI Evas_Object *elm_panes_add(Evas_Object *parent); EAPI void elm_panes_content_left_set(Evas_Object *obj, Evas_Object *content); EAPI void elm_panes_content_right_set(Evas_Object *obj, Evas_Object *content); + EAPI Evas_Object *elm_panes_content_left_get(const Evas_Object *obj); + EAPI Evas_Object *elm_panes_content_right_get(const Evas_Object *obj); EAPI double elm_panes_content_left_size_get(const Evas_Object *obj); EAPI void elm_panes_content_left_size_set(Evas_Object *obj, double size); EAPI void elm_panes_horizontal_set(Evas_Object *obj, Eina_Bool horizontal); diff --git a/src/lib/elm_notify.c b/src/lib/elm_notify.c index e92532f..9a026dc 100644 --- a/src/lib/elm_notify.c +++ b/src/lib/elm_notify.c @@ -393,6 +393,25 @@ elm_notify_content_unset(Evas_Object *obj) } /** + * Return the content of the notify widget + * + * @param obj The notify object + * @return The content that is being used + * + * @ingroup Notify + */ +EAPI Evas_Object * +elm_notify_content_get(const 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; + return wd->content; +} + +/** * Set the notify parent * * @param obj The notify object diff --git a/src/lib/elm_panes.c b/src/lib/elm_panes.c index e5b6edc..e880f45 100644 --- a/src/lib/elm_panes.c +++ b/src/lib/elm_panes.c @@ -220,6 +220,21 @@ EAPI void elm_panes_content_right_set(Evas_Object *obj, Evas_Object *content) } } + +EAPI Evas_Object +*elm_panes_content_left_get(const Evas_Object *obj) +{ + Widget_Data *wd = elm_widget_data_get(obj); + return wd->contents.left; +} + +EAPI Evas_Object +*elm_panes_content_right_get(const Evas_Object *obj) +{ + Widget_Data *wd = elm_widget_data_get(obj); + return wd->contents.right; +} + EAPI double elm_panes_content_left_size_get(const Evas_Object *obj) { Widget_Data *wd = elm_widget_data_get(obj);