From 40f03c9b6f22fb054edabf9b060f69dbf9550177 Mon Sep 17 00:00:00 2001 From: Juyeon Lee Date: Wed, 25 Mar 2020 00:16:59 +0900 Subject: [PATCH] e_client: add e_client_layer_get() to get client layer client allowed layer is from E_LAYER_CLIENT_DESKTOP to E_LAYER_CLIENT_CURSOR for any reason, client could be placed on temperary layer out of range E_LAYER_CLIENT if it is intended behavior(like effect module animates +1 temp.wq layer while pending) this API shall return client layer where it retores back. if it is not intended behavior this API returns E_LAYER_BOTTOM just in case. Change-Id: Ic157dc46ef02a752c905a1b9f5f24c5e3caa1027 --- src/bin/e_client.c | 28 ++++++++++++++++++++++++++++ src/bin/e_client.h | 4 ++++ 2 files changed, 32 insertions(+) diff --git a/src/bin/e_client.c b/src/bin/e_client.c index b52db434a8..6dfcdc179e 100644 --- a/src/bin/e_client.c +++ b/src/bin/e_client.c @@ -7811,6 +7811,34 @@ e_client_layer_set(E_Client *ec, return EINA_TRUE; } +E_API E_Layer +e_client_layer_get(E_Client *ec) +{ + short layer; + + E_OBJECT_CHECK_RETURN(ec, E_LAYER_BOTTOM); + E_OBJECT_TYPE_CHECK_RETURN(ec, E_CLIENT_TYPE, E_LAYER_BOTTOM); + if (!ec->frame) return E_LAYER_BOTTOM; + + layer = evas_object_layer_get(ec->frame); + if (ec->layer != layer) + { + /* client could be on temperory layer while pending or block, + * in that case, client restores back to ec->layer after pending/block finish */ + if (ec->layer_block || ec->layer_pending) + return ec->layer; + + /* otherwise, client is on unexpected layer */ + ELOGF("LAYER", "layer dismatch ec->layer %d | evas obj layer %d ", + ec, ec->layer, layer); + + if (e_comp_canvas_client_layer_map(layer) == 9999) + return E_LAYER_BOTTOM; //not on E_LAYER_CLIENT + } + + return ec->layer; +} + EINTERN Eina_Bool e_client_desk_group_layer_set(E_Client *ec, E_Desk_Group_Layer layer) { diff --git a/src/bin/e_client.h b/src/bin/e_client.h index 2ba8e71cca..25daf92ad8 100644 --- a/src/bin/e_client.h +++ b/src/bin/e_client.h @@ -1217,6 +1217,10 @@ EINTERN Eina_Bool e_client_pending_geometry_has(E_Client *ec); E_API void e_client_frame_focus_set(E_Client *ec, Eina_Bool focus); E_API Eina_Bool e_client_layer_set(E_Client *ec, E_Layer layer); +/* client layer shall be placed on range between E_LAYER_CLIENT_DESKTOP and E_LAYER_CLIENT_CURSOR + * if it is in unexpected layer return E_LAYER_BOTTOM otherwise + */ +E_API E_Layer e_client_layer_get(E_Client *ec); EINTERN Eina_Bool e_client_desk_group_layer_set(E_Client *ec, E_Desk_Group_Layer layer); EINTERN E_Desk_Group_Layer e_client_desk_group_layer_get(E_Client *ec); -- 2.34.1