From: Hosang Kim Date: Wed, 4 Jan 2017 07:48:23 +0000 (+0900) Subject: elm_plug/elm_conform: add plug message feature. X-Git-Tag: accepted/tizen/common/20170110.154939~1 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=6833a5f60466c58f81c33907422f141f256b1b7a;p=platform%2Fupstream%2Felementary.git elm_plug/elm_conform: add plug message feature. @tizen_only Change-Id: I719ec85ae511938ccf9290dfffba3c3d7039292c (cherry picked from commit b4e31bb79cdbdceb1317738532988d8b32cf63db) --- diff --git a/src/lib/elm_conform.c b/src/lib/elm_conform.c index 9d35422..306376b 100644 --- a/src/lib/elm_conform.c +++ b/src/lib/elm_conform.c @@ -66,6 +66,7 @@ static Evas_Object *_precreated_conform_obj = NULL; // TIZEN_ONLY(20161208): Support quickpanel callback static void _indicator_hide_effect_del(void *data); static void _indicator_hide_effect_set(void *data, double duration); +static void _indicator_show_effect(Evas_Object *conformant, double duration); static int conform_mod_init_cnt = 0; static Elm_Conformant_Mod_Api *qp_mod = NULL; @@ -569,6 +570,55 @@ _port_indicator_disconnected(void *data, return EINA_TRUE; } +//TIZEN_ONLY(20170104): add plug message feature. +// procotol version - change this as needed +#define MSG_DOMAIN_CONTROL_INDICATOR 0x10001 +#define MSG_ID_INDICATOR_REPEAT_EVENT 0x10002 +#define MSG_ID_INDICATOR_ROTATION 0x10003 +#define MSG_ID_INDICATOR_OPACITY 0X1004 +#define MSG_ID_INDICATOR_TYPE 0X1005 +#define MSG_ID_INDICATOR_START_ANIMATION 0X10006 + +typedef struct _Indicator_Data_Animation Indicator_Data_Animation; + +struct _Indicator_Data_Animation +{ + double duration; +}; + +static Eina_Bool +_plug_msg_handle(void *data, + Eo *obj EINA_UNUSED, + const Eo_Event_Description *desc EINA_UNUSED, + void *event_info) +{ + Evas_Object *conformant = data; + Elm_Plug_Message *pm = event_info; + int msg_domain = 0; + int msg_id = 0; + void *msg_data = NULL; + int msg_data_size = 0; + + msg_domain = pm->msg_domain; + msg_id = pm->msg_id; + msg_data = pm->data; + msg_data_size = pm->size; + + if (msg_domain == MSG_DOMAIN_CONTROL_INDICATOR) + { + if (msg_id == MSG_ID_INDICATOR_START_ANIMATION) + { + if (msg_data_size != (int)sizeof(Indicator_Data_Animation)) return EINA_FALSE; + + Indicator_Data_Animation *anim_data = msg_data; + _indicator_show_effect(conformant, anim_data->duration); + } + } + + return EINA_TRUE; +} +// + static Evas_Object * _create_portrait_indicator(Evas_Object *obj) { @@ -603,6 +653,10 @@ _create_portrait_indicator(Evas_Object *obj) } elm_widget_sub_object_add(obj, port_indicator); + //TIZEN_ONLY(20170104): add plug message feature. + eo_do(port_indicator, eo_event_callback_add + (ELM_PLUG_EVENT_MESSAGE_RECEIVED, _plug_msg_handle, obj)); + // eo_do(port_indicator, eo_event_callback_add (ELM_PLUG_EVENT_IMAGE_DELETED, _port_indicator_disconnected, obj)); evas_object_size_hint_min_set(port_indicator, -1, 0); @@ -645,6 +699,10 @@ _create_landscape_indicator(Evas_Object *obj) } elm_widget_sub_object_add(obj, land_indicator); + //TIZEN_ONLY(20170104): add plug message feature. + eo_do(land_indicator, eo_event_callback_add + (ELM_PLUG_EVENT_MESSAGE_RECEIVED, _plug_msg_handle, obj)); + // eo_do(land_indicator, eo_event_callback_add (ELM_PLUG_EVENT_IMAGE_DELETED, _land_indicator_disconnected, obj)); evas_object_size_hint_min_set(land_indicator, -1, 0); @@ -1311,6 +1369,18 @@ _elm_conformant_evas_object_smart_del(Eo *obj, Elm_Conformant_Data *sd) ecore_job_del(sd->show_region_job); ecore_timer_del(sd->port_indi_timer); ecore_timer_del(sd->land_indi_timer); + //TIZEN_ONLY(20170104): add plug message feature. + eo_do(sd->portrait_indicator, + eo_event_callback_del(ELM_PLUG_EVENT_MESSAGE_RECEIVED, + _plug_msg_handle, obj), + eo_event_callback_del(ELM_PLUG_EVENT_IMAGE_DELETED, + _port_indicator_disconnected, obj)); + eo_do(sd->landscape_indicator, + eo_event_callback_del(ELM_PLUG_EVENT_MESSAGE_RECEIVED, + _plug_msg_handle, obj), + eo_event_callback_del(ELM_PLUG_EVENT_IMAGE_DELETED, + _land_indicator_disconnected, obj)); + // evas_object_del(sd->portrait_indicator); evas_object_del(sd->landscape_indicator); diff --git a/src/lib/elm_plug.c b/src/lib/elm_plug.c index d743b1c..caff8fb 100644 --- a/src/lib/elm_plug.c +++ b/src/lib/elm_plug.c @@ -92,6 +92,28 @@ _elm_plug_elm_widget_theme_apply(Eo *obj, void *sd EINA_UNUSED) return int_ret; } +//TIZEN_ONLY(20170104): add plug message feature. +static void +_elm_plug_ecore_evas_msg_handle(Ecore_Evas *ee, int msg_domain, int msg_id, void *data, int size) +{ + Evas_Object *plug, *parent; + Elm_Plug_Message pm; + + if (!data) return; + DBG("Elm plug receive msg from socket ee=%p msg_domain=%x msg_id=%x size=%d", ee, msg_domain, msg_id, size); + //get plug object form ee + plug = (Evas_Object *)ecore_evas_data_get(ee, PLUG_KEY); + EINA_SAFETY_ON_NULL_RETURN(plug); + + pm.msg_domain = msg_domain; + pm.msg_id = msg_id; + pm.data = data; + pm.size = size; + + eo_do(plug, eo_event_callback_call(ELM_PLUG_EVENT_MESSAGE_RECEIVED, &pm)); +} +// + static void _on_mouse_up(void *data, Evas *e EINA_UNUSED, @@ -178,6 +200,9 @@ _elm_plug_connect(Eo *obj, void *sd EINA_UNUSED, const char *svcname, int svcnum ecore_evas_data_set(ee, PLUG_KEY, obj); ecore_evas_callback_delete_request_set(ee, _elm_plug_disconnected); ecore_evas_callback_resize_set(ee, _elm_plug_resized); + //TIZEN_ONLY(20170104): add plug message feature. + ecore_evas_callback_msg_handle_set(ee, _elm_plug_ecore_evas_msg_handle); + // if (_elm_config->atspi_mode) { diff --git a/src/lib/elm_plug.eo b/src/lib/elm_plug.eo index 7c7a9d0..641949f 100644 --- a/src/lib/elm_plug.eo +++ b/src/lib/elm_plug.eo @@ -45,6 +45,9 @@ class Elm.Plug (Elm.Widget, Evas.Clickable_Interface) Elm_Interface_Atspi_Accessible.children.get; } events { + //TIZEN_ONLY(20170104): add plug message feature. + message,received; + // image,deleted; image,resized; [[ii]] } diff --git a/src/lib/elm_plug.h b/src/lib/elm_plug.h index b006165..3e87840 100644 --- a/src/lib/elm_plug.h +++ b/src/lib/elm_plug.h @@ -25,12 +25,31 @@ * */ +//TIZEN_ONLY(20170104): add plug message feature. +/** + * @typedef Elm_Plug_Message + * + * @brief The structure type holding the message + * which elm plug received from ecore evas. + * + */ +struct _Elm_Plug_Message +{ + int msg_domain; + int msg_id; + void *data; + int size; +}; + +typedef struct _Elm_Plug_Message Elm_Plug_Message; +// /** * @addtogroup Plug * @{ */ + #ifdef EFL_EO_API_SUPPORT #include "elm_plug_eo.h" #endif