pinkbyte-overlay/x11-plugins/compiz-plugins-main/files/compiz-plugins-main-0.8.4-put-plugin.patch

185 lines
6.8 KiB
Diff

From dc097d85952f82b101ea897d33958582db2fa010 Mon Sep 17 00:00:00 2001
From: Danny Baumann <dannybaumann@web.de>
Date: Sun, 31 Jan 2010 13:11:44 +0000
Subject: Handle windows that have server border set properly.
---
diff --git a/put.c b/put.c
index daf268f..9870cd3 100644
--- a/src/put/put.c
+++ b/src/put/put.c
@@ -43,6 +43,14 @@
GET_PUT_SCREEN (w->screen, \
GET_PUT_DISPLAY (w->screen->display)))
+#define TOP_BORDER(w) ((w)->input.top)
+#define LEFT_BORDER(w) ((w)->input.left)
+#define RIGHT_BORDER(w) ((w)->input.right + 2 * (w)->serverBorderWidth)
+#define BOTTOM_BORDER(w) ((w)->input.bottom + 2 * (w)->serverBorderWidth)
+
+#define HALF_WIDTH(w) ((w)->serverWidth / 2 + (w)->serverBorderWidth)
+#define HALF_HEIGHT(w) ((w)->serverHeight / 2 + (w)->serverBorderWidth)
+
static int displayPrivateIndex;
typedef enum
@@ -395,54 +403,56 @@ putGetDistance (CompWindow *w,
switch (type) {
case PutCenter:
/* center of the screen */
- dx = (workArea.width / 2) - (w->serverWidth / 2) - (x - workArea.x);
- dy = (workArea.height / 2) - (w->serverHeight / 2) - (y - workArea.y);
+ dx = (workArea.width / 2) - (w->serverWidth / 2) -
+ w->serverBorderWidth - (x - workArea.x);
+ dy = (workArea.height / 2) - (w->serverHeight / 2) -
+ w->serverBorderWidth - (y - workArea.y);
break;
case PutLeft:
/* center of the left edge */
- dx = -(x - workArea.x) + w->input.left + putGetPadLeft (s);
- dy = (workArea.height / 2) - (w->serverHeight / 2) - (y - workArea.y);
+ dx = -(x - workArea.x) + LEFT_BORDER (w) + putGetPadLeft (s);
+ dy = (workArea.height / 2) - HALF_HEIGHT (w) - (y - workArea.y);
break;
case PutTopLeft:
/* top left corner */
- dx = -(x - workArea.x) + w->input.left + putGetPadLeft (s);
- dy = -(y - workArea.y) + w->input.top + putGetPadTop (s);
+ dx = -(x - workArea.x) + LEFT_BORDER (w) + putGetPadLeft (s);
+ dy = -(y - workArea.y) + TOP_BORDER (w) + putGetPadTop (s);
break;
case PutTop:
/* center of top edge */
- dx = (workArea.width / 2) - (w->serverWidth / 2) - (x - workArea.x);
- dy = -(y - workArea.y) + w->input.top + putGetPadTop (s);
+ dx = (workArea.width / 2) - HALF_WIDTH (w) - (x - workArea.x);
+ dy = -(y - workArea.y) + TOP_BORDER (w) + putGetPadTop (s);
break;
case PutTopRight:
/* top right corner */
dx = workArea.width - w->serverWidth - (x - workArea.x) -
- w->input.right - putGetPadRight (s);
- dy = -(y - workArea.y) + w->input.top + putGetPadTop (s);
+ RIGHT_BORDER (w) - putGetPadRight (s);
+ dy = -(y - workArea.y) + TOP_BORDER (w) + putGetPadTop (s);
break;
case PutRight:
/* center of right edge */
dx = workArea.width - w->serverWidth - (x - workArea.x) -
- w->input.right - putGetPadRight (s);
- dy = (workArea.height / 2) - (w->serverHeight / 2) - (y - workArea.y);
+ RIGHT_BORDER (w) - putGetPadRight (s);
+ dy = (workArea.height / 2) - HALF_HEIGHT (w) - (y - workArea.y);
break;
case PutBottomRight:
/* bottom right corner */
dx = workArea.width - w->serverWidth - (x - workArea.x) -
- w->input.right - putGetPadRight (s);
+ RIGHT_BORDER (w) - putGetPadRight (s);
dy = workArea.height - w->serverHeight - (y - workArea.y) -
- w->input.bottom - putGetPadBottom (s);
+ BOTTOM_BORDER (w) - putGetPadBottom (s);
break;
case PutBottom:
/* center of bottom edge */
- dx = (workArea.width / 2) - (w->serverWidth / 2) - (x - workArea.x);
+ dx = (workArea.width / 2) - HALF_WIDTH (w) - (x - workArea.x);
dy = workArea.height - w->serverHeight - (y - workArea.y) -
- w->input.bottom - putGetPadBottom (s);
+ BOTTOM_BORDER (w) - putGetPadBottom (s);
break;
case PutBottomLeft:
/* bottom left corner */
- dx = -(x - workArea.x) + w->input.left + putGetPadLeft (s);
+ dx = -(x - workArea.x) + LEFT_BORDER (w) + putGetPadLeft (s);
dy = workArea.height - w->serverHeight - (y - workArea.y) -
- w->input.bottom - putGetPadBottom (s);
+ BOTTOM_BORDER (w) - putGetPadBottom (s);
break;
case PutRestore:
/* back to last position */
@@ -538,16 +548,16 @@ putGetDistance (CompWindow *w,
if (posX < 0)
/* account for a specified negative position,
like geometry without (-0) */
- dx = posX + s->width - w->serverWidth - x - w->input.right;
+ dx = posX + s->width - w->serverWidth - x - RIGHT_BORDER (w);
else
- dx = posX - x + w->input.left;
+ dx = posX - x + LEFT_BORDER (w);
if (posY < 0)
/* account for a specified negative position,
like geometry without (-0) */
- dy = posY + s->height - w->height - y - w->input.bottom;
+ dy = posY + s->height - w->serverHeight - y - BOTTOM_BORDER (w);
else
- dy = posY - y + w->input.top;
+ dy = posY - y + TOP_BORDER (w);
break;
case PutRelative:
/* move window by offset */
@@ -572,35 +582,35 @@ putGetDistance (CompWindow *w,
if (putGetWindowCenter (s))
{
/* window center */
- dx = rx - (w->serverWidth / 2) - x;
- dy = ry - (w->serverHeight / 2) - y;
+ dx = rx - HALF_WIDTH (w) - x;
+ dy = ry - HALF_HEIGHT (w) - y;
}
else if (rx < s->workArea.width / 2 &&
ry < s->workArea.height / 2)
{
/* top left quad */
- dx = rx - x + w->input.left;
- dy = ry - y + w->input.top;
+ dx = rx - x + LEFT_BORDER (w);
+ dy = ry - y + TOP_BORDER (w);
}
else if (rx < s->workArea.width / 2 &&
ry >= s->workArea.height / 2)
{
/* bottom left quad */
- dx = rx - x + w->input.left;
- dy = ry - w->height - y - w->input.bottom;
+ dx = rx - x + LEFT_BORDER (w);
+ dy = ry - w->serverHeight - y - BOTTOM_BORDER (w);
}
else if (rx >= s->workArea.width / 2 &&
ry < s->workArea.height / 2)
{
/* top right quad */
- dx = rx - w->width - x - w->input.right;
- dy = ry - y + w->input.top;
+ dx = rx - w->serverWidth - x - RIGHT_BORDER (w);
+ dy = ry - y + TOP_BORDER (w);
}
else
{
/* bottom right quad */
- dx = rx - w->width - x - w->input.right;
- dy = ry - w->height - y - w->input.bottom;
+ dx = rx - w->serverWidth - x - RIGHT_BORDER (w);
+ dy = ry - w->serverHeight - y - BOTTOM_BORDER (w);
}
}
else
@@ -627,10 +637,10 @@ putGetDistance (CompWindow *w,
inDx = dxBefore = dx % s->width;
inDy = dyBefore = dy % s->height;
- extents.left = x + inDx - w->input.left;
- extents.top = y + inDy - w->input.top;
- extents.right = x + inDx + w->serverWidth + w->input.right;
- extents.bottom = y + inDy + w->serverHeight + w->input.bottom;
+ extents.left = x + inDx - LEFT_BORDER (w);
+ extents.top = y + inDy - TOP_BORDER (w);
+ extents.right = x + inDx + w->serverWidth + RIGHT_BORDER (w);
+ extents.bottom = y + inDy + w->serverHeight + BOTTOM_BORDER (w);
area.left = workArea.x + putGetPadLeft (s);
area.top = workArea.y + putGetPadTop (s);
--
cgit v0.8.2