discomfitor pushed a commit to branch master.

http://git.enlightenment.org/core/enlightenment.git/commit/?id=1c4ee0028c59ebaf50f61a55e0fa8317db75a1e9

commit 1c4ee0028c59ebaf50f61a55e0fa8317db75a1e9
Author: Mike Blumenkrantz <[email protected]>
Date:   Fri Jan 6 12:56:22 2017 -0500

    add method for unblocking zones during desklock show/hide
---
 src/bin/e_desklock.c        | 26 ++++++++++++++++++++++++--
 src/bin/e_desklock.h        |  2 ++
 src/modules/lokker/lokker.c | 15 ++++++++++++---
 3 files changed, 38 insertions(+), 5 deletions(-)

diff --git a/src/bin/e_desklock.c b/src/bin/e_desklock.c
index 8f2d626..8ec9234 100644
--- a/src/bin/e_desklock.c
+++ b/src/bin/e_desklock.c
@@ -29,6 +29,7 @@ static Eina_List *show_hooks = NULL;
 static Eina_List *hide_hooks = NULL;
 
 static Evas_Object *block_rects[32] = {NULL};
+static Eina_Bool block_zone[32] = {EINA_FALSE};
 
 static Eina_List *desklock_ifaces = NULL;
 static E_Desklock_Interface *current_iface = NULL;
@@ -302,7 +303,8 @@ e_desklock_show(Eina_Bool suspend)
         evas_object_color_set(o, 0, 0, 0, 255);
         evas_object_geometry_set(o, zone->x, zone->y, zone->w, zone->h);
         evas_object_layer_set(o, E_LAYER_DESKLOCK);
-        evas_object_show(o);
+        if (!block_zone[zone->num])
+          evas_object_show(o);
      }
    if (e_config->desklock_language)
      e_intl_language_set(e_config->desklock_language);
@@ -390,7 +392,10 @@ e_desklock_hide(void)
       unsigned int n;
 
       for (n = 0; n < EINA_C_ARRAY_LENGTH(block_rects); n++)
-        E_FREE_FUNC(block_rects[n], evas_object_del);
+        {
+           E_FREE_FUNC(block_rects[n], evas_object_del);
+           block_zone[n] = EINA_FALSE;
+        }
    }
    //e_comp_block_window_del();
    if (e_config->desklock_language)
@@ -698,3 +703,20 @@ _e_desklock_cb_randr(void *data EINA_UNUSED, int type 
EINA_UNUSED, void *event E
    e_desklock_show(EINA_FALSE);
    return ECORE_CALLBACK_PASS_ON;
 }
+
+E_API void
+e_desklock_zone_block_set(const E_Zone *zone, Eina_Bool block)
+{
+   EINA_SAFETY_ON_NULL_RETURN(zone);
+   if (zone->num >= EINA_C_ARRAY_LENGTH(block_rects))
+     {
+        CRI("> %lu screens connected????", EINA_C_ARRAY_LENGTH(block_rects));
+        return;
+     }
+   block_zone[zone->num] = !!block;
+   if (!block_rects[zone->num]) return;
+   if (block)
+     evas_object_show(block_rects[zone->num]);
+   else
+     evas_object_hide(block_rects[zone->num]);
+}
diff --git a/src/bin/e_desklock.h b/src/bin/e_desklock.h
index 0af3932..6bc694e 100644
--- a/src/bin/e_desklock.h
+++ b/src/bin/e_desklock.h
@@ -56,6 +56,8 @@ E_API void e_desklock_show_hook_del(E_Desklock_Show_Cb cb);
 E_API void e_desklock_hide_hook_add(E_Desklock_Hide_Cb cb);
 E_API void e_desklock_hide_hook_del(E_Desklock_Hide_Cb cb);
 
+E_API void e_desklock_zone_block_set(const E_Zone *zone, Eina_Bool block);
+
 extern E_API int E_EVENT_DESKLOCK;
 
 static inline Eina_Bool
diff --git a/src/modules/lokker/lokker.c b/src/modules/lokker/lokker.c
index 0dea675..c5fe378 100644
--- a/src/modules/lokker/lokker.c
+++ b/src/modules/lokker/lokker.c
@@ -16,6 +16,8 @@ typedef struct Lokker_Popup
    Evas_Object *comp_object;
    Evas_Object *bg_object;
    Evas_Object *login_box;
+   Eina_Bool show_anim : 1;
+   Eina_Bool hide_anim : 1;
 } Lokker_Popup;
 
 typedef struct Lokker_Data
@@ -395,6 +397,14 @@ _lokker_popup_add(E_Zone *zone)
    evas_object_move(lp->bg_object, zone->x, zone->y);
    evas_object_resize(lp->bg_object, zone->w, zone->h);
    evas_object_show(lp->bg_object);
+   {
+      const char *s;
+      s = edje_object_data_get(lp->bg_object, "show_signal");
+      lp->show_anim = s && (atoi(s) == 1);
+      e_desklock_zone_block_set(zone, !lp->show_anim);
+      s = edje_object_data_get(lp->bg_object, "hide_signal");
+      lp->hide_anim = s && (atoi(s) == 1);
+   }
    lp->comp_object = e_comp_object_util_add(lp->bg_object, 0);
    {
       char buf[1024];
@@ -469,11 +479,10 @@ _lokker_cb_hide_done(void *data, Evas_Object *obj, const 
char *sig EINA_UNUSED,
 static void
 _lokker_popup_free(Lokker_Popup *lp)
 {
-   const char *s;
    if (!lp) return;
 
-   s = edje_object_data_get(lp->bg_object, "hide_signal");
-   if ((s) && (atoi(s) == 1))
+   e_desklock_zone_block_set(lp->zone, !lp->hide_anim);
+   if (lp->hide_anim)
      {
         evas_object_data_set(lp->bg_object, "comp_object", lp->comp_object);
         evas_object_data_set(lp->bg_object, "login_box", lp->login_box);

-- 


Reply via email to