From: Juyeon Lee Date: Fri, 10 Nov 2017 05:15:28 +0000 (+0900) Subject: efl_ui_win: added signal for effect start and done X-Git-Tag: submit/sandbox/upgrade/efl120/20180319.053334~1042 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=a0d81db3e7414a85ad9d8cfef184c890e2c26df1;p=platform%2Fupstream%2Fefl.git efl_ui_win: added signal for effect start and done Change-Id: Ie97f810e4a246c089013fbd17628920f789b3a62 --- diff --git a/src/bin/elementary/test_win_state.c b/src/bin/elementary/test_win_state.c index b4d084e..b08ea7a 100644 --- a/src/bin/elementary/test_win_state.c +++ b/src/bin/elementary/test_win_state.c @@ -305,6 +305,31 @@ _bt_pressed(void *data, Evas_Object *obj, void *event_info EINA_UNUSED) fflush(stdout); } +static void +_win_effect_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info) +{ + const char *type_name; + Efl_Ui_Win_Effect_Type type = (Efl_Ui_Win_Effect_Type)(event_info); + + switch (type) + { + case EFL_UI_WIN_EFFECT_TYPE_SHOW: + type_name = eina_stringshare_add("SHOW"); + break; + case EFL_UI_WIN_EFFECT_TYPE_HIDE: + type_name = eina_stringshare_add("HIDE"); + break; + case EFL_UI_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); +} + void test_win_state(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) { @@ -337,6 +362,8 @@ test_win_state(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event evas_object_smart_callback_add(win, "focus,in", _win_state_focus_cb, "focus,in"); 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, "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); diff --git a/src/lib/elementary/efl_ui_win.c b/src/lib/elementary/efl_ui_win.c index db5fae0..df76348 100644 --- a/src/lib/elementary/efl_ui_win.c +++ b/src/lib/elementary/efl_ui_win.c @@ -102,6 +102,10 @@ struct _Efl_Ui_Win_Data Ecore_Wl2_Window *win; Ecore_Event_Handler *configure_handler; Eina_Bool opaque_dirty : 1; + //TIZEN_ONLY(20171110): added signal for effect start and done + Ecore_Event_Handler *effect_start_handler; + Ecore_Event_Handler *effect_end_handler; + // } wl; #endif #ifdef HAVE_ELEMENTARY_COCOA @@ -323,6 +327,10 @@ static const char SIG_INDICATOR_PROP_CHANGED[] = "indicator,prop,changed"; static const char SIG_ROTATION_CHANGED[] = "rotation,changed"; static const char SIG_PROFILE_CHANGED[] = "profile,changed"; static const char SIG_WM_ROTATION_CHANGED[] = "wm,rotation,changed"; +//TIZEN_ONLY(20171110): added signal for effect start and done +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, ""}, @@ -345,6 +353,8 @@ static const Evas_Smart_Cb_Description _smart_callbacks[] = { {SIG_WM_ROTATION_CHANGED, ""}, {SIG_WIDGET_FOCUSED, ""}, /**< handled by elm_widget */ {SIG_WIDGET_UNFOCUSED, ""}, /**< handled by elm_widget */ + {SIG_EFFECT_STARTED, ""}, + {SIG_EFFECT_DONE, ""}, {NULL, NULL} }; @@ -2860,6 +2870,10 @@ _efl_ui_win_efl_canvas_group_group_del(Eo *obj, Efl_Ui_Win_Data *sd) if (sd->pointer.obj) evas_object_del(sd->pointer.obj); if (sd->pointer.ee) ecore_evas_free(sd->pointer.ee); sd->pointer.surf = NULL; + //TIZEN_ONLY(20171110): added signal for effect start and done + ecore_event_handler_del(sd->wl.effect_start_handler); + ecore_event_handler_del(sd->wl.effect_end_handler); + // #endif #ifdef HAVE_ELEMENTARY_WIN32 ecore_event_handler_del(sd->win32.key_down_handler); @@ -4301,6 +4315,41 @@ _elm_win_frame_pre_render(void *data, Evas *e EINA_UNUSED, void *ev EINA_UNUSED) _elm_win_opaque_update(sd, EINA_FALSE); sd->wl.opaque_dirty = 0; } + +//TIZEN_ONLY(20171110): added signal for effect start and done +static Eina_Bool +_elm_win_wl_effect_start(void *data, int type EINA_UNUSED, void *event) +{ + ELM_WIN_DATA_GET(data, sd); + Ecore_Wl2_Event_Effect_Start *e = event; + + if (!sd->wl.win) return ECORE_CALLBACK_PASS_ON; + + if ((ecore_wl2_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_Wl2_Event_Effect_Start *e = event; + unsigned int eff_type; + + if (!sd->wl.win) return ECORE_CALLBACK_PASS_ON; + + if ((ecore_wl2_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 static inline void @@ -5191,6 +5240,20 @@ _elm_win_finalize_internal(Eo *obj, Efl_Ui_Win_Data *sd, const char *name, Efl_U (ECORE_X_EVENT_WINDOW_PROPERTY, _elm_win_property_change, obj); } #endif +#ifdef HAVE_ELEMENTARY_WL2 + else if ((engine) && + ((!strcmp(engine, ELM_WAYLAND_SHM)) || + (!strcmp(engine, ELM_WAYLAND_EGL)))) + { + //TIZEN_ONLY(20171110): added signal for effect start and done + sd->wl.effect_start_handler = ecore_event_handler_add + (ECORE_WL2_EVENT_EFFECT_START, _elm_win_wl_effect_start, obj); + sd->wl.effect_end_handler = ecore_event_handler_add + (ECORE_WL2_EVENT_EFFECT_END, _elm_win_wl_effect_end, obj); + // + } +#endif + else if ((engine) && (!strncmp(engine, "shot:", 5))) _shot_init(sd); diff --git a/src/lib/elementary/efl_ui_win.eo b/src/lib/elementary/efl_ui_win.eo index b39fcbb..359b333 100644 --- a/src/lib/elementary/efl_ui_win.eo +++ b/src/lib/elementary/efl_ui_win.eo @@ -157,6 +157,24 @@ enum Efl.Ui.Win.Move_Resize_Mode right = (1 << 4) [[Start resizing window to the right]] } +//TIZEN_ONLY(20171110): added signal for effect start and done +enum Efl.Ui.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: efl_ui_win_effect_type; + + unknown = 0, + show, + hide, + restack +} +// + class Efl.Ui.Win (Elm.Widget, Efl.Canvas, Efl.Canvas.Pointer, Efl.Access.Window, Efl.Access.Component, Efl.Access.Widget.Action, Efl.Content, Efl.Input.State, Efl.Input.Interface, Efl.Screen, diff --git a/src/lib/elementary/elm_win.h b/src/lib/elementary/elm_win.h index 7720b98..d8abdbe 100644 --- a/src/lib/elementary/elm_win.h +++ b/src/lib/elementary/elm_win.h @@ -91,6 +91,8 @@ * @li "focused" : When the win has received focus. (since 1.8) * @li "unfocused" : When the win has lost focus. (since 1.8) * @li "theme,changed" - The theme was changed. (since 1.13) + * @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