pinkbyte-overlay/x11-wm/compiz/files/compiz-0.8.4-place-plugin.patch

104 lines
3.6 KiB
Diff
Raw Normal View History

From db88fb6f3f6c0fa3c81bc04a2a3468252d49f098 Mon Sep 17 00:00:00 2001
From: Danny Baumann <dannybaumann@web.de>
Date: Sun, 31 Jan 2010 12:36:42 +0000
Subject: Fix handling of windows that have a server border set.
Also handle windows that have a server border set properly in pointer
(placement mode)
---
diff --git a/plugins/place.c b/plugins/place.c
index d59de33..a54e60a 100644
--- a/plugins/place.c
+++ b/plugins/place.c
@@ -131,12 +131,15 @@ typedef enum {
/* helper macros to get the full dimensions of a window,
including decorations */
+#define BORDER_WIDTH(w) ((w)->input.left + (w)->input.right + \
+ 2 * (w)->serverBorderWidth)
+#define BORDER_HEIGHT(w) ((w)->input.top + (w)->input.bottom + \
+ 2 * (w)->serverBorderWidth)
+
#define WIN_FULL_X(w) ((w)->serverX - (w)->input.left)
#define WIN_FULL_Y(w) ((w)->serverY - (w)->input.top)
-#define WIN_FULL_W(w) ((w)->serverWidth + 2 * (w)->serverBorderWidth + \
- (w)->input.left + (w)->input.right)
-#define WIN_FULL_H(w) ((w)->serverHeight + 2 * (w)->serverBorderWidth + \
- (w)->input.top + (w)->input.bottom)
+#define WIN_FULL_W(w) ((w)->serverWidth + BORDER_WIDTH (w))
+#define WIN_FULL_H(w) ((w)->serverHeight + BORDER_HEIGHT (w))
static Bool
placeMatchXYValue (CompWindow *w,
@@ -1216,8 +1219,8 @@ placeConstrainToWorkarea (CompWindow *w,
extents.left = *x - w->input.left;
extents.top = *y - w->input.top;
- extents.right = *x + w->serverWidth + w->input.right;
- extents.bottom = *y + w->serverHeight + w->input.bottom;
+ extents.right = extents.left + WIN_FULL_W (w);
+ extents.bottom = extents.top + WIN_FULL_H (w);
delta = workArea->x + workArea->width - extents.right;
if (delta < 0)
@@ -1419,9 +1422,9 @@ placeDoValidateWindowResizeRequest (CompWindow *w,
}
left = x - w->input.left;
- right = x + xwc->width + w->input.right;
+ right = left + xwc->width + BORDER_WIDTH (w);
top = y - w->input.top;
- bottom = y + xwc->height + w->input.bottom;
+ bottom = top + xwc->height + BORDER_HEIGHT (w);
output = outputDeviceForGeometry (s,
xwc->x, xwc->y,
@@ -1484,9 +1487,9 @@ placeDoValidateWindowResizeRequest (CompWindow *w,
/* bring left/right/top/bottom to actual window coordinates */
left += w->input.left;
- right -= w->input.right;
+ right -= w->input.right + 2 * w->serverBorderWidth;
top += w->input.top;
- bottom -= w->input.bottom;
+ bottom -= w->input.bottom + 2 * w->serverBorderWidth;
if ((right - left) != xwc->width)
{
@@ -1886,17 +1889,13 @@ placeDoHandleScreenSizeChange (CompScreen *s,
{
mask |= CWX | CWWidth;
xwc.x = vpX * s->width + workArea.x + w->input.left;
- xwc.width = workArea.width -
- (2 * w->serverBorderWidth +
- w->input.left + w->input.right);
+ xwc.width = workArea.width - BORDER_WIDTH (w);
}
if (w->state & CompWindowStateMaximizedVertMask)
{
mask |= CWY | CWHeight;
xwc.y = vpY * s->height + workArea.y + w->input.top;
- xwc.height = workArea.height -
- (2 * w->serverBorderWidth +
- w->input.top + w->input.bottom);
+ xwc.height = workArea.height - BORDER_HEIGHT (w);
}
}
}
--- a/plugins/place.c
+++ b/plugins/place.c
@@ -847,8 +847,8 @@ placePointer (CompWindow *w,
if (placeGetPointerPosition (w->screen, &xPointer, &yPointer))
{
- *x = xPointer - (w->serverWidth / 2);
- *y = yPointer - (w->serverHeight / 2);
+ *x = xPointer - (w->serverWidth / 2) - w->serverBorderWidth;
+ *y = yPointer - (w->serverHeight / 2) - w->serverBorderWidth;
}
else
{
--
cgit v0.8.2