express: Add support for popup media in a channel
Signed-off-by: Chris Michael <cp.michael@samsung.com>
This commit is contained in:
parent
5e09435d39
commit
4f746c9c85
|
@ -6,6 +6,8 @@
|
|||
#include "grid.h"
|
||||
#include "utils.h"
|
||||
#include "commands.h"
|
||||
#include "dbus.h"
|
||||
#include "media.h"
|
||||
|
||||
struct _Channel
|
||||
{
|
||||
|
@ -23,6 +25,7 @@ struct _Channel
|
|||
Evas_Object *o_tabregion_base;
|
||||
Evas_Object *o_img;
|
||||
Evas_Object *o_entry;
|
||||
Evas_Object *o_popmedia;
|
||||
|
||||
struct
|
||||
{
|
||||
|
@ -59,16 +62,125 @@ struct _Channel
|
|||
int min_w, min_h;
|
||||
int req_w, req_h;
|
||||
|
||||
Eina_List *popmedia_queue;
|
||||
|
||||
Eina_Bool active : 1;
|
||||
Eina_Bool size_done : 1;
|
||||
Eina_Bool translucent : 1;
|
||||
Eina_Bool focused : 1;
|
||||
Eina_Bool unswallowed : 1;
|
||||
Eina_Bool missed : 1;
|
||||
Eina_Bool popmedia_deleted : 1;
|
||||
|
||||
Express_Network *net;
|
||||
};
|
||||
|
||||
static void _channel_popmedia(Channel *chl, const char *src);
|
||||
|
||||
static void
|
||||
_cb_popmedia_loop(void *data, Evas_Object *obj EINA_UNUSED, void *event EINA_UNUSED)
|
||||
{
|
||||
Channel *chl;
|
||||
|
||||
chl = data;
|
||||
if (chl->popmedia_queue)
|
||||
{
|
||||
if (chl->o_popmedia) _media_play_set(chl->o_popmedia, EINA_FALSE);
|
||||
edje_object_signal_emit(chl->o_bg, "popmedia,off", PACKAGE_NAME);
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
_cb_popmedia_del(void *data, Evas *evas EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event EINA_UNUSED)
|
||||
{
|
||||
Channel *chl;
|
||||
|
||||
chl = data;
|
||||
chl->o_popmedia = NULL;
|
||||
chl->popmedia_deleted = EINA_TRUE;
|
||||
edje_object_signal_emit(chl->o_bg, "popmedia,off", PACKAGE_NAME);
|
||||
}
|
||||
|
||||
static void
|
||||
_channel_popmedia_queue_process(Channel *chl)
|
||||
{
|
||||
const char *src;
|
||||
|
||||
if (!chl->popmedia_queue) return;
|
||||
src = chl->popmedia_queue->data;
|
||||
chl->popmedia_queue =
|
||||
eina_list_remove_list(chl->popmedia_queue, chl->popmedia_queue);
|
||||
if (!src) return;
|
||||
_channel_popmedia(chl, src);
|
||||
eina_stringshare_del(src);
|
||||
}
|
||||
|
||||
static void
|
||||
_cb_popmedia_done(void *data, Evas_Object *obj EINA_UNUSED, const char *emission EINA_UNUSED, const char *src EINA_UNUSED)
|
||||
{
|
||||
Channel *chl;
|
||||
|
||||
chl = data;
|
||||
if ((chl->o_popmedia) || (chl->popmedia_deleted))
|
||||
{
|
||||
if (chl->o_popmedia)
|
||||
{
|
||||
evas_object_event_callback_del(chl->o_popmedia, EVAS_CALLBACK_DEL,
|
||||
_cb_popmedia_del);
|
||||
evas_object_del(chl->o_popmedia);
|
||||
chl->o_popmedia = NULL;
|
||||
}
|
||||
chl->popmedia_deleted = EINA_FALSE;
|
||||
_channel_popmedia_queue_process(chl);
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
_channel_popmedia_show(Channel *chl, const char *src, Media_Type type)
|
||||
{
|
||||
_dbus_link_hide();
|
||||
|
||||
if (chl->o_popmedia)
|
||||
{
|
||||
const char *s;
|
||||
|
||||
EINA_LIST_FREE(chl->popmedia_queue, s)
|
||||
eina_stringshare_del(s);
|
||||
|
||||
chl->popmedia_queue =
|
||||
eina_list_append(chl->popmedia_queue, eina_stringshare_add(src));
|
||||
|
||||
edje_object_signal_emit(chl->o_bg, "popmedia,off", PACKAGE_NAME);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
chl->o_popmedia = _media_add(chl->o_win, src, MEDIA_POP, type);
|
||||
chl->popmedia_deleted = EINA_FALSE;
|
||||
evas_object_smart_callback_add(chl->o_popmedia, "loop",
|
||||
_cb_popmedia_loop, chl);
|
||||
evas_object_event_callback_add(chl->o_popmedia, EVAS_CALLBACK_DEL,
|
||||
_cb_popmedia_del, chl);
|
||||
edje_object_part_swallow(chl->o_bg, "express.popmedia", chl->o_popmedia);
|
||||
evas_object_show(chl->o_popmedia);
|
||||
|
||||
edje_object_signal_emit(chl->o_bg, "popmedia,on", PACKAGE_NAME);
|
||||
}
|
||||
|
||||
static void
|
||||
_channel_popmedia(Channel *chl, const char *src)
|
||||
{
|
||||
Media_Type type;
|
||||
|
||||
type = _media_src_type_get(src);
|
||||
if (type == MEDIA_TYPE_UNKNOWN)
|
||||
{
|
||||
|
||||
}
|
||||
else
|
||||
_channel_popmedia_show(chl, src, type);
|
||||
}
|
||||
|
||||
static void
|
||||
_cb_theme_reload(Channel *chl)
|
||||
{
|
||||
|
@ -138,6 +250,19 @@ _cb_next(void *data, Evas_Object *obj EINA_UNUSED, void *event EINA_UNUSED)
|
|||
}
|
||||
}
|
||||
|
||||
static void
|
||||
_cb_popup(void *data, Evas_Object *obj EINA_UNUSED, void *event)
|
||||
{
|
||||
Channel *chl;
|
||||
const char *src;
|
||||
|
||||
chl = data;
|
||||
src = event;
|
||||
if (!src) src = _grid_link_get(chl->o_grid);
|
||||
if (!src) return;
|
||||
_channel_popmedia(chl, src);
|
||||
}
|
||||
|
||||
static void
|
||||
_cb_count_go(void *data, Evas_Object *obj EINA_UNUSED, const char *sig EINA_UNUSED, const char *source EINA_UNUSED)
|
||||
{
|
||||
|
@ -646,6 +771,7 @@ _channel_create(Evas *evas, Evas_Object *win, const char *name, const char *serv
|
|||
evas_object_smart_callback_add(chl->o_grid, "options", _cb_options, chl);
|
||||
evas_object_smart_callback_add(chl->o_grid, "prev", _cb_prev, chl);
|
||||
evas_object_smart_callback_add(chl->o_grid, "next", _cb_next, chl);
|
||||
evas_object_smart_callback_add(chl->o_grid, "popup", _cb_popup, chl);
|
||||
|
||||
/* swallow parts */
|
||||
edje_object_part_swallow(chl->o_base, "channel.content", chl->o_grid);
|
||||
|
@ -658,6 +784,8 @@ _channel_create(Evas *evas, Evas_Object *win, const char *name, const char *serv
|
|||
_cb_count_prev, chl);
|
||||
edje_object_signal_callback_add(chl->o_bg, "chlcount,next", PACKAGE_NAME,
|
||||
_cb_count_next, chl);
|
||||
edje_object_signal_callback_add(chl->o_bg, "popmedia,done", PACKAGE_NAME,
|
||||
_cb_popmedia_done, chl);
|
||||
|
||||
/* add handlers for userlist signals */
|
||||
edje_object_signal_callback_add(chl->o_bg, "userlist,go", PACKAGE_NAME,
|
||||
|
@ -688,6 +816,7 @@ _channel_destroy(Channel *chl)
|
|||
if (chl->userlist.o_frame) evas_object_del(chl->userlist.o_frame);
|
||||
|
||||
/* delete channel objects */
|
||||
if (chl->o_popmedia) evas_object_del(chl->o_popmedia);
|
||||
if (chl->o_img) evas_object_del(chl->o_img);
|
||||
if (chl->o_spacer) evas_object_del(chl->o_spacer);
|
||||
if (chl->o_entry) evas_object_del(chl->o_entry);
|
||||
|
|
Loading…
Reference in New Issue