summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'x11-plugins/compiz-plugins-main/files/compiz-plugins-main-0.8.4-put-plugin.patch')
-rw-r--r--x11-plugins/compiz-plugins-main/files/compiz-plugins-main-0.8.4-put-plugin.patch184
1 files changed, 184 insertions, 0 deletions
diff --git a/x11-plugins/compiz-plugins-main/files/compiz-plugins-main-0.8.4-put-plugin.patch b/x11-plugins/compiz-plugins-main/files/compiz-plugins-main-0.8.4-put-plugin.patch
new file mode 100644
index 000000000000..b44081d91bc2
--- /dev/null
+++ b/x11-plugins/compiz-plugins-main/files/compiz-plugins-main-0.8.4-put-plugin.patch
@@ -0,0 +1,184 @@
+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