e_desk_group: Add API for resizing method of window in desk_group 36/293236/2
authorJunseok Kim <juns.kim@samsung.com>
Wed, 22 Mar 2023 10:57:04 +0000 (19:57 +0900)
committerJunseok Kim <juns.kim@samsung.com>
Tue, 23 May 2023 04:14:26 +0000 (13:14 +0900)
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

src/bin/e_client.c
src/bin/e_desk_group.c
src/bin/e_desk_group.h

index 86c7c4ca3aed8e81cbad40d8e82758e56161b9ab..fc44cdd26bbc0840d02372e5b14a5ce4062da18f 100644 (file)
@@ -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;
           }
index 5bf4f2e6f9bf3ae2aeee5879f149f763cfa96ea3..f46d93560dac87b123a852162840a1570511319b 100644 (file)
@@ -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
index 7f1543258bc225d49d2ce50c365509e3fc2d9fd8..2bb74df42362726d814efea6b09f1d112863b259 100644 (file)
@@ -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);