elm_win: added signal 'effect,started' and 'effect,done' 47/61047/2 accepted/tizen/common/20160318.145522 accepted/tizen/ivi/20160318.113305 accepted/tizen/mobile/20160318.112954 accepted/tizen/tv/20160318.113125 accepted/tizen/wearable/20160318.113142 submit/tizen/20160317.075557
authorMinJeong Kim <minjjj.kim@samsung.com>
Thu, 3 Mar 2016 12:40:53 +0000 (21:40 +0900)
committerMinJeong Kim <minjjj.kim@samsung.com>
Wed, 16 Mar 2016 00:57:46 +0000 (09:57 +0900)
Signals 'effect,started' and 'effect,done' are added. Registered callbacks by
client for those signals are called directly by ecore-wayland events
ECORE_WL_EVENT_EFFECT_START/ECORE_WL_EVENT_EFFECT_END.

Change-Id: I67b6776ab1f6f3938c9beda8e903d6e76c15db86
Signed-off-by: MinJeong Kim <minjjj.kim@samsung.com>
src/bin/test_win_state.c
src/lib/elm_win.c
src/lib/elm_win.eo
src/lib/elm_win.h

index 562ae93..4de27a7 100644 (file)
@@ -241,6 +241,31 @@ _win_state_visibility_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_i
 }
 
 static void
