[Xfce4-commits] <xfwm4:master> Revert PointerMotionHintMask (commit 7c095f5f), Add special treatment for full de-maximization, Do not always configure windows on tiling to avoid redraw artifacts when opaque-move is disabled.

Olivier Fourdan noreply at xfce.org
Mon Feb 13 23:12:02 CET 2012


Updating branch refs/heads/master
         to 2e5da52da598f0146b3869ad5763927686f87466 (commit)
       from ff9bfd5ebfe7e7dad4751448034c4e21588aee63 (commit)

commit 2e5da52da598f0146b3869ad5763927686f87466
Author: Olivier Fourdan <ofourdan at redhat.com>
Date:   Mon Feb 13 23:06:40 2012 +0100

    Revert PointerMotionHintMask (commit 7c095f5f),
    Add special treatment for full de-maximization,
    Do not always configure windows on tiling to avoid redraw artifacts when opaque-move is disabled.

 src/client.c     |   52 +++++++++++++++++++++++++++++++++++-----------------
 src/events.c     |    8 ++++----
 src/moveresize.c |    9 ++++-----
 3 files changed, 43 insertions(+), 26 deletions(-)

diff --git a/src/client.c b/src/client.c
index 1149cb2..de741a6 100644
--- a/src/client.c
+++ b/src/client.c
@@ -3033,6 +3033,25 @@ clientRemoveMaximizeFlag (Client * c)
 static void
 clientNewMaxState (Client * c, XWindowChanges *wc, int mode)
 {
+    if (FLAG_TEST_ALL (mode, CLIENT_FLAG_MAXIMIZED))
+    {
+        /*
+         * We need to test specifically for full de-maximization
+         * otherwise it's too confusing when the window changes
+         * from horiz to vertical maximization or vice-versa.
+         */
+        if (FLAG_TEST (c->flags, CLIENT_FLAG_MAXIMIZED))
+        {
+            FLAG_UNSET (c->flags, CLIENT_FLAG_MAXIMIZED);
+            wc->x = c->old_x;
+            wc->y = c->old_y;
+            wc->width = c->old_width;
+            wc->height = c->old_height;
+
+            return;
+        }
+    }
+
     if (FLAG_TEST (mode, CLIENT_FLAG_MAXIMIZED_HORIZ))
     {
         if (!FLAG_TEST (c->flags, CLIENT_FLAG_MAXIMIZED_HORIZ))
@@ -3187,16 +3206,14 @@ clientToggleMaximized (Client * c, int mode, gboolean restore_position)
     wc.width = c->width;
     wc.height = c->height;
 
-    if (restore_position && !FLAG_TEST (c->flags, CLIENT_FLAG_MAXIMIZED_VERT))
-    {
-        c->old_y = c->y;
-        c->old_height = c->height;
-    }
-
-    if (restore_position && !FLAG_TEST (c->flags, CLIENT_FLAG_MAXIMIZED_HORIZ))
+    if (restore_position &&
+        FLAG_TEST (mode, CLIENT_FLAG_MAXIMIZED) &&
+        !FLAG_TEST (c->flags, CLIENT_FLAG_MAXIMIZED))
     {
         c->old_x = c->x;
+        c->old_y = c->y;
         c->old_width = c->width;
+        c->old_height = c->height;
     }
 
     /* 1) Compute the new state */
@@ -3229,7 +3246,7 @@ clientToggleMaximized (Client * c, int mode, gboolean restore_position)
 }
 
 void
-clientTile (Client * c, gint cx, gint cy, tilePositionType tile)
+clientTile (Client * c, gint cx, gint cy, tilePositionType tile, gboolean send_configure)
 {
     DisplayInfo *display_info;
     ScreenInfo *screen_info;
@@ -3287,16 +3304,17 @@ clientTile (Client * c, gint cx, gint cy, tilePositionType tile)
     c->height = wc.height;
     c->width = wc.width;
 
-    setNetFrameExtents (display_info,
-                        c->window,
-                        frameTop (c),
-                        frameLeft (c),
-                        frameRight (c),
-                        frameBottom (c));
-
-    clientSetNetActions (c);
-    if (FLAG_TEST (c->xfwm_flags, XFWM_FLAG_MANAGED))
+    if (send_configure)
     {
+        setNetFrameExtents (display_info,
+                            c->window,
+                            frameTop (c),
+                            frameLeft (c),
+                            frameRight (c),
+                            frameBottom (c));
+
+        clientSetNetActions (c);
+
         clientConfigure (c, &wc, CWWidth | CWHeight | CWX | CWY, CFG_FORCE_REDRAW);
     }
     clientSetNetState (c);
diff --git a/src/events.c b/src/events.c
index 6ef3b22..df30ff9 100644
--- a/src/events.c
+++ b/src/events.c
@@ -433,22 +433,22 @@ handleKeyPress (DisplayInfo *display_info, XKeyEvent * ev)
             case KEY_TILE_DOWN:
                 clientTile (c, frameX (c) + frameWidth (c) / 2,
                                frameY (c) + frameHeight (c) / 2,
-                               TILE_DOWN);
+                               TILE_DOWN, TRUE);
                 break;
             case KEY_TILE_LEFT:
                 clientTile (c, frameX (c) + frameWidth (c) / 2,
                                frameY (c) + frameHeight (c) / 2,
-                               TILE_LEFT);
+                               TILE_LEFT, TRUE);
                 break;
             case KEY_TILE_RIGHT:
                 clientTile (c, frameX (c) + frameWidth (c) / 2,
                                frameY (c) + frameHeight (c) / 2,
-                               TILE_RIGHT);
+                               TILE_RIGHT, TRUE);
                 break;
             case KEY_TILE_UP:
                 clientTile (c, frameX (c) + frameWidth (c) / 2,
                                frameY (c) + frameHeight (c) / 2,
-                               TILE_UP);
+                               TILE_UP, TRUE);
                 break;
             default:
                 break;
diff --git a/src/moveresize.c b/src/moveresize.c
index 40fe38a..8fe4390 100644
--- a/src/moveresize.c
+++ b/src/moveresize.c
@@ -51,7 +51,6 @@
 
 #define MOVERESIZE_EVENT_MASK \
     PointerMotionMask | \
-    PointerMotionHintMask | \
     ButtonMotionMask | \
     ButtonReleaseMask | \
     LeaveWindowMask
@@ -778,28 +777,28 @@ clientMoveTile (Client *c, XMotionEvent *xevent)
         (y >= disp_y - 1) && (y < disp_max_y + 1))
     {
         TRACE ("event (%i,%i) monitor (%i,%i) %ix%i tile LEFT", x, y, disp_x, disp_y, disp_max_x, disp_max_y);
-        clientTile (c, x, y, TILE_LEFT);
+        clientTile (c, x, y, TILE_LEFT, !screen_info->params->box_move);
         return TRUE;
     }
     if ((x >= disp_max_x - dist) && (x < disp_max_x + 1) &&
         (y >= disp_y - 1) && (y < disp_max_y + 1))
     {
         TRACE ("event (%i,%i) monitor (%i,%i) %ix%i tile RIGHT", x, y, disp_x, disp_y, disp_max_x, disp_max_y);
-        clientTile (c, x, y, TILE_RIGHT);
+        clientTile (c, x, y, TILE_RIGHT, !screen_info->params->box_move);
         return TRUE;
     }
     if ((x >= disp_x - 1) && (x < disp_max_x + 1) &&
         (y >= disp_y - 1) && (y < disp_y + dist))
     {
         TRACE ("event (%i,%i) monitor (%i,%i) %ix%i tile UP", x, y, disp_x, disp_y, disp_max_x, disp_max_y);
-        clientTile (c, x, y, TILE_UP);
+        clientTile (c, x, y, TILE_UP, !screen_info->params->box_move);
         return TRUE;
     }
     if ((x >= disp_x - 1) && (x < disp_max_x + 1) &&
         (y >= disp_max_y - dist) && (y < disp_max_y + 1))
     {
         TRACE ("event (%i,%i) monitor (%i,%i) %ix%i tile DOWN", x, y, disp_x, disp_y, disp_max_x, disp_max_y);
-        clientTile (c, x, y, TILE_DOWN);
+        clientTile (c, x, y, TILE_DOWN, !screen_info->params->box_move);
         return TRUE;
     }
 


More information about the Xfce4-commits mailing list