desklock - use immediate show for lock on suspend etc.

makes lock more correct and not fade in on lock on suspend

@feat
This commit is contained in:
Carsten Haitzler 2023-02-10 22:21:54 +00:00
parent fd3e4a645d
commit cb2bc1d1c1
5 changed files with 52 additions and 19 deletions

View File

@ -2881,7 +2881,7 @@ disp_err:
}
static Eina_Bool
_e_comp_wl_desklock_show(void)
_e_comp_wl_desklock_show(Eina_Bool immediate EINA_UNUSED)
{
return e_comp_grab_input(1, 1);
}

View File

@ -124,7 +124,7 @@ e_desklock_interface_append(E_Desklock_Interface *iface)
desklock_ifaces = eina_list_append(desklock_ifaces, (void*)iface);
if (_e_desklock_state && (!current_iface))
{
if (iface->show())
if (iface->show(EINA_TRUE))
{
iface->active = EINA_TRUE;
current_iface = iface;
@ -155,7 +155,7 @@ e_desklock_interface_remove(E_Desklock_Interface *iface)
/* then try to find a replacement locker */
EINA_LIST_REVERSE_FOREACH(desklock_ifaces, l, diface)
{
if (!diface->show()) continue;
if (!diface->show(EINA_TRUE)) continue;
diface->active = EINA_TRUE;
current_iface = diface;
break;
@ -209,7 +209,7 @@ e_desklock_demo(void)
EINA_LIST_REVERSE_FOREACH(desklock_ifaces, l, iface)
{
if (iface->show())
if (iface->show(EINA_FALSE))
{
demo = iface->active = EINA_TRUE;
current_iface = iface;
@ -254,7 +254,7 @@ _desklock_show_internal(Eina_Bool suspend)
e_menu_hide_all();
EINA_LIST_FOREACH(show_hooks, l, show_cb)
{
if (!show_cb()) goto fail;
if (!show_cb(suspend)) goto fail;
}
EINA_LIST_FOREACH(e_comp->zones, l, zone)
@ -295,7 +295,7 @@ _desklock_show_internal(Eina_Bool suspend)
EINA_LIST_REVERSE_FOREACH(desklock_ifaces, l, iface)
{
success = iface->show();
success = iface->show(suspend);
if (success)
{
iface->active = EINA_TRUE;

View File

@ -1,7 +1,7 @@
#ifdef E_TYPEDEFS
typedef struct _E_Event_Desklock E_Event_Desklock;
typedef Eina_Bool (*E_Desklock_Show_Cb)(void);
typedef Eina_Bool (*E_Desklock_Show_Cb)(Eina_Bool immediate);
typedef void (*E_Desklock_Hide_Cb)(void);
typedef enum _E_Desklock_Background_Method {

View File

@ -24,7 +24,7 @@ typedef enum
E_DESKLOCK_AUTH_METHOD_LINES = 4,
} E_Desklock_Auth_Method2;
EINTERN Eina_Bool lokker_lock(void);
EINTERN Eina_Bool lokker_lock(Eina_Bool immediate);
EINTERN void lokker_unlock(void);
E_API E_Config_Dialog *e_int_config_lokker(Evas_Object *parent, const char *params EINA_UNUSED);
EINTERN Eina_Bool lokker_key_down(Ecore_Event_Key*);

View File

@ -343,7 +343,7 @@ _lokker_cb_show_done(void *data, Evas_Object *obj EINA_UNUSED, const char *sig E
}
static void
_lokker_popup_add(E_Zone *zone)
_lokker_popup_add(E_Zone *zone, Eina_Bool immediate)
{
E_Zone *current_zone;
Evas_Object *o = NULL;
@ -353,6 +353,7 @@ _lokker_popup_add(E_Zone *zone)
Eina_Stringshare *bg;
Evas *evas;
int nocreate = 0;
Eina_Bool is_edje = EINA_FALSE;
lp = E_NEW(Lokker_Popup, 1);
cbg = eina_list_nth(e_config->desklock_backgrounds, zone->num);
@ -366,6 +367,7 @@ _lokker_popup_add(E_Zone *zone)
{
o = edje_object_add(evas);
evas_object_data_set(o, "is_edje", o);
is_edje = EINA_TRUE;
e_theme_edje_object_set(o, "base/theme/desklock",
"e/desklock/background");
}
@ -373,6 +375,7 @@ _lokker_popup_add(E_Zone *zone)
{
o = edje_object_add(evas);
evas_object_data_set(o, "is_edje", o);
is_edje = EINA_TRUE;
e_theme_edje_object_set(o, "base/theme/backgrounds",
"e/desktop/background");
}
@ -389,6 +392,7 @@ _lokker_popup_add(E_Zone *zone)
{
o = edje_object_add(evas);
evas_object_data_set(o, "is_edje", o);
is_edje = EINA_TRUE;
if (e_util_edje_collection_exists(f, "e/desklock/background"))
{
edje_object_file_set(o, f, "e/desklock/background");
@ -426,15 +430,25 @@ _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);
if (is_edje)
{
const char *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);
if ((lp->show_anim) &&
(evas_object_data_get(lp->bg_object, "is_edje")))
edje_object_signal_callback_add(lp->bg_object,
"e,action,show,done", "e",
_lokker_cb_show_done, lp);
if (immediate)
{
edje_object_signal_emit(lp->bg_object,
"e,action,show,immediate", "e");
}
else
{
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);
if (lp->show_anim)
edje_object_signal_callback_add(lp->bg_object,
"e,action,show,done", "e",
_lokker_cb_show_done, lp);
}
s = edje_object_data_get(lp->bg_object, "hide_signal");
lp->hide_anim = s && (atoi(s) == 1);
}
@ -494,6 +508,18 @@ _lokker_popup_add(E_Zone *zone)
edd->elock_wnd_list = eina_list_append(edd->elock_wnd_list, lp);
}
static void
_lokker_popup_add_normal(E_Zone *zone)
{
_lokker_popup_add(zone, EINA_FALSE);
}
static void
_lokker_popup_add_immediate(E_Zone *zone)
{
_lokker_popup_add(zone, EINA_TRUE);
}
static void
_lokker_cb_hide_done(void *data, Evas_Object *obj, const char *sig EINA_UNUSED, const char *src EINA_UNUSED)
{
@ -627,7 +653,7 @@ _lokker_cb_zone_add(void *data EINA_UNUSED,
if (!edd) return ECORE_CALLBACK_PASS_ON;
if ((!edd->move_handler) && (e_config->desklock_login_box_zone == -2))
edd->move_handler = ecore_event_handler_add(ECORE_EVENT_MOUSE_MOVE, _lokker_cb_mouse_move, NULL);
if (!_lokker_popup_find(ev->zone)) _lokker_popup_add(ev->zone);
if (!_lokker_popup_find(ev->zone)) _lokker_popup_add_immediate(ev->zone);
return ECORE_CALLBACK_PASS_ON;
}
@ -900,7 +926,7 @@ lokker_key_down(Ecore_Event_Key *ev)
}
EINTERN Eina_Bool
lokker_lock(void)
lokker_lock(Eina_Bool immediate)
{
int total_zone_num = 0;
@ -921,7 +947,14 @@ lokker_lock(void)
#endif
e_pointer_type_push(e_comp->pointer, edd, "default");
E_LIST_FOREACH(e_comp->zones, _lokker_popup_add);
if (immediate)
{
E_LIST_FOREACH(e_comp->zones, _lokker_popup_add_immediate);
}
else
{
E_LIST_FOREACH(e_comp->zones, _lokker_popup_add_normal);
}
total_zone_num = eina_list_count(e_comp->zones);
/* handlers */