From: Junseok Kim Date: Wed, 22 Mar 2023 10:57:04 +0000 (+0900) Subject: e_desk_group: Add API for resizing method of window in desk_group X-Git-Tag: accepted/tizen/7.0/unified/20230526.164239~7 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=refs%2Fchanges%2F36%2F293236%2F2;p=platform%2Fupstream%2Fenlightenment.git e_desk_group: Add API for resizing method of window in desk_group Add API for choose resizing method of window in desk group. when the e_desk_group_transform_enable_set receives True value, the window in desk group will be transformed to fit to geometry of desk group same as before. when disabled, then the window will be resized their client size to fit to geometry of desk group. NOTE: current maximize size of the window is fit to desk. e_client_maximized_geometry_set should be called after transform disable to set maximize size as geometry of desk_group. Change-Id: I4175fe01cb1a4cca6dca5a296a8c27ad3a606ec1 --- diff --git a/src/bin/e_client.c b/src/bin/e_client.c index 86c7c4ca3a..fc44cdd26b 100644 --- a/src/bin/e_client.c +++ b/src/bin/e_client.c @@ -8680,14 +8680,12 @@ e_client_desk_group_enable_set(E_Client *ec, Eina_Bool enable) { ec->desk_group.transform = e_util_transform_new(); e_util_transform_role_set(ec->desk_group.transform, "desk_group"); - e_client_transform_core_add(ec, ec->desk_group.transform); } } else { if (ec->desk_group.transform) { - e_client_transform_core_remove(ec, ec->desk_group.transform); e_util_transform_del(ec->desk_group.transform); ec->desk_group.transform = NULL; } diff --git a/src/bin/e_desk_group.c b/src/bin/e_desk_group.c index 5bf4f2e6f9..f46d93560d 100644 --- a/src/bin/e_desk_group.c +++ b/src/bin/e_desk_group.c @@ -227,18 +227,39 @@ e_desk_group_del(E_Desk_Group *edg) void _e_desk_group_ec_geometry_apply(E_Desk_Group *edg, E_Client *ec) { + E_Maximize max; E_Util_Transform *transform; - transform = ec->desk_group.transform; - if (!transform) return; - if (e_comp_wl_subsurface_check(ec)) return; - e_util_transform_move(transform, edg->x, edg->y, 0); - e_util_transform_scale(transform, edg->scale_w, edg->scale_h, 1.0); + transform = ec->desk_group.transform; - e_client_transform_core_update(ec); + if (edg->transform_enabled) + { + if (!transform) return; + + e_util_transform_move(transform, edg->x, edg->y, 0); + e_util_transform_scale(transform, edg->scale_w, edg->scale_h, 1.0); + e_client_transform_core_add(ec, transform); + + e_client_transform_core_update(ec); + } + else + { + if (transform) + { + e_util_transform_move(transform, 0, 0, 0); + e_util_transform_scale(transform, 1.0, 1.0, 1.0); + e_client_transform_core_remove(ec, transform); + + e_client_transform_core_update(ec); + } + + max = ec->maximized; + ec->maximized = E_MAXIMIZE_NONE; + e_client_maximize(ec, max); + } } void _e_desk_group_ec_geometry_restore(E_Desk_Group *edg, E_Client *ec) @@ -928,6 +949,22 @@ e_desk_group_ec_list_get(E_Desk_Group *edg) return NULL; } +E_API void +e_desk_group_transform_enable_set(E_Desk_Group *edg, Eina_Bool enable) +{ + if (!edg) return; + + edg->transform_enabled = enable; +} + +E_API Eina_Bool +e_desk_group_transform_enable_get(E_Desk_Group *edg) +{ + if (!edg) return EINA_FALSE; + + return edg->transform_enabled; +} + // for debug EINTERN void @@ -1027,4 +1064,4 @@ e_desk_group_hook_del(E_Desk_Group_Hook * dgh) } else _e_desk_group_hooks_delete++; -} +} \ No newline at end of file diff --git a/src/bin/e_desk_group.h b/src/bin/e_desk_group.h index 7f1543258b..2bb74df423 100644 --- a/src/bin/e_desk_group.h +++ b/src/bin/e_desk_group.h @@ -46,6 +46,7 @@ struct _E_Desk_Group unsigned char enable : 1; unsigned char visible : 1; unsigned char active : 1; + unsigned char transform_enabled : 1; Eina_List *ec_lists[E_DESK_GROUP_CLIENT_LAYER_MAX]; Eina_List *handlers; @@ -94,6 +95,9 @@ E_API void e_desk_group_all_ec_update(E_Desk_Group *edg); E_API Eina_List *e_desk_group_ec_list_get(E_Desk_Group *edg); +E_API void e_desk_group_transform_enable_set(E_Desk_Group *edg, Eina_Bool enable); +E_API Eina_Bool e_desk_group_transform_enable_get(E_Desk_Group *edg); + // for debug EINTERN void e_desk_group_info_print(E_Desk_Group *edg);