All pastes #612468 Raw Edit

Unbenannt

public text v1 · immutable
·published 2007-07-10 12:45 UTC
rendered paste body
diff --git a/plugins/resize.c b/plugins/resize.c
index c9d69c1..4e15b83 100644
--- a/plugins/resize.c
+++ b/plugins/resize.c
@@ -92,6 +92,10 @@ typedef struct _ResizeDisplay {
     int		 mode;
     XRectangle	 savedGeometry;
     XRectangle	 geometry;
+
+    int          minPointerOffsetX;
+    int          minPointerOffsetY;
+
     int		 releaseButton;
     unsigned int mask;
     int		 pointerDx;
@@ -209,6 +213,44 @@ resizeDamageRectangle (CompScreen *s,
     damageScreenRegion (s, &reg);
 }
 
+static Cursor
+resizeCursorFromResizeMask (CompScreen   *s,
+			    unsigned int mask)
+{
+    Cursor cursor;
+
+    RESIZE_SCREEN (s);
+
+    if (mask & ResizeLeftMask)
+    {
+	if (mask & ResizeDownMask)
+	    cursor = rs->downLeftCursor;
+	else if (mask & ResizeUpMask)
+	    cursor = rs->upLeftCursor;
+	else
+	    cursor = rs->leftCursor;
+    }
+    else if (mask & ResizeRightMask)
+    {
+	if (mask & ResizeDownMask)
+	    cursor = rs->downRightCursor;
+	else if (mask & ResizeUpMask)
+	    cursor = rs->upRightCursor;
+	else
+	    cursor = rs->rightCursor;
+    }
+    else if (mask & ResizeUpMask)
+    {
+	cursor = rs->upCursor;
+    }
+    else
+    {
+	cursor = rs->downCursor;
+    }
+
+    return cursor;
+}
+
 static void
 resizeSendResizeNotify (CompDisplay *d)
 {
@@ -354,6 +396,9 @@ resizeInitiate (CompDisplay     *d,
 	rd->pointerDx = x - pointerX;
 	rd->pointerDy = y - pointerY;
 
+	rd->minPointerOffsetX = w->serverWidth / 10;
+	rd->minPointerOffsetY = w->serverHeight / 10;
+
 	rd->mode = rd->opt[RESIZE_DISPLAY_OPTION_MODE].value.i;
 	for (i = 0; i <= RESIZE_MODE_LAST; i++)
 	{
@@ -387,31 +432,9 @@ resizeInitiate (CompDisplay     *d,
 	    {
 		cursor = rs->middleCursor;
 	    }
-	    else if (mask & ResizeLeftMask)
-	    {
-		if (mask & ResizeDownMask)
-		    cursor = rs->downLeftCursor;
-		else if (mask & ResizeUpMask)
-		    cursor = rs->upLeftCursor;
-		else
-		    cursor = rs->leftCursor;
-	    }
-	    else if (mask & ResizeRightMask)
-	    {
-		if (mask & ResizeDownMask)
-		    cursor = rs->downRightCursor;
-		else if (mask & ResizeUpMask)
-		    cursor = rs->upRightCursor;
-		else
-		    cursor = rs->rightCursor;
-	    }
-	    else if (mask & ResizeUpMask)
-	    {
-		cursor = rs->upCursor;
-	    }
 	    else
 	    {
-		cursor = rs->downCursor;
+		cursor = resizeCursorFromResizeMask (w->screen, mask);
 	    }
 
 	    rs->grabIndex = pushScreenGrab (w->screen, cursor, "resize");
@@ -643,6 +666,45 @@ resizeHandleMotionEvent (CompScreen *s,
 	w = rd->savedGeometry.width;
 	h = rd->savedGeometry.height;
 
+	if (!rd->mask)
+	{
+	    int xDist, yDist;
+	    xDist = xRoot - (rd->w->serverX + (rd->w->serverWidth / 2));
+	    yDist = yRoot - (rd->w->serverY + (rd->w->serverHeight / 2));
+
+	    if (abs (xDist) > rd->minPointerOffsetX)
+		rd->minPointerOffsetY /= 2;
+	    else if (abs (yDist) > rd->minPointerOffsetY)
+		rd->minPointerOffsetX /= 2;
+
+	    if (abs (xDist) > rd->minPointerOffsetX)
+	    {
+		if (xDist > 0)
+		    rd->mask |= ResizeRightMask;
+		else
+		    rd->mask |= ResizeLeftMask;
+	    }
+
+	    if (abs (yDist) > rd->minPointerOffsetY)
+	    {
+		if (yDist > 0)
+		    rd->mask |= ResizeDownMask;
+		else
+		    rd->mask |= ResizeUpMask;
+	    }
+
+	    if (rd->mask)
+	    {
+		Cursor     cursor;
+		CompScreen *s = rd->w->screen;
+
+		RESIZE_SCREEN (s);
+
+		cursor = resizeCursorFromResizeMask (s, rd->mask);
+		updateScreenGrab (s, rs->grabIndex, cursor);
+	    }
+	}
+
 	if (rd->mask & ResizeLeftMask)
 	    w -= rd->pointerDx;
 	else if (rd->mask & ResizeRightMask)