104 lines
3.6 KiB
Diff
104 lines
3.6 KiB
Diff
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
|