Subject: Re: [E-devel] [Patch] elm_slideshow patch
From: PRINCE KUMAR DUBEY <prince.dubey@samsung.com>
On behalf of Rajeev Ranjan, I am submitting the elm_slideshow patch
which add support for getting notification when transition completes.
Change Log:
new signal “transition,end” has been introduced to get notification
when transition completes.
Detail Description:
The actual requirement is to get user notified when the last item is
visible in the slideshow. In this case, user wants to take some
action, say updating button text to Restart if the slideshow does not
have loop.
The current implementation of slideshow has a signal called “changed”
which has current visible item as event_info parameter in the
callback. User can compare it with the last appended item and come to
know that the last item is visible if even_info is equal to the data
passed which should be the last appended item. The only problem is
that this signal is emitted by C code asynchronously to the
transition, hence if the transition involves an animation, user will
most likely get it even before the transition completes. This may look
bad to the user if the button label gets updated to Restart even
before the last transition gets over.
In order to fulfill the requirement, I have introduced another signal
“transition,end” which is emitted once the transition is over.
The same requirement could have been fulfilled by emitting “changed”
signal after the transition gets over but then this will be different
from the existing implementation for other widgets, hence I introduced
the new signal “transition,end”.
git-svn-id: svn+ssh://svn.enlightenment.org/var/svn/e/trunk/elementary@65951
7cbeb6ba-43b4-40fd-8cce-
4c39aea84d33
return photo;
}
-
+static void
+_slide_transition(void *data, Evas_Object *obj __UNUSED__, void *event_info)
+{
+ Elm_Slideshow_Item *it = (Elm_Slideshow_Item *) event_info;
+ if (data == it)
+ printf("Reaches to End of slides\n");
+}
void
test_slideshow(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
Evas_Object *win, *bg, *notify, *bx, *bt, *hv, *spin;
const Eina_List *l;
const char *transition, *layout;
+ Elm_Slideshow_Item *last_item;
win = elm_win_add(NULL, "slideshow", ELM_WIN_BASIC);
elm_win_title_set(win, "Slideshow");
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);
+ last_item = elm_slideshow_item_add(slideshow, &itc, img8);
+ evas_object_smart_callback_add(slideshow, "transition,end", _slide_transition, last_item);
notify = elm_notify_add(win);
elm_notify_orient_set(notify, ELM_NOTIFY_ORIENT_BOTTOM);
* 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
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}
};
}
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);
edje_object_part_swallow(wd->slideshow, "elm.swallow.1", VIEW(item));
edje_object_signal_emit(wd->slideshow, "anim,end", "slideshow");
+ if (emission != NULL)
+ evas_object_smart_callback_call(data, SIG_TRANSITION_END, wd->current);
}
static Eina_Bool