From 6f6c810a6f6f68faa63669a14d15c9967d75cd1c Mon Sep 17 00:00:00 2001 From: SooChan Lim Date: Thu, 14 Dec 2023 17:05:28 +0900 Subject: [PATCH] e_desk_area: implement the client_subsurface_stack_update callback function Change-Id: Ide8c4338af6d3980917d795a436ccd1ef8c8ece4 --- src/bin/e_client.h | 2 ++ src/bin/e_comp_wl_subsurface.c | 4 ++++ src/bin/e_desk_area.c | 31 ++++++++++++++++++++++++++++++- 3 files changed, 36 insertions(+), 1 deletion(-) diff --git a/src/bin/e_client.h b/src/bin/e_client.h index efdccaf..9f735a0 100644 --- a/src/bin/e_client.h +++ b/src/bin/e_client.h @@ -1319,7 +1319,9 @@ EINTERN Eina_Bool e_client_is_parent_iconify_by_client(E_Client *ec); EINTERN void e_client_stack_transient_for_done_notify(E_Client *ec); +//#ifdef REFACTOR_DESK_AREA EINTERN void e_client_subsurface_stack_update(E_Client *ec); +//#endif /** * Move window to coordinates that do not account client decorations yet. diff --git a/src/bin/e_comp_wl_subsurface.c b/src/bin/e_comp_wl_subsurface.c index 371bba6..3f891d6 100644 --- a/src/bin/e_comp_wl_subsurface.c +++ b/src/bin/e_comp_wl_subsurface.c @@ -929,6 +929,9 @@ _e_comp_wl_subsurface_stack_update(E_Client *ec) _e_comp_wl_subsurface_restack(topmost); _e_comp_wl_subsurface_restack_bg_rectangle(topmost); +#ifdef REFACTOR_DESK_AREA + e_client_subsurface_stack_update(ec); +#else //To update client stack list if ((ec->comp_data->sub.data) && (ec->comp_data->sub.data->parent)) @@ -953,4 +956,5 @@ _e_comp_wl_subsurface_stack_update(E_Client *ec) e_comp_object_layer_update(ec->frame, NULL, o); } } +#endif } diff --git a/src/bin/e_desk_area.c b/src/bin/e_desk_area.c index 0520202..c3ae33b 100644 --- a/src/bin/e_desk_area.c +++ b/src/bin/e_desk_area.c @@ -503,7 +503,36 @@ _desk_area_cb_client_get_below(struct wl_listener *listener, void *data) static void _desk_area_cb_client_subsurface_stack_update(struct wl_listener *listener, void *data) { - // TODO: + E_Desk_Area_Private_Client *eda_client; + E_Client *ec; + + eda_client = wl_container_of(listener, eda_client, client_subsurface_stack_update); + ec = eda_client->ec; + + //To update client stack list + if ((ec->comp_data->sub.data) && + (ec->comp_data->sub.data->parent)) + { + E_Client *parent; + Evas_Object *o; + + parent = ec->comp_data->sub.data->parent; + + if ((parent->comp_data->sub.list) && + (eina_list_data_find(parent->comp_data->sub.list, ec))) + { + //stack above done + o = evas_object_below_get(ec->frame); + e_comp_object_layer_update(ec->frame, o, NULL); + } + else if ((parent->comp_data->sub.below_list) && + (eina_list_data_find(parent->comp_data->sub.below_list, ec))) + { + //stack below done + o = evas_object_above_get(ec->frame); + e_comp_object_layer_update(ec->frame, NULL, o); + } + } } static void _desk_area_cb_comp_object_lower(struct wl_listener *listener, void *data) -- 2.7.4