a5a9348
diff --git a/plugins/place.c b/plugins/place.c
a5a9348
index 596a3a5..fe4c39e 100644
a5a9348
--- a/plugins/place.c
a5a9348
+++ b/plugins/place.c
a5a9348
@@ -1085,21 +1085,35 @@ placeConstrainToWorkarea (CompWindow *w,
a5a9348
 			  int        *y)
a5a9348
 {
a5a9348
     CompWindowExtents extents;
a5a9348
+    int               width, height;
a5a9348
 
a5a9348
     extents.left   = *x - w->input.left;
a5a9348
     extents.top    = *y - w->input.top;
a5a9348
     extents.right  = *x + w->serverWidth + w->input.right;
a5a9348
     extents.bottom = *y + w->serverHeight + w->input.bottom;
a5a9348
 
a5a9348
+    width  = extents.right - extents.left;
a5a9348
+    height = extents.bottom - extents.top;
a5a9348
+
a5a9348
     if (extents.left < workArea->x)
a5a9348
+    {
a5a9348
 	*x += workArea->x - extents.left;
a5a9348
-    else if (extents.right > workArea->x + workArea->width)
a5a9348
+    }
a5a9348
+    else if (width <= workArea->width &&
a5a9348
+	     extents.right > workArea->x + workArea->width)
a5a9348
+    {
a5a9348
 	*x += workArea->x + workArea->width - extents.right;
a5a9348
+    }
a5a9348
 
a5a9348
     if (extents.top < workArea->y)
a5a9348
+    {
a5a9348
 	*y += workArea->y - extents.top;
a5a9348
-    else if (extents.bottom > workArea->y + workArea->height)
a5a9348
+    }
a5a9348
+    else if (height <= workArea->height &&
a5a9348
+	     extents.bottom > workArea->y + workArea->height)
a5a9348
+    {
a5a9348
 	*y += workArea->y + workArea->height - extents.bottom;
a5a9348
+    }
a5a9348
 }
a5a9348
 
a5a9348
 static Bool
a5a9348