+_win_effect_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info)
+{
+   const char *type_name;
+   Elm_Win_Effect_Type type = (Elm_Win_Effect_Type)(event_info);
+
+   switch (type)
+     {
+      case ELM_WIN_EFFECT_TYPE_SHOW:
+         type_name = eina_stringshare_add("SHOW");
+         break;
+      case ELM_WIN_EFFECT_TYPE_HIDE:
+         type_name = eina_stringshare_add("HIDE");
+         break;
+      case ELM_WIN_EFFECT_TYPE_RESTACK:
+         type_name = eina_stringshare_add("RESTACK");
+         break;
+      default:
+         type_name = eina_stringshare_add("UNKNOWN");
+     }
+
+   printf("EFFECT: %s %s\n", type_name, (char *)data);
+   eina_stringshare_del(type_name);
+}
+
+static void
 _win_show(void *data EINA_UNUSED, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
 {
    printf("win: show\n");
@@ -285,6 +310,8 @@ test_win_state(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event
    evas_object_smart_callback_add(win, "delete,request", _win_state_print_cb, "delete,request");
    evas_object_smart_callback_add(win, "wm,rotation,changed", _win_state_print_cb, "wm,rotation,changed");
    evas_object_smart_callback_add(win, "visibility,changed", _win_state_visibility_cb, "visibility,changed");
+   evas_object_smart_callback_add(win, "effect,started", _win_effect_cb, "effect,started");
+   evas_object_smart_callback_add(win, "effect,done", _win_effect_cb, "effect,done");
    elm_win_autodel_set(win, EINA_TRUE);
 
    bg = elm_bg_add(win);
index 306db90..8b2f1cc 100644 (file)
@@ -116,6 +116,8 @@ struct _Elm_Win_Data
    {
       Ecore_Wl_Window *win;
       Eina_Bool opaque_dirty : 1;
+      Ecore_Event_Handler *effect_start_handler;
+      Ecore_Event_Handler *effect_end_handler;
    } wl;
 #endif
 
@@ -252,6 +254,8 @@ static const char SIG_WM_ROTATION_CHANGED[] = "wm,rotation,changed";
 static const char SIG_CONFORMANT_CHANGED[] = "conformant,changed";
 static const char SIG_AUX_HINT_ALLOWED[] = "aux,hint,allowed";
 static const char SIG_VISIBILITY_CHANGED[] = "visibility,changed";
+static const char SIG_EFFECT_STARTED[] = "effect,started";
+static const char SIG_EFFECT_DONE[] = "effect,done";
 
 static const Evas_Smart_Cb_Description _smart_callbacks[] = {
    {SIG_DELETE_REQUEST, ""},
@@ -277,6 +281,8 @@ static const Evas_Smart_Cb_Description _smart_callbacks[] = {
    {SIG_CONFORMANT_CHANGED, ""},
    {SIG_AUX_HINT_ALLOWED, ""},
    {SIG_VISIBILITY_CHANGED, ""},
+   {SIG_EFFECT_STARTED, ""},
+   {SIG_EFFECT_DONE, ""},
    {NULL, NULL}
 };
 
@@ -2259,6 +2265,39 @@ _elm_win_wlwindow_get(Elm_Win_Data *sd)
 {
    sd->wl.win = _elm_ee_wlwin_get(sd->ee);
 }
+
+static Eina_Bool
+_elm_win_wl_effect_start(void *data, int type EINA_UNUSED, void *event)
+{
+   ELM_WIN_DATA_GET(data, sd);
+   Ecore_Wl_Event_Effect_Start *e = event;
+
+   if (!sd->wl.win) return ECORE_CALLBACK_PASS_ON;
+
+   if ((ecore_wl_window_id_get(sd->wl.win) != e->win))
+     return ECORE_CALLBACK_PASS_ON;
+
+   evas_object_smart_callback_call(data, SIG_EFFECT_STARTED, (void*)e->type);
+
+   return ECORE_CALLBACK_PASS_ON;
+}
+
+static Eina_Bool
+_elm_win_wl_effect_end(void *data, int type EINA_UNUSED, void *event)
+{
+   ELM_WIN_DATA_GET(data, sd);
+   Ecore_Wl_Event_Effect_End *e = event;
+
+   if (!sd->wl.win) return ECORE_CALLBACK_PASS_ON;
+
+   if ((ecore_wl_window_id_get(sd->wl.win) != e->win))
+     return ECORE_CALLBACK_PASS_ON;
+
+   evas_object_smart_callback_call(data, SIG_EFFECT_DONE, (void*)e->type);
+
+   return ECORE_CALLBACK_PASS_ON;
+}
+
 #endif
 
 #ifdef HAVE_ELEMENTARY_X
@@ -3896,6 +3935,17 @@ _elm_win_finalize_internal(Eo *obj, Elm_Win_Data *sd, const char *name, Elm_Win_
             (ECORE_X_EVENT_WINDOW_PROPERTY, _elm_win_property_change, obj);
      }
 #endif
+#ifdef HAVE_ELEMENTARY_WAYLAND
+   else if ((engine) &&
+            ((!strcmp(engine, ELM_WAYLAND_SHM)) ||
+             (!strcmp(engine, ELM_WAYLAND_EGL))))
+     {
+        sd->wl.effect_start_handler = ecore_event_handler_add
+           (ECORE_WL_EVENT_EFFECT_START, _elm_win_wl_effect_start, obj);
+        sd->wl.effect_end_handler = ecore_event_handler_add
+           (ECORE_WL_EVENT_EFFECT_END, _elm_win_wl_effect_end, obj);
+     }
+#endif
    else if ((engine) && (!strncmp(engine, "shot:", 5)))
      _shot_init(sd);
 
index 6d0a0f8..f2a93b5 100644 (file)
@@ -140,6 +140,22 @@ enum Elm.Win.Keygrab_Mode
                                     window]]
 }
 
+enum Elm.Win.Effect.Type
+{
+   [[List of window effect.
+
+     These list indicates types of window effect. When the effect started or
+     done, the Elm_Win is notified with type information of window effect.
+   ]]
+
+   legacy: elm_win_effect_type;
+
+   unknown = 0,
+   show,
+   hide,
+   restack
+}
+
 enum Elm.Illume_Command
 {
    [[Available commands that can be sent to the Illume manager.
index a7c92dd..2ce35f3 100644 (file)
@@ -92,6 +92,8 @@
  * @li "unfocused" : When the win has lost focus. (since 1.8)
  * @li "theme,changed" - The theme was changed. (since 1.13)
  * @li "visibility,changed" - visibility of the window has been changed.
+ * @li "effect,started" - window effect has been started.
+ * @li "effect,done" - window effect has been done.
  *
  * Note that calling evas_object_show() after window contents creation is
  * recommended. It will trigger evas_smart_objects_calculate() and some backend