elm_plug/elm_conform: add plug message feature. 55/108955/1
authorHosang Kim <hosang12.kim@samsung.com>
Wed, 4 Jan 2017 07:48:23 +0000 (16:48 +0900)
committerkim hosang <hosang12.kim@samsung.com>
Fri, 6 Jan 2017 09:03:16 +0000 (01:03 -0800)
@tizen_only

Change-Id: I719ec85ae511938ccf9290dfffba3c3d7039292c
(cherry picked from commit b4e31bb79cdbdceb1317738532988d8b32cf63db)

src/lib/elm_conform.c
src/lib/elm_plug.c
src/lib/elm_plug.eo
src/lib/elm_plug.h

index 9d35422..306376b 100644 (file)
@@ -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);
 
index d743b1c..caff8fb 100644 (file)
@@ -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)
           {
index 7c7a9d0..641949f 100644 (file)
@@ -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]]
    }
index b006165..3e87840 100644 (file)
  *
  */
 
+//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