e_client/e_zone: refactor code to maximize window 02/300502/1
authorDoyoun Kang <doyoun.kang@samsung.com>
Thu, 26 Oct 2023 07:00:00 +0000 (16:00 +0900)
committerTizen Window System <tizen.windowsystem@gmail.com>
Thu, 26 Oct 2023 08:06:15 +0000 (17:06 +0900)
1. fix bug for E_MAXIMIZE_FULLSCREEN | MAXIMIZE_RIGHT case.
2. remove unnecessary code

Change-Id: I6139c6fac1dcc583eae1dfe379c1a6a15eba3730

src/bin/e_client.c
src/bin/e_zone.c

index 6101354..c075e01 100644 (file)
@@ -2583,9 +2583,7 @@ static void
 _e_client_maximize(E_Client *ec, E_Maximize max)
 {
    int x1, yy1, x2, y2;
-   int w, h, pw, ph;
    int zx, zy, zw, zh;
-   int ecx, ecy, ecw, ech;
    int desk_x, desk_y, desk_w, desk_h;
    Eina_Bool override = ec->maximize_override;
    E_Zone *zone;
@@ -2603,179 +2601,115 @@ _e_client_maximize(E_Client *ec, E_Maximize max)
         desk_w = ec->desk_area.desk_area->w;
         desk_h = ec->desk_area.desk_area->h;
      }
-    else
-    {
+   else
+     {
         desk_x = ec->desk->geom.x;
         desk_y = ec->desk->geom.y;
         desk_w = ec->desk->geom.w;
         desk_h = ec->desk->geom.h;
-    }
+     }
 
    switch (max & E_MAXIMIZE_TYPE)
      {
       case E_MAXIMIZE_NONE:
-        /* Ignore */
-        break;
+         /* Ignore */
+         break;
 
       case E_MAXIMIZE_FULLSCREEN:
-        w = desk_w;
-        h = desk_h;
-
-        e_client_resize_limit(ec, &w, &h);
-        /* center x-direction */
-        x1 = desk_x + (desk_w - w) / 2;
-        /* center y-direction */
-        yy1 = desk_y + (desk_h - h) / 2;
-
-        switch (max & E_MAXIMIZE_DIRECTION)
-          {
-           case E_MAXIMIZE_BOTH:
-             e_client_maximized_geometry_set(ec, x1, yy1, w, h);
-             break;
+      case E_MAXIMIZE_FILL:
+         if (ec->base_output_resolution.use)
+           {
+              zx = desk_x;
+              zy = desk_y;
+              zw = ec->base_output_resolution.w;
+              zh = ec->base_output_resolution.h;
+           }
+         else
+           {
+              e_zone_desk_useful_geometry_get(zone, ec->desk, &zx, &zy, &zw, &zh, EINA_FALSE);
+           }
+
+         switch (max & E_MAXIMIZE_DIRECTION)
+           {
+            case E_MAXIMIZE_BOTH:
+               e_client_maximized_geometry_set(ec, zx, zy, zw, zh);
+               break;
 
-           case E_MAXIMIZE_VERTICAL:
-             e_client_maximized_geometry_set(ec, ec->x, yy1, ec->w, h);
-             break;
+            case E_MAXIMIZE_VERTICAL:
+               e_client_maximized_geometry_set(ec, ec->x, zy, ec->w, zh);
+               break;
 
-           case E_MAXIMIZE_HORIZONTAL:
-             e_client_maximized_geometry_set(ec, x1, ec->y, w, ec->h);
-             break;
+            case E_MAXIMIZE_HORIZONTAL:
+               e_client_maximized_geometry_set(ec, zx, ec->y, zw, ec->h);
+               break;
 
-           case E_MAXIMIZE_LEFT:
-             e_client_maximized_geometry_set(ec, desk_x, desk_y, w / 2, h);
-             break;
+            case E_MAXIMIZE_LEFT:
+               e_client_maximized_geometry_set(ec, zx, zy, zw / 2, zh);
+               break;
 
-           case E_MAXIMIZE_RIGHT:
-             e_client_maximized_geometry_set(ec, x1, desk_y, w / 2, h);
-             break;
-          }
-        break;
+            case E_MAXIMIZE_RIGHT:
+               e_client_maximized_geometry_set(ec, zx + zw / 2, zy, zw / 2, zh);
+               break;
+           }
+         break;
 
       case E_MAXIMIZE_SMART:
       case E_MAXIMIZE_EXPAND:
-        if (ec->desk->visible)
-          {
-             // base_output_resolution
-             if (ec->base_output_resolution.use)
-               {
-                  zx = desk_x;
-                  zy = desk_y;
-                  zw = ec->base_output_resolution.w;
-                  zh = ec->base_output_resolution.h;
-               }
-             else
-               {
-                  e_zone_desk_useful_geometry_get(zone, ec->desk, &zx, &zy, &zw, &zh, EINA_TRUE);
-               }
-          }
-        else
-          {
-             x1 = desk_x;
-             yy1 = desk_y;
-             x2 = desk_x + desk_w;
-             y2 = desk_y + desk_h;
-             e_maximize_client_shelf_fill(ec, &x1, &yy1, &x2, &y2, max);
-             zx = x1, zy = yy1;
-             zw = x2 - x1;
-             zh = y2 - yy1;
-          }
-        w = zw, h = zh;
-
-        evas_object_smart_callback_call(ec->frame, "maximize", NULL);
-        e_comp_object_frame_xy_unadjust(ec->frame, ec->x, ec->y, &ecx, &ecy);
-        e_comp_object_frame_wh_unadjust(ec->frame, ec->w, ec->h, &ecw, &ech);
-
-        if (ecw < zw)
-          w = ecw;
-
-        if (ech < zh)
-          h = ech;
-
-        if (ecx < zx) // window left not useful coordinates
-          x1 = zx;
-        else if (ecx + ecw > zx + zw) // window right not useful coordinates
-          x1 = zx + zw - ecw;
-        else // window normal position
-          x1 = ecx;
-
-        if (ecy < zy) // window top not useful coordinates
-          yy1 = zy;
-        else if (ecy + ech > zy + zh) // window bottom not useful coordinates
-          yy1 = zy + zh - ech;
-        else // window normal position
-          yy1 = ecy;
-
-        switch (max & E_MAXIMIZE_DIRECTION)
-          {
-           case E_MAXIMIZE_BOTH:
-             e_client_maximized_geometry_set(ec, zx, zy, zw, zh);
-             break;
-
-           case E_MAXIMIZE_VERTICAL:
-             e_client_maximized_geometry_set(ec, ec->x, zy, ec->w, zh);
-             break;
-
-           case E_MAXIMIZE_HORIZONTAL:
-             e_client_maximized_geometry_set(ec, zx, ec->y, zw, ec->h);
-             break;
-
-           case E_MAXIMIZE_LEFT:
-             e_client_maximized_geometry_set(ec, zx, zy, zw / 2, zh);
-             break;
-
-           case E_MAXIMIZE_RIGHT:
-             e_client_maximized_geometry_set(ec, zx + zw / 2, zy, zw / 2, zh);
-             break;
-          }
-
-        break;
+         if (ec->desk->visible)
+           {
+              // base_output_resolution
+              if (ec->base_output_resolution.use)
+                {
+                   zx = desk_x;
+                   zy = desk_y;
+                   zw = ec->base_output_resolution.w;
+                   zh = ec->base_output_resolution.h;
+                }
+              else
+                {
+                   e_zone_desk_useful_geometry_get(zone, ec->desk, &zx, &zy, &zw, &zh, EINA_TRUE);
+                }
+           }
+         else
+           {
+              x1 = desk_x;
+              yy1 = desk_y;
+              x2 = desk_x + desk_w;
+              y2 = desk_y + desk_h;
+              e_maximize_client_shelf_fill(ec, &x1, &yy1, &x2, &y2, max);
+              zx = x1, zy = yy1;
+              zw = x2 - x1;
+              zh = y2 - yy1;
+           }
+
+         evas_object_smart_callback_call(ec->frame, "maximize", NULL);
+
+         switch (max & E_MAXIMIZE_DIRECTION)
+           {
+            case E_MAXIMIZE_BOTH:
+               e_client_maximized_geometry_set(ec, zx, zy, zw, zh);
+               break;
 
-      case E_MAXIMIZE_FILL:
-        x1 = desk_x;
-        yy1 = desk_y;
-        x2 = desk_x + desk_w;
-        y2 = desk_y + desk_h;
-
-        /* walk through all shelves */
-        e_maximize_client_shelf_fill(ec, &x1, &yy1, &x2, &y2, max);
-
-        /* walk through all windows */
-        e_maximize_client_client_fill(ec, &x1, &yy1, &x2, &y2, max);
-
-        w = x2 - x1;
-        h = y2 - yy1;
-        pw = w;
-        ph = h;
-        e_client_resize_limit(ec, &w, &h);
-        /* center x-direction */
-        x1 = x1 + (pw - w) / 2;
-        /* center y-direction */
-        yy1 = yy1 + (ph - h) / 2;
-
-        switch (max & E_MAXIMIZE_DIRECTION)
-          {
-           case E_MAXIMIZE_BOTH:
-             e_client_maximized_geometry_set(ec, x1, yy1, w, h);
-             break;
+            case E_MAXIMIZE_VERTICAL:
+               e_client_maximized_geometry_set(ec, ec->x, zy, ec->w, zh);
+               break;
 
-           case E_MAXIMIZE_VERTICAL:
-             e_client_maximized_geometry_set(ec, ec->x, yy1, ec->w, h);
-             break;
+            case E_MAXIMIZE_HORIZONTAL:
+               e_client_maximized_geometry_set(ec, zx, ec->y, zw, ec->h);
+               break;
 
-           case E_MAXIMIZE_HORIZONTAL:
-             e_client_maximized_geometry_set(ec, x1, ec->y, w, ec->h);
-             break;
+            case E_MAXIMIZE_LEFT:
+               e_client_maximized_geometry_set(ec, zx, zy, zw / 2, zh);
+               break;
 
-           case E_MAXIMIZE_LEFT:
-             e_client_maximized_geometry_set(ec, desk_x, desk_y, w / 2, h);
-             break;
+            case E_MAXIMIZE_RIGHT:
+               e_client_maximized_geometry_set(ec, zx + zw / 2, zy, zw / 2, zh);
+               break;
+           }
 
-           case E_MAXIMIZE_RIGHT:
-             e_client_maximized_geometry_set(ec, x1, desk_y, w / 2, h);
-             break;
-          }
-        break;
+         break;
      }
+
    if (ec->maximize_override)
      ec->maximize_override = override;
 }
index fe22bf2..8c8baa2 100644 (file)
@@ -148,9 +148,7 @@ static void
 _e_zone_client_maximize(E_Zone *zone, E_Desk *desk, E_Client *ec, E_Maximize max)
 {
    int x1, yy1, x2, y2;
-   int w, h, pw, ph;
    int zx, zy, zw, zh;
-   int ecx, ecy, ecw, ech;
    int desk_x, desk_y, desk_w, desk_h;
    Eina_Bool override = ec->maximize_override;
 
@@ -164,179 +162,114 @@ _e_zone_client_maximize(E_Zone *zone, E_Desk *desk, E_Client *ec, E_Maximize max
         desk_w = ec->desk_area.desk_area->w;
         desk_h = ec->desk_area.desk_area->h;
      }
-    else
-    {
+   else
+     {
         desk_x = desk->geom.x;
         desk_y = desk->geom.y;
         desk_w = desk->geom.w;
         desk_h = desk->geom.h;
-    }
+     }
 
    switch (max & E_MAXIMIZE_TYPE)
      {
       case E_MAXIMIZE_NONE:
-        /* Ignore */
-        break;
+         /* Ignore */
+         break;
 
       case E_MAXIMIZE_FULLSCREEN:
-        w = desk_w;
-        h = desk_h;
-
-        e_client_resize_limit(ec, &w, &h);
-        /* center x-direction */
-        x1 = desk_x + (desk_w - w) / 2;
-        /* center y-direction */
-        yy1 = desk_y + (desk_h - h) / 2;
+      case E_MAXIMIZE_FILL:
+         if (ec->base_output_resolution.use)
+           {
+              zx = desk_x;
+              zy = desk_y;
+              zw = ec->base_output_resolution.w;
+              zh = ec->base_output_resolution.h;
+           }
+         else
+           {
+              e_zone_desk_useful_geometry_get(zone, desk, &zx, &zy, &zw, &zh, EINA_FALSE);
+           }
 
-        switch (max & E_MAXIMIZE_DIRECTION)
-          {
-           case E_MAXIMIZE_BOTH:
-             e_client_maximized_geometry_set(ec, x1, yy1, w, h);
-             break;
+         switch (max & E_MAXIMIZE_DIRECTION)
+           {
+            case E_MAXIMIZE_BOTH:
+               e_client_maximized_geometry_set(ec, zx, zy, zw, zh);
+               break;
 
-           case E_MAXIMIZE_VERTICAL:
-             e_client_maximized_geometry_set(ec, ec->x, yy1, ec->w, h);
-             break;
+            case E_MAXIMIZE_VERTICAL:
+               e_client_maximized_geometry_set(ec, ec->x, zy, ec->w, zh);
+               break;
 
-           case E_MAXIMIZE_HORIZONTAL:
-             e_client_maximized_geometry_set(ec, x1, ec->y, w, ec->h);
-             break;
+            case E_MAXIMIZE_HORIZONTAL:
+               e_client_maximized_geometry_set(ec, zx, ec->y, zw, ec->h);
+               break;
 
-           case E_MAXIMIZE_LEFT:
-             e_client_maximized_geometry_set(ec, desk_x, desk_y, w / 2, h);
-             break;
+            case E_MAXIMIZE_LEFT:
+               e_client_maximized_geometry_set(ec, zx, zy, zw / 2, zh);
+               break;
 
-           case E_MAXIMIZE_RIGHT:
-             e_client_maximized_geometry_set(ec, x1, desk_y, w / 2, h);
-             break;
-          }
-        break;
+            case E_MAXIMIZE_RIGHT:
+               e_client_maximized_geometry_set(ec, zx + zw / 2, zy, zw / 2, zh);
+               break;
+           }
+         break;
 
       case E_MAXIMIZE_SMART:
       case E_MAXIMIZE_EXPAND:
-        if (desk->visible)
-          {
-             // base_output_resolution
-             if (ec->base_output_resolution.use)
-               {
-                  zx = desk_x;
-                  zy = desk_y;
-                  zw = ec->base_output_resolution.w;
-                  zh = ec->base_output_resolution.h;
-               }
-             else
-               {
-                  e_zone_desk_useful_geometry_get(zone, desk, &zx, &zy, &zw, &zh, EINA_TRUE);
-               }
-          }
-        else
-          {
-             x1 = desk_x;
-             yy1 = desk_y;
-             x2 = desk_x + desk_w;
-             y2 = desk_y + desk_h;
-             e_maximize_client_shelf_fill(ec, &x1, &yy1, &x2, &y2, max);
-             zx = x1, zy = yy1;
-             zw = x2 - x1;
-             zh = y2 - yy1;
-          }
-        w = zw, h = zh;
-
-        evas_object_smart_callback_call(ec->frame, "maximize", NULL);
-        e_comp_object_frame_xy_unadjust(ec->frame, ec->x, ec->y, &ecx, &ecy);
-        e_comp_object_frame_wh_unadjust(ec->frame, ec->w, ec->h, &ecw, &ech);
-
-        if (ecw < zw)
-          w = ecw;
-
-        if (ech < zh)
-          h = ech;
-
-        if (ecx < zx) // window left not useful coordinates
-          x1 = zx;
-        else if (ecx + ecw > zx + zw) // window right not useful coordinates
-          x1 = zx + zw - ecw;
-        else // window normal position
-          x1 = ecx;
-
-        if (ecy < zy) // window top not useful coordinates
-          yy1 = zy;
-        else if (ecy + ech > zy + zh) // window bottom not useful coordinates
-          yy1 = zy + zh - ech;
-        else // window normal position
-          yy1 = ecy;
-
-        switch (max & E_MAXIMIZE_DIRECTION)
-          {
-           case E_MAXIMIZE_BOTH:
-             e_client_maximized_geometry_set(ec, zx, zy, zw, zh);
-             break;
-
-           case E_MAXIMIZE_VERTICAL:
-             e_client_maximized_geometry_set(ec, ec->x, zy, ec->w, zh);
-             break;
-
-           case E_MAXIMIZE_HORIZONTAL:
-             e_client_maximized_geometry_set(ec, zx, ec->y, zw, ec->h);
-             break;
-
-           case E_MAXIMIZE_LEFT:
-             e_client_maximized_geometry_set(ec, zx, zy, zw / 2, zh);
-             break;
-
-           case E_MAXIMIZE_RIGHT:
-             e_client_maximized_geometry_set(ec, zx + zw / 2, zy, zw / 2, zh);
-             break;
-          }
+         if (desk->visible)
+           {
+              // base_output_resolution
+              if (ec->base_output_resolution.use)
+                {
+                   zx = desk_x;
+                   zy = desk_y;
+                   zw = ec->base_output_resolution.w;
+                   zh = ec->base_output_resolution.h;
+                }
+              else
+                {
+                   e_zone_desk_useful_geometry_get(zone, desk, &zx, &zy, &zw, &zh, EINA_TRUE);
+                }
+           }
+         else
+           {
+              x1 = desk_x;
+              yy1 = desk_y;
+              x2 = desk_x + desk_w;
+              y2 = desk_y + desk_h;
+              e_maximize_client_shelf_fill(ec, &x1, &yy1, &x2, &y2, max);
+              zx = x1, zy = yy1;
+              zw = x2 - x1;
+              zh = y2 - yy1;
+           }
 
-        break;
+         evas_object_smart_callback_call(ec->frame, "maximize", NULL);
 
-      case E_MAXIMIZE_FILL:
-        x1 = desk_x;
-        yy1 = desk_y;
-        x2 = desk_x + desk_w;
-        y2 = desk_y + desk_h;
-
-        /* walk through all shelves */
-        e_maximize_client_shelf_fill(ec, &x1, &yy1, &x2, &y2, max);
-
-        /* walk through all windows */
-        e_maximize_client_client_fill(ec, &x1, &yy1, &x2, &y2, max);
-
-        w = x2 - x1;
-        h = y2 - yy1;
-        pw = w;
-        ph = h;
-        e_client_resize_limit(ec, &w, &h);
-        /* center x-direction */
-        x1 = x1 + (pw - w) / 2;
-        /* center y-direction */
-        yy1 = yy1 + (ph - h) / 2;
-
-        switch (max & E_MAXIMIZE_DIRECTION)
-          {
-           case E_MAXIMIZE_BOTH:
-             e_client_maximized_geometry_set(ec, x1, yy1, w, h);
-             break;
+         switch (max & E_MAXIMIZE_DIRECTION)
+           {
+            case E_MAXIMIZE_BOTH:
+               e_client_maximized_geometry_set(ec, zx, zy, zw, zh);
+               break;
 
-           case E_MAXIMIZE_VERTICAL:
-             e_client_maximized_geometry_set(ec, ec->x, yy1, ec->w, h);
-             break;
+            case E_MAXIMIZE_VERTICAL:
+               e_client_maximized_geometry_set(ec, ec->x, zy, ec->w, zh);
+               break;
 
-           case E_MAXIMIZE_HORIZONTAL:
-             e_client_maximized_geometry_set(ec, x1, ec->y, w, ec->h);
-             break;
+            case E_MAXIMIZE_HORIZONTAL:
+               e_client_maximized_geometry_set(ec, zx, ec->y, zw, ec->h);
+               break;
 
-           case E_MAXIMIZE_LEFT:
-             e_client_maximized_geometry_set(ec, desk_x, desk_y, w / 2, h);
-             break;
+            case E_MAXIMIZE_LEFT:
+               e_client_maximized_geometry_set(ec, zx, zy, zw / 2, zh);
+               break;
 
-           case E_MAXIMIZE_RIGHT:
-             e_client_maximized_geometry_set(ec, x1, desk_y, w / 2, h);
-             break;
-          }
-        break;
+            case E_MAXIMIZE_RIGHT:
+               e_client_maximized_geometry_set(ec, zx + zw / 2, zy, zw / 2, zh);
+               break;
+           }
+         break;
      }
+
    if (ec->maximize_override)
      ec->maximize_override = override;
 }