From d415886020c0e753d9972c27554a56543cf27832 Mon Sep 17 00:00:00 2001 From: Rajeev Ranjan Date: Wed, 14 Dec 2011 20:07:28 +0530 Subject: [PATCH] [elm_slideshow] Partial merging with open source code to support notification of Last item reached in the slideshow. Change-Id: I4a8975dd3d83beba061885d7b4ef1fdb8b27ce1c --- src/bin/test_slideshow.c | 12 ++++++++++-- src/lib/Elementary.h.in | 4 +++- src/lib/elm_slideshow.c | 6 +++++- 3 files changed, 18 insertions(+), 4 deletions(-) diff --git a/src/bin/test_slideshow.c b/src/bin/test_slideshow.c index b351dc1..6ffe12a 100644 --- a/src/bin/test_slideshow.c +++ b/src/bin/test_slideshow.c @@ -99,7 +99,13 @@ _get(void *data, Evas_Object *obj) return photo; } - +static void +_slide_transition(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) +{ + Elm_Object_Item *slide_it = (Elm_Object_Item *) event_info; + if (data == slide_it) + printf("Reaches to End of slides\n"); +} void test_slideshow(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) @@ -107,6 +113,7 @@ test_slideshow(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_i Evas_Object *win, *bg, *notify, *bx, *bt, *hv, *spin; const Eina_List *l; const char *transition, *layout; + Elm_Object_Item *slide_last_it; win = elm_win_add(NULL, "slideshow", ELM_WIN_BASIC); elm_win_title_set(win, "Slideshow"); @@ -134,7 +141,8 @@ test_slideshow(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_i elm_slideshow_item_add(slideshow, &itc, img5); elm_slideshow_item_add(slideshow, &itc, img6); elm_slideshow_item_add(slideshow, &itc, img7); - elm_slideshow_item_add(slideshow, &itc, img8); + slide_last_it = elm_slideshow_item_add(slideshow, &itc, img8); + evas_object_smart_callback_add(slideshow, "transition,end", _slide_transition, slide_last_it); notify = elm_notify_add(win); elm_notify_orient_set(notify, ELM_NOTIFY_ORIENT_BOTTOM); diff --git a/src/lib/Elementary.h.in b/src/lib/Elementary.h.in index 00cd51c..203f815 100644 --- a/src/lib/Elementary.h.in +++ b/src/lib/Elementary.h.in @@ -20470,7 +20470,9 @@ extern "C" { * Smart events one can add callbacks for are: * * - @c "changed" - when the slideshow switches its view to a new - * item + * item. event_info parameter in callback contains the current visible item + * - @c "transition,end" - when a slide transition ends. event_info parameter + * in callback contains the current visible item * * List of examples for the slideshow widget: * @li @ref slideshow_example diff --git a/src/lib/elm_slideshow.c b/src/lib/elm_slideshow.c index 349be03..5728219 100644 --- a/src/lib/elm_slideshow.c +++ b/src/lib/elm_slideshow.c @@ -51,9 +51,11 @@ static Eina_Bool _event_hook(Evas_Object *obj, Evas_Object *src, Evas_Callback_Type type, void *event_info); static const char SIG_CHANGED[] = "changed"; +static const char SIG_TRANSITION_END[] = "transition,end"; static const Evas_Smart_Cb_Description _signals[] = { {SIG_CHANGED, ""}, + {SIG_TRANSITION_END, ""}, {NULL, NULL} }; @@ -299,7 +301,7 @@ _item_realize(Elm_Slideshow_Item *item) } static void -_end(void *data, Evas_Object *obj __UNUSED__, const char *emission __UNUSED__, const char *source __UNUSED__) +_end(void *data, Evas_Object *obj __UNUSED__, const char *emission, const char *source __UNUSED__) { Elm_Slideshow_Item *item; Widget_Data *wd = elm_widget_data_get(data); @@ -323,6 +325,8 @@ _end(void *data, Evas_Object *obj __UNUSED__, const char *emission __UNUSED__, c edje_object_signal_emit(wd->slideshow, "anim,end", "slideshow"); edje_object_part_swallow(wd->slideshow, "elm.swallow.1", item->base.view); + if (emission != NULL) + evas_object_smart_callback_call(data, SIG_TRANSITION_END, wd->current); } static Eina_Bool -- 2.7.4