[Xfce4-commits] [xfce/xfwm4] 02/07: Improve corner tiling on move

noreply at xfce.org noreply at xfce.org
Tue Jan 20 22:31:57 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 a596e12cae86a653993570ed871afb9ced1a8f6e
Author: Cédric Leporcq <cedl38 at gmail.com>
Date:   Sun Jun 22 14:03:03 2014 +0200

    Improve corner tiling on move
---
 src/moveresize.c |   65 +++++++++++++++++++++++++++++++++++++++++++-----------
 1 file changed, 52 insertions(+), 13 deletions(-)

diff --git a/src/moveresize.c b/src/moveresize.c
index 558fcb2..a217ab4 100644
--- a/src/moveresize.c
+++ b/src/moveresize.c
@@ -57,6 +57,7 @@
     LeaveWindowMask
 
 #define TILE_DISTANCE 10
+#define BORDER_TILE_LENGTH_RELATIVE 5
 #define use_xor_move(screen_info) (screen_info->params->box_move && !screen_info->compositor_active)
 #define use_xor_resize(screen_info) (screen_info->params->box_resize && !screen_info->compositor_active)
 
@@ -761,7 +762,7 @@ clientMoveTile (Client *c, XMotionEvent *xevent)
 {
     ScreenInfo *screen_info;
     GdkRectangle rect;
-    int x, y, disp_x, disp_y, disp_max_x, disp_max_y, dist;
+    int x, y, disp_x, disp_y, disp_max_x, disp_max_y, dist, dist_corner;
     NetWmDesktopLayout layout;
 
     screen_info = c->screen_info;
@@ -782,23 +783,61 @@ clientMoveTile (Client *c, XMotionEvent *xevent)
 
     layout = screen_info->desktop_layout;
     dist = MIN (TILE_DISTANCE, frameDecorationTop (screen_info) / 2);
+    dist_corner = (MIN (disp_max_x, disp_max_y)) / BORDER_TILE_LENGTH_RELATIVE;
 
-    if ((x >= disp_x - 1) && (x < disp_x + dist) &&
+    /* make sure the mouse position is inside the screen edges */
+    if ((x >= disp_x - 1) && (x < disp_max_x + 1) &&
         (y >= disp_y - 1) && (y < disp_max_y + 1))
     {
-        return clientTile (c, x, y, TILE_LEFT, !screen_info->params->box_move);
-    }
+        /* tile window depending on the mouse position on the screen */
 
-    if ((x >= disp_max_x - dist) && (x < disp_max_x + 1) &&
-        (y >= disp_y - 1) && (y < disp_max_y + 1))
-    {
-        return clientTile (c, x, y, TILE_RIGHT, !screen_info->params->box_move);
-    }
+        if ((y > disp_y + dist_corner) && (y < disp_max_y - dist_corner))
+        {
+            /* mouse pointer on left edge excluding corners */
+            if (x < disp_x + dist)
+            {
+                return clientTile (c, x, y, TILE_LEFT, !screen_info->params->box_move);
+            }
+            /* mouse pointer on right edge excluding corners */
+            if (x >= disp_max_x - dist)
+            {
+                return clientTile (c, x, y, TILE_RIGHT, !screen_info->params->box_move);
+            }
+        }
 
-    if ((x >= disp_x - 1) && (x < disp_max_x + 1) &&
-        (y >= disp_y - 1) && (y < disp_y + dist))
-    {
-        return clientToggleMaximized (c, CLIENT_FLAG_MAXIMIZED, FALSE);
+        if ((x >= disp_x + dist_corner) && (x < disp_max_x - dist_corner))
+        {
+            /* mouse pointer on top edge excluding corners */
+            if (y < disp_y + dist)
+            {
+                return clientToggleMaximized (c, CLIENT_FLAG_MAXIMIZED, FALSE);
+            }
+        }
+
+        /* mouse pointer on top left corner */
+        if (((x < disp_x + dist_corner) && (y < disp_y + dist))
+            || ((x < disp_x + dist) && (y < disp_y + dist_corner)))
+        {
+            return clientTile (c, x, y, TILE_UP_LEFT, !screen_info->params->box_move);
+        }
+        /* mouse pointer on top right corner */
+        if (((x >= disp_max_x - dist_corner) && (y < disp_y + dist))
+            || ((x >= disp_max_x - dist) && (y < disp_y + dist_corner)))
+        {
+            return clientTile (c, x, y, TILE_UP_RIGHT, !screen_info->params->box_move);
+        }
+        /* mouse pointer on bottom left corner */
+        if (((x < disp_x + dist_corner) && (y >= disp_max_y - dist))
+            || ((x < disp_x + dist) && (y >= disp_max_y - dist_corner)))
+        {
+            return clientTile (c, x, y, TILE_DOWN_LEFT, !screen_info->params->box_move);
+        }
+        /* mouse pointer on bottom right corner */
+        if (((x >= disp_max_x - dist_corner) && (y >= disp_max_y - dist))
+            || ((x >= disp_max_x - dist) && (y >= disp_max_y - dist_corner)))
+        {
+            return clientTile (c, x, y, TILE_DOWN_RIGHT, !screen_info->params->box_move);
+        }
     }
 
     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