From 9f640163b6b847bc3632170d54307186a46c2173 Mon Sep 17 00:00:00 2001 From: SooChan Lim Date: Mon, 18 Dec 2023 13:56:43 +0900 Subject: [PATCH] e_desk_area: delegate e_comp_object_stack_below The e_desk_area implements the e_comp_object_stack_below function. Change-Id: Id42f2a82811b7560ee0340f55ffb2c36a9f46198 --- src/bin/e_comp_object.c | 24 +++++++++++++++++++++++- src/bin/e_comp_object_intern.h | 1 + src/bin/e_desk_area.c | 29 +++++++++++++++++++++++++++-- 3 files changed, 51 insertions(+), 3 deletions(-) diff --git a/src/bin/e_comp_object.c b/src/bin/e_comp_object.c index 1abc154..51798e7 100644 --- a/src/bin/e_comp_object.c +++ b/src/bin/e_comp_object.c @@ -1992,8 +1992,13 @@ _e_comp_object_stack_above(Evas_Object *obj, Evas_Object *target) } } +#ifdef REFACTOR_DESK_AREA +EINTERN void +_e_comp_object_stack_below(Evas_Object *obj, Evas_Object *target) +#else static void _e_comp_object_stack_below(Evas_Object *obj, Evas_Object *target) +#endif { evas_object_stack_below(obj, target); @@ -2227,18 +2232,35 @@ static void _e_comp_intercept_stack_below(void *data, Evas_Object *obj, Evas_Object *below) { EINA_SAFETY_ON_TRUE_RETURN(obj == below); + + TRACE_DS_BEGIN(COMP:INTERCEPT STACK BELOW); + +#ifdef REFACTOR_DESK_AREA + E_Comp_Object *cw = data; + E_Comp_Object_Data_Stack_Below stack_below_data; + + stack_below_data.cw = cw; + stack_below_data.below_obj = below; + + wl_signal_emit_mutable(&cw->events.stack_below, &stack_below_data); + + if (!cw->visible) + e_comp_render_queue(); +#else if (evas_object_above_get(obj) == below) { e_comp_object_layer_update(obj, NULL, below); return; } - TRACE_DS_BEGIN(COMP:INTERCEPT STACK BELOW); _e_comp_intercept_stack_helper(data, below, _e_comp_object_stack_below); + if (evas_object_smart_smart_get(obj)) _e_comp_object_transform_obj_stack_update(obj); if (evas_object_smart_smart_get(below)) _e_comp_object_transform_obj_stack_update(below); +#endif + TRACE_DS_END(); } diff --git a/src/bin/e_comp_object_intern.h b/src/bin/e_comp_object_intern.h index 0e6950d..eb5c3b8 100644 --- a/src/bin/e_comp_object_intern.h +++ b/src/bin/e_comp_object_intern.h @@ -172,6 +172,7 @@ EINTERN void _e_comp_object_layers_add(E_Comp_Object *cw, E_Comp_Object *above, EINTERN void _e_comp_object_layers_remove(E_Comp_Object *cw); EINTERN void e_comp_object_layer_set(Evas_Object *obj, short layer); EINTERN void _e_comp_object_stack_above(Evas_Object *obj, Evas_Object *target); +EINTERN void _e_comp_object_stack_below(Evas_Object *obj, Evas_Object *target); EINTERN void _e_comp_intercept_stack_helper(E_Comp_Object *cw, Evas_Object *stack, E_Comp_Object_Stack_Func stack_cb); EINTERN void _e_comp_object_transform_obj_stack_update(Evas_Object *obj); //#endif diff --git a/src/bin/e_desk_area.c b/src/bin/e_desk_area.c index 1f61b52..3bd2533 100644 --- a/src/bin/e_desk_area.c +++ b/src/bin/e_desk_area.c @@ -676,7 +676,7 @@ _desk_area_cb_comp_object_stack_above(struct wl_listener *listener, void *data) E_Comp_Object_Data_Stack_Above *stack_above_data; E_Comp_Object *cw; - eda_client = wl_container_of(listener, eda_client, comp_object_set_layer); + eda_client = wl_container_of(listener, eda_client, comp_object_stack_above); ec = eda_client->ec; obj = ec->frame; stack_above_data = (E_Comp_Object_Data_Stack_Above *)data; @@ -699,7 +699,32 @@ _desk_area_cb_comp_object_stack_above(struct wl_listener *listener, void *data) static void _desk_area_cb_comp_object_stack_below(struct wl_listener *listener, void *data) { - // TODO: + E_Desk_Area_Private_Client *eda_client; + E_Client *ec; + Evas_Object *obj, *below; + E_Comp_Object_Data_Stack_Below *stack_below_data; + E_Comp_Object *cw; + + eda_client = wl_container_of(listener, eda_client, comp_object_stack_below); + ec = eda_client->ec; + obj = ec->frame; + stack_below_data = (E_Comp_Object_Data_Stack_Below *)data; + cw = stack_below_data->cw; + below = stack_below_data->below_obj; + + if (evas_object_above_get(obj) == below) + { + e_comp_object_layer_update(obj, NULL, below); + return; + } + + _e_comp_intercept_stack_helper(cw, below, _e_comp_object_stack_below); + + if (evas_object_smart_smart_get(obj)) + _e_comp_object_transform_obj_stack_update(obj); + if (evas_object_smart_smart_get(below)) + _e_comp_object_transform_obj_stack_update(below); + } static Eina_Bool -- 2.7.4