add method for unblocking zones during desklock show/hide

This commit is contained in:
Mike Blumenkrantz 2017-01-06 12:56:22 -05:00 committed by Derek Foreman
parent 912eb66b70
commit 1c4ee0028c
3 changed files with 38 additions and 5 deletions

View File

@ -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]);
}

View File

@ -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

View File

@ -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);