From c997077c171f6bcab895659cc3030e14d6f04026 Mon Sep 17 00:00:00 2001 From: "Carsten Haitzler (Rasterman)" Date: Fri, 30 Dec 2016 15:26:37 +0900 Subject: [PATCH] desklock - allow for fadein/out effects in theme for locking/unlocking this allows the theme to now do special effects on showing the desklock and on hiding it again afterwards so it can look nicer. @feature --- src/bin/e_desklock.c | 2 +- src/modules/lokker/lokker.c | 42 ++++++++++++++++++++++++++++++++----- 2 files changed, 38 insertions(+), 6 deletions(-) diff --git a/src/bin/e_desklock.c b/src/bin/e_desklock.c index e36dc610b..b293016eb 100644 --- a/src/bin/e_desklock.c +++ b/src/bin/e_desklock.c @@ -294,7 +294,7 @@ e_desklock_show(Eina_Bool suspend) o = evas_object_rectangle_add(e_comp->evas); block_rects = eina_list_append(block_rects, o); - evas_object_color_set(o, 0, 0, 0, 255); + evas_object_color_set(o, 0, 0, 0, 0); evas_object_resize(o, 99999, 99999); evas_object_layer_set(o, E_LAYER_DESKLOCK); evas_object_show(o); diff --git a/src/modules/lokker/lokker.c b/src/modules/lokker/lokker.c index db9fb8211..0dea67500 100644 --- a/src/modules/lokker/lokker.c +++ b/src/modules/lokker/lokker.c @@ -454,16 +454,48 @@ _lokker_popup_add(E_Zone *zone) edd->elock_wnd_list = eina_list_append(edd->elock_wnd_list, lp); } +static void +_lokker_cb_hide_done(void *data, Evas_Object *obj, const char *sig EINA_UNUSED, const char *src EINA_UNUSED) +{ + Evas_Object *comp_object = evas_object_data_get(obj, "comp_object"); + edje_object_signal_callback_del(obj, "e,action,hide,done", "e", + _lokker_cb_hide_done); + evas_object_del(data); + evas_object_del(obj); + evas_object_hide(comp_object); + evas_object_del(comp_object); +} + static void _lokker_popup_free(Lokker_Popup *lp) { + const char *s; if (!lp) return; - evas_object_hide(lp->comp_object); - evas_object_del(lp->comp_object); - evas_object_del(lp->bg_object); - evas_object_del(lp->login_box); - + s = edje_object_data_get(lp->bg_object, "hide_signal"); + if ((s) && (atoi(s) == 1)) + { + evas_object_data_set(lp->bg_object, "comp_object", lp->comp_object); + evas_object_data_set(lp->bg_object, "login_box", lp->login_box); + edje_object_signal_callback_add(lp->bg_object, + "e,action,hide,done", "e", + _lokker_cb_hide_done, + lp->login_box); + edje_object_signal_emit(lp->bg_object, "e,action,hide", "e"); + edje_object_signal_emit(lp->login_box, "e,action,hide", "e"); + lp->bg_object = NULL; + lp->login_box = NULL; + } + else + { + evas_object_del(lp->bg_object); + evas_object_del(lp->login_box); + evas_object_hide(lp->comp_object); + evas_object_del(lp->comp_object); + lp->comp_object = NULL; + lp->bg_object = NULL; + lp->login_box = NULL; + } free(lp); }