[Xfce4-commits] [xfce/xfwm4] 08/09: Decorrelate tiling from maximization

noreply at xfce.org noreply at xfce.org
Fri Mar 27 22:39:14 CET 2015


This is an automated email from the git hooks/post-receive script.

olivier pushed a commit to branch master
in repository xfce/xfwm4.

commit fc38533582d972ffc826b5741449306a4234fbad
Author: Olivier Fourdan <fourdan at xfce.org>
Date:   Fri Mar 27 22:17:30 2015 +0100

    Decorrelate tiling from maximization
    
    Signed-off-by: Olivier Fourdan <fourdan at xfce.org>
---
 src/client.c |  171 ++++++++++++++++++++++++++--------------------------------
 1 file changed, 76 insertions(+), 95 deletions(-)

diff --git a/src/client.c b/src/client.c
index 38ecc6f..fc40c6d 100644
--- a/src/client.c
+++ b/src/client.c
@@ -109,7 +109,7 @@ struct _ButtonPressData
 static void
 clientUpdateIconPix (Client *c);
 static gboolean
-clientNewMaxSize (Client *c, XWindowChanges *wc, GdkRectangle *, tilePositionType tile);
+clientNewMaxSize (Client *c, XWindowChanges *wc, GdkRectangle *);
 
 Display *
 clientGetXDisplay (Client *c)
@@ -1055,7 +1055,7 @@ clientGetMWMHints (Client *c, gboolean update)
             myScreenFindMonitorAtPoint (screen_info,
                                         frameX (c) + (frameWidth (c) / 2),
                                         frameY (c) + (frameHeight (c) / 2), &rect);
-            clientNewMaxSize (c, &wc, &rect, TILE_NONE);
+            clientNewMaxSize (c, &wc, &rect);
         }
 
         clientConfigure (c, &wc, CWX | CWY | CWWidth | CWHeight, CFG_FORCE_REDRAW);
@@ -3222,7 +3222,7 @@ clientNewMaxState (Client *c, XWindowChanges *wc, int mode)
 }
 
 static gboolean
-clientNewMaxSize (Client *c, XWindowChanges *wc, GdkRectangle *rect, tilePositionType tile)
+clientNewTileSize (Client *c, XWindowChanges *wc, GdkRectangle *rect, tilePositionType tile)
 {
     ScreenInfo *screen_info;
     int full_x, full_y, full_w, full_h;
@@ -3235,38 +3235,85 @@ clientNewMaxSize (Client *c, XWindowChanges *wc, GdkRectangle *rect, tilePositio
                   rect->x + rect->width) - full_x;
     full_h = MIN (screen_info->logical_height - screen_info->params->xfwm_margins[STRUTS_BOTTOM],
                   rect->y + rect->height) - full_y;
-
-    /* Adjust size to the largest size available, not covering struts */
     clientMaxSpace (screen_info, &full_x, &full_y, &full_w, &full_h);
 
-    if (FLAG_TEST_ALL (c->flags, CLIENT_FLAG_MAXIMIZED))
+    switch (tile)
     {
-        wc->x = full_x + frameExtentLeft (c);
-        wc->y = full_y + frameExtentTop (c);
-        wc->width = full_w - frameExtentLeft (c) - frameExtentRight (c);
-        wc->height = full_h - frameExtentTop (c) - frameExtentBottom (c);
-
-        return ((wc->height >= c->size->min_height) && (wc->height <= c->size->max_height) &&
-                (wc->width >= c->size->min_width) && (wc->width <= c->size->max_width));
+        case TILE_UP:
+            wc->x = full_x + frameExtentLeft (c);
+            wc->y = full_y + frameExtentTop (c);
+            wc->width = full_w - frameExtentLeft (c) - frameExtentRight (c);
+            wc->height = full_h / 2 - frameExtentTop (c) - frameExtentBottom (c);
+            break;
+        case TILE_DOWN:
+            wc->x = full_x + frameExtentLeft (c);
+            wc->y = full_y + full_h / 2 + frameExtentTop (c);
+            wc->width = full_w - frameExtentLeft (c) - frameExtentRight (c);
+            wc->height = full_h - full_h / 2 - frameExtentTop (c) - frameExtentBottom (c);
+            break;
+        case TILE_LEFT:
+            wc->x = full_x + frameExtentLeft (c);
+            wc->y = full_y + frameExtentTop (c);
+            wc->width = full_w / 2 - frameExtentLeft (c) - frameExtentRight (c);
+            wc->height = full_h - frameExtentTop (c) - frameExtentBottom (c);
+            break;
+        case TILE_RIGHT:
+            wc->x = full_x + full_w / 2 + frameExtentLeft (c);
+            wc->y = full_y + frameExtentTop (c);
+            wc->width = full_w - full_w / 2 - frameExtentLeft (c) - frameExtentRight (c);
+            wc->height = full_h - frameExtentTop (c) - frameExtentBottom (c);
+            break;
+        case TILE_DOWN_LEFT:
+            wc->x = full_x + frameExtentLeft (c);
+            wc->y = full_y + full_h / 2 + frameExtentTop (c);
+            wc->width = full_w / 2 - frameExtentLeft (c) - frameExtentRight (c);
+            wc->height = full_h - full_h / 2 - frameExtentTop (c) - frameExtentBottom (c);
+            break;
+        case TILE_DOWN_RIGHT:
+            wc->x = full_x + full_w /2 + frameExtentLeft (c);
+            wc->y = full_y + full_h / 2 + frameExtentTop (c);
+            wc->width = full_w - full_w / 2 - frameExtentLeft (c) - frameExtentRight (c);
+            wc->height = full_h - full_h / 2 - frameExtentTop (c) - frameExtentBottom (c);
+            break;
+        case TILE_UP_LEFT:
+            wc->x = full_x + frameExtentLeft (c);
+            wc->y = full_y + frameExtentTop (c);
+            wc->width = full_w / 2 - frameExtentLeft (c) - frameExtentRight (c);
+            wc->height = full_h / 2 - frameExtentTop (c) - frameExtentBottom (c);
+            break;
+        case TILE_UP_RIGHT:
+            wc->x = full_x + full_w /2 + frameExtentLeft (c);
+            wc->y = full_y + frameExtentTop (c);
+            wc->width = full_w - full_w / 2 - frameExtentLeft (c) - frameExtentRight (c);
+            wc->height = full_h / 2 - frameExtentTop (c) - frameExtentBottom (c);
+            break;
+        default:
+            break;
     }
 
+    return ((wc->height >= c->size->min_height) && (wc->height <= c->size->max_height) &&
+            (wc->width >= c->size->min_width) && (wc->width <= c->size->max_width));
+}
+
+static gboolean
+clientNewMaxSize (Client *c, XWindowChanges *wc, GdkRectangle *rect)
+{
+    ScreenInfo *screen_info;
+    int full_x, full_y, full_w, full_h;
+
+    screen_info = c->screen_info;
+
+    full_x = MAX (screen_info->params->xfwm_margins[STRUTS_LEFT], rect->x);
+    full_y = MAX (screen_info->params->xfwm_margins[STRUTS_TOP], rect->y);
+    full_w = MIN (screen_info->logical_width - screen_info->params->xfwm_margins[STRUTS_RIGHT],
+                  rect->x + rect->width) - full_x;
+    full_h = MIN (screen_info->logical_height - screen_info->params->xfwm_margins[STRUTS_BOTTOM],
+                  rect->y + rect->height) - full_y;
+    clientMaxSpace (screen_info, &full_x, &full_y, &full_w, &full_h);
+
     if (FLAG_TEST (c->flags, CLIENT_FLAG_MAXIMIZED_HORIZ))
     {
         /* Adjust size to the widest size available, for the current vertical position/height */
-        switch (tile)
-        {
-            case TILE_UP:
-                wc->y = full_y + frameExtentTop (c);
-                wc->height = full_h / 2 - frameExtentTop (c) - frameExtentBottom (c);
-                break;
-            case TILE_DOWN:
-                wc->y = full_y + full_h / 2 + frameExtentTop (c);
-                wc->height = full_h - full_h / 2 - frameExtentTop (c) - frameExtentBottom (c);
-                break;
-            default:
-                break;
-        }
-
         wc->x = full_x + frameExtentLeft (c);
         wc->width = full_w - frameExtentLeft (c) - frameExtentRight (c);
     }
@@ -3274,54 +3321,10 @@ clientNewMaxSize (Client *c, XWindowChanges *wc, GdkRectangle *rect, tilePositio
     if (FLAG_TEST (c->flags, CLIENT_FLAG_MAXIMIZED_VERT))
     {
         /* Adjust size to the tallest size available, for the current horizontal position/width */
-        switch (tile)
-        {
-            case TILE_LEFT:
-                wc->x = full_x + frameExtentLeft (c);
-                wc->width = full_w / 2 - frameExtentLeft (c) - frameExtentRight (c);
-                break;
-            case TILE_RIGHT:
-                wc->x = full_x + full_w / 2 + frameExtentLeft (c);
-                wc->width = full_w - full_w / 2 - frameExtentLeft (c) - frameExtentRight (c);
-                break;
-            default:
-                break;
-        }
-
         wc->y = full_y + frameExtentTop (c);
         wc->height = full_h - frameExtentTop (c) - frameExtentBottom (c);
     }
 
-    switch (tile)
-    {
-        case TILE_DOWN_LEFT:
-                wc->x = full_x + frameExtentLeft (c);
-                wc->width = full_w / 2 - frameExtentLeft (c) - frameExtentRight (c);
-                wc->y = full_y + full_h / 2 + frameExtentTop (c);
-                wc->height = full_h - full_h / 2 - frameExtentTop (c) - frameExtentBottom (c);
-            break;
-        case TILE_DOWN_RIGHT:
-                wc->x = full_x + full_w /2 + frameExtentLeft (c);
-                wc->width = full_w - full_w / 2 - frameExtentLeft (c) - frameExtentRight (c);
-                wc->y = full_y + full_h / 2 + frameExtentTop (c);
-                wc->height = full_h - full_h / 2 - frameExtentTop (c) - frameExtentBottom (c);
-            break;
-        case TILE_UP_LEFT:
-                wc->x = full_x + frameExtentLeft (c);
-                wc->width = full_w / 2 - frameExtentLeft (c) - frameExtentRight (c);
-                wc->y = full_y + frameExtentTop (c);
-                wc->height = full_h / 2 - frameExtentTop (c) - frameExtentBottom (c);
-            break;
-        case TILE_UP_RIGHT:
-                wc->x = full_x + full_w /2 + frameExtentLeft (c);
-                wc->width = full_w - full_w / 2 - frameExtentLeft (c) - frameExtentRight (c);
-                wc->y = full_y + frameExtentTop (c);
-                wc->height = full_h / 2 - frameExtentTop (c) - frameExtentBottom (c);
-            break;
-        default:
-            break;
-    }
-
     return ((wc->height >= c->size->min_height) && (wc->height <= c->size->max_height) &&
             (wc->width >= c->size->min_width) && (wc->width <= c->size->max_width));
 }
@@ -3368,7 +3371,7 @@ clientToggleMaximized (Client *c, int mode, gboolean restore_position)
     clientNewMaxState (c, &wc, mode);
 
     /* 2) Compute the new size, based on the state */
-    if (!clientNewMaxSize (c, &wc, &rect, TILE_NONE))
+    if (!clientNewMaxSize (c, &wc, &rect))
     {
         c->flags = old_flags;
         return FALSE;
@@ -3432,27 +3435,6 @@ clientTile (Client *c, gint cx, gint cy, tilePositionType tile, gboolean send_co
     wc.width = c->width;
     wc.height = c->height;
 
-    switch (tile)
-    {
-        case TILE_LEFT:
-        case TILE_RIGHT:
-            mode = CLIENT_FLAG_MAXIMIZED_VERT;
-            break;
-        case TILE_UP:
-        case TILE_DOWN:
-            mode = CLIENT_FLAG_MAXIMIZED_HORIZ;
-            break;
-        case TILE_DOWN_LEFT:
-        case TILE_DOWN_RIGHT:
-        case TILE_UP_LEFT:
-        case TILE_UP_RIGHT:
-            mode = 0;
-            break;
-        default:
-            return FALSE;
-            break;
-    }
-
     if (restore_position)
     {
         clientSaveSizePos (c);
@@ -3460,8 +3442,7 @@ clientTile (Client *c, gint cx, gint cy, tilePositionType tile, gboolean send_co
 
     old_flags = c->flags;
     FLAG_UNSET (c->flags, CLIENT_FLAG_MAXIMIZED);
-    clientNewMaxState (c, &wc, mode);
-    if (!clientNewMaxSize (c, &wc, &rect, tile))
+    if (!clientNewTileSize (c, &wc, &rect, tile))
     {
         c->flags = old_flags;
         return FALSE;

-- 
To stop receiving notification emails like this one, please contact
the administrator of this repository.


More information about the Xfce4-commits mailing list