diff options
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.patch | 184 |
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 |