summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'x11-wm/windowmaker/files/xinerama.patch')
-rw-r--r--x11-wm/windowmaker/files/xinerama.patch941
1 files changed, 0 insertions, 941 deletions
diff --git a/x11-wm/windowmaker/files/xinerama.patch b/x11-wm/windowmaker/files/xinerama.patch
deleted file mode 100644
index 85c49caf6ece..000000000000
--- a/x11-wm/windowmaker/files/xinerama.patch
+++ /dev/null
@@ -1,941 +0,0 @@
-Only in .: Makefile
-Only in ./WINGs/Documentation: Makefile
-Only in ./WINGs/Examples: Makefile
-Only in ./WINGs/Extras: Makefile
-Only in ./WINGs: Makefile
-Only in ./WINGs/Resources: Makefile
-Only in ./WINGs/Tests: Makefile
-Only in ./WINGs/WINGs: Makefile
-Only in ./WINGs: get-wings-flags
-Only in ./WINGs: get-wutil-flags
-Only in ./WINGs/po: Makefile
-Only in ./WPrefs.app: Makefile
-Only in ./WPrefs.app/po: Makefile
-Only in ./WPrefs.app/po: Makefile.orig
-Only in ./WPrefs.app/tiff: Makefile
-Only in ./WPrefs.app/xpm: Makefile
-Only in ./WindowMaker/Backgrounds: Makefile
-Only in ./WindowMaker/Defaults: Makefile
-Only in ./WindowMaker/Defaults: WMRootMenu
-Only in ./WindowMaker/IconSets: Makefile
-Only in ./WindowMaker/Icons: Makefile
-Only in ./WindowMaker: Makefile
-Only in ./WindowMaker/Pixmaps: Makefile
-Only in ./WindowMaker/Styles: Makefile
-Only in ./WindowMaker/Themes: Makefile
-Only in .: config.log
-Only in .: config.status
-diff -ru /var/tmp/portage/WindowMaker-0.80.1-r2/work/WindowMaker-0.80.1/configure ./configure
---- /var/tmp/portage/WindowMaker-0.80.1-r2/work/WindowMaker-0.80.1/configure Tue Jul 2 02:37:46 2002
-+++ ./configure Thu Oct 17 16:36:12 2002
-@@ -11747,7 +11747,7 @@
- fi
-
-
--xinerama=no
-+xinerama=yes
- #AC_ARG_ENABLE(xinerama,
- #[ --disable-xinerama disable XInerama extension support],
- # xinerama=$enableval, xinerama=yes)
-Only in ./contrib: Makefile
-Only in ./contrib: WindowMaker.spec
-Only in ./doc: Makefile
-Only in ./doc/sk: Makefile
-Only in .: libtool
-Only in ./po: Makefile
-Only in ./po: Makefile.orig
-Only in ./src: .GNUstep.h.swp
-Only in ./src: .actions.c.swo
-Only in ./src: .actions.c.swp
-Only in ./src: .xinerama.c.swp
-Only in ./src: Makefile
-diff -ru /var/tmp/portage/WindowMaker-0.80.1-r2/work/WindowMaker-0.80.1/src/actions.c ./src/actions.c
---- /var/tmp/portage/WindowMaker-0.80.1-r2/work/WindowMaker-0.80.1/src/actions.c Tue Jul 2 02:30:25 2002
-+++ ./src/actions.c Sun Oct 20 15:57:17 2002
-@@ -412,10 +412,9 @@
- WArea usableArea = wwin->screen_ptr->totalUsableArea;
- WArea totalArea;
-
--
- if (WFLAGP(wwin, no_resizable))
- return;
--
-+
- totalArea.x1 = 0;
- totalArea.y1 = 0;
- totalArea.x2 = wwin->screen_ptr->scr_width;
-@@ -1502,10 +1501,22 @@
- /*
- * Find out screen boundaries.
- */
-+#ifdef XINERAMA
-+ WMRect rect = wGetRectForHead(scr, wGetHeadForPointerLocation(scr));
-+
-+ sx1 = rect.pos.x;
-+ sy1 = rect.pos.y;
-+ sw = rect.size.width;
-+ sh = rect.size.height;
-+ sx2 = sx1 + sw;
-+ sy2 = sy1 + sh;
-+#else
- sx1 = 0;
- sy1 = 0;
-- sx2 = scr->scr_width;
-- sy2 = scr->scr_height;
-+ sw = sx2 = scr->scr_width;
-+ sh = sy2 = scr->scr_height;
-+#endif
-+
- if (scr->dock) {
- if (scr->dock->on_right_side)
- sx2 -= isize + DOCK_EXTRA_SPACE;
-@@ -1513,8 +1524,8 @@
- sx1 += isize + DOCK_EXTRA_SPACE;
- }
-
-- sw = isize * (scr->scr_width/isize);
-- sh = isize * (scr->scr_height/isize);
-+ sw = isize * (sw/isize);
-+ sh = isize * (sh/isize);
- fullW = (sx2-sx1)/isize;
- fullH = (sy2-sy1)/isize;
-
-Only in ./src: actions.c~
-diff -ru /var/tmp/portage/WindowMaker-0.80.1-r2/work/WindowMaker-0.80.1/src/client.c ./src/client.c
---- /var/tmp/portage/WindowMaker-0.80.1-r2/work/WindowMaker-0.80.1/src/client.c Tue Jan 8 14:45:07 2002
-+++ ./src/client.c Sun Oct 20 15:31:54 2002
-@@ -46,6 +46,7 @@
- #ifdef KWM_HINTS
- #include "kwm.h"
- #endif
-+#include "xinerama.h"
-
- /****** Global Variables ******/
-
-@@ -770,6 +771,18 @@
- if (wwin->normal_hints->flags & (USPosition|PPosition)) {
- *x = wwin->normal_hints->x;
- *y = wwin->normal_hints->y;
-+#ifdef XINERAMA
-+ {
-+ WScreen *scr = wwin->screen_ptr;
-+ if ( (unsigned)(*x - scr->scr_width/2 + 10) < 20 &&
-+ (unsigned)(*y - scr->scr_height/2 + 10) < 20) {
-+ int head = wGetHeadForPointerLocation(scr);
-+ WMRect rect = wGetRectForHead(scr, head);
-+ *x = rect.pos.x + (*x * rect.size.width)/scr->scr_width;
-+ *y = rect.pos.y + (*y * rect.size.height)/scr->scr_height;
-+ }
-+ }
-+#endif
- }
- if (wwin->normal_hints->flags & (USSize|PSize)) {
- *width = wwin->normal_hints->width;
-Only in ./src: client.c~
-Only in ./src: config.h
-diff -ru /var/tmp/portage/WindowMaker-0.80.1-r2/work/WindowMaker-0.80.1/src/cycling.c ./src/cycling.c
---- /var/tmp/portage/WindowMaker-0.80.1-r2/work/WindowMaker-0.80.1/src/cycling.c Tue Jan 8 14:45:07 2002
-+++ ./src/cycling.c Sun Oct 20 15:17:56 2002
-@@ -37,6 +37,9 @@
- #include "stacking.h"
- #include "funcs.h"
-
-+#include "xinerama.h"
-+
-+
- /* Globals */
- extern WPreferences wPreferences;
-
-@@ -303,8 +306,18 @@
- }
-
- scr->flags.doing_alt_tab = 0;
-- if (openedSwitchMenu)
-- OpenSwitchMenu(scr, scr->scr_width/2, scr->scr_height/2, False);
-+ if (openedSwitchMenu) {
-+ int x, y;
-+#ifdef XINERAMA
-+ WMRect rect = wGetRectForHead(scr, wGetHeadForPointerLocation(scr));
-+ x = rect.pos.x + rect.size.width/2;
-+ y = rect.pos.y + rect.size.height/2;
-+#else
-+ x = scr->scr_width/2;
-+ y = scr->scr_height/2;
-+#endif
-+ OpenSwitchMenu(scr, x, y, False);
-+ }
-
- if (somethingElse) {
- WMHandleEvent(&ev);
-diff -ru /var/tmp/portage/WindowMaker-0.80.1-r2/work/WindowMaker-0.80.1/src/dialog.c ./src/dialog.c
---- /var/tmp/portage/WindowMaker-0.80.1-r2/work/WindowMaker-0.80.1/src/dialog.c Thu Feb 21 12:28:48 2002
-+++ ./src/dialog.c Sun Oct 20 15:40:00 2002
-@@ -70,12 +70,7 @@
- WMPoint pt;
-
- #ifdef XINERAMA
-- WMRect rect;
--
-- rect = wGetRectForHead(scr, wGetHeadForPointerLocation(scr));
--
-- pt.x = rect.pos.x + (rect.size.width - width)/2;
-- pt.y = rect.pos.y + (rect.size.height - height)/2;
-+ return wGetCenterForHead(scr, wGetHeadForPointerLocation(scr), width, height);
- #else
- pt.x = (scr->scr_width - width) / 2;
- pt.y = (scr->scr_height - height) / 2;
-@@ -144,6 +139,7 @@
- WMButton *saveSessionBtn;
- Window parent;
- WWindow *wwin;
-+ WMPoint center;
- int result;
-
- panel = WMCreateAlertPanel(scr->wmscreen, NULL, title, message,
-@@ -163,9 +159,9 @@
-
- XReparentWindow(dpy, WMWidgetXID(panel->win), parent, 0, 0);
-
-+ center = getCenter( scr, 400, 180);
- wwin = wManageInternalWindow(scr, parent, None, NULL,
-- (scr->scr_width - 400)/2,
-- (scr->scr_height - 180)/2, 400, 180);
-+ center.x, center.y, 400, 180);
- wwin->client_leader = WMWidgetXID(panel->win);
-
- WMMapWidget(panel->win);
-Only in ./src: dialog.c~
-diff -ru /var/tmp/portage/WindowMaker-0.80.1-r2/work/WindowMaker-0.80.1/src/dockedapp.c ./src/dockedapp.c
---- /var/tmp/portage/WindowMaker-0.80.1-r2/work/WindowMaker-0.80.1/src/dockedapp.c Tue Jan 8 14:45:13 2002
-+++ ./src/dockedapp.c Sun Oct 20 15:17:57 2002
-@@ -39,12 +39,12 @@
- #include "defaults.h"
- #include "framewin.h"
-
-+#include "xinerama.h"
-
- /**** Global variables ****/
- extern WPreferences wPreferences;
-
-
--
- typedef struct _AppSettingsPanel {
- WMWindow *win;
- WAppIcon *editedIcon;
-@@ -448,6 +448,26 @@
-
- XReparentWindow(dpy, WMWidgetXID(panel->win), parent, 0, 0);
-
-+#ifdef XINERAMA
-+ {
-+ WMRect rect = wGetRectForHead( scr, wGetHeadForPointerLocation( scr));
-+
-+ y = aicon->y_pos;
-+ if ( y < rect.pos.y)
-+ y = rect.pos.y;
-+ else if ( y + PHEIGHT > rect.pos.y + rect.size.height)
-+ y = rect.pos.y + rect.size.height - PHEIGHT - 30;
-+
-+ if (aicon->dock && aicon->dock->type == WM_DOCK) {
-+ if (aicon->dock->on_right_side)
-+ x = rect.pos.x + rect.size.width/2;
-+ else
-+ x = rect.pos.x + rect.size.width/2 - PWIDTH - 2;
-+ } else {
-+ x = rect.pos.x + (rect.size.width - PWIDTH)/2;
-+ }
-+ }
-+#else
- y = aicon->y_pos;
- if (y < 0)
- y = 0;
-@@ -462,6 +482,7 @@
- } else {
- x = (scr->scr_width - PWIDTH)/2;
- }
-+#endif
- panel->wwin = wManageInternalWindow(scr, parent, None,
- _("Docked Application Settings"),
- x, y, PWIDTH, PHEIGHT);
-Only in ./src: dockedapp.c~
-diff -ru /var/tmp/portage/WindowMaker-0.80.1-r2/work/WindowMaker-0.80.1/src/moveres.c ./src/moveres.c
---- /var/tmp/portage/WindowMaker-0.80.1-r2/work/WindowMaker-0.80.1/src/moveres.c Tue Jan 8 14:45:13 2002
-+++ ./src/moveres.c Sun Oct 20 15:17:58 2002
-@@ -41,6 +41,8 @@
- #include "workspace.h"
-
- #include "geomview.h"
-+#include "screen.h"
-+#include "xinerama.h"
-
-
- #ifdef KWM_HINTS
-@@ -172,8 +174,16 @@
- WMUnmapWidget(scr->gview);
- } else {
- if (wPreferences.move_display == WDIS_CENTER) {
-- moveGeometryDisplayCentered(scr,
-- scr->scr_width/2, scr->scr_height/2);
-+ WMPoint p;
-+#ifdef XINERAMA
-+ p = wGetCenterForHead(scr,
-+ wGetHeadForPointerLocation(scr),
-+ 0, 0);
-+#else
-+ p.x = scr->scr_width/2;
-+ p.y = scr->scr_height/2;
-+#endif
-+ moveGeometryDisplayCentered(scr, p.x, p.y);
- } else if (wPreferences.move_display == WDIS_TOPLEFT) {
- moveGeometryDisplayCentered(scr, 1, 1);
- } else if (wPreferences.move_display == WDIS_FRAME_CENTER) {
-@@ -193,8 +203,16 @@
- || wPreferences.move_display == WDIS_NONE) {
- return;
- } else if (wPreferences.move_display == WDIS_CENTER) {
-- moveGeometryDisplayCentered(scr, scr->scr_width / 2,
-- scr->scr_height / 2);
-+ WMPoint p;
-+#ifdef XINERAMA
-+ p = wGetCenterForHead(scr,
-+ wGetHeadForPointerLocation(scr),
-+ 0, 0);
-+#else
-+ p.x = scr->scr_width/2;
-+ p.y = scr->scr_height/2;
-+#endif
-+ moveGeometryDisplayCentered(scr, p.x, p.y);
- } else if (wPreferences.move_display == WDIS_TOPLEFT) {
- moveGeometryDisplayCentered(scr, 1, 1);
- } else if (wPreferences.move_display == WDIS_FRAME_CENTER) {
-@@ -357,8 +375,16 @@
- WMUnmapWidget(scr->gview);
- } else {
- if (wPreferences.size_display == WDIS_CENTER) {
-- moveGeometryDisplayCentered(scr,
-- scr->scr_width / 2, scr->scr_height / 2);
-+ WMPoint p;
-+#ifdef XINERAMA
-+ p = wGetCenterForHead(scr,
-+ wGetHeadForPointerLocation(scr),
-+ 0, 0);
-+#else
-+ p.x = scr->scr_width/2;
-+ p.y = scr->scr_height/2;
-+#endif
-+ moveGeometryDisplayCentered(scr, p.x, p.y);
- } else if (wPreferences.size_display == WDIS_TOPLEFT) {
- moveGeometryDisplayCentered(scr, 1, 1);
- } else if (wPreferences.size_display == WDIS_FRAME_CENTER) {
-@@ -380,8 +406,16 @@
- return;
-
- if (wPreferences.size_display == WDIS_CENTER) {
-- moveGeometryDisplayCentered(scr, scr->scr_width / 2,
-- scr->scr_height / 2);
-+ WMPoint p;
-+#ifdef XINERAMA
-+ p = wGetCenterForHead(scr,
-+ wGetHeadForPointerLocation(scr),
-+ 0, 0);
-+#else
-+ p.x = scr->scr_width/2;
-+ p.y = scr->scr_height/2;
-+#endif
-+ moveGeometryDisplayCentered(scr, p.x, p.y);
- } else if (wPreferences.size_display == WDIS_TOPLEFT) {
- moveGeometryDisplayCentered(scr, 1, 1);
- } else if (wPreferences.size_display == WDIS_FRAME_CENTER) {
-@@ -398,8 +432,10 @@
- {
- WWindow *tmpw;
- int x, y;
-+#if 0
- int scr_width = wwin->screen_ptr->scr_width;
- int scr_height = wwin->screen_ptr->scr_height;
-+#endif
-
- if (!array || !WMGetArrayItemCount(array)) {
- wWindowMove(wwin, wwin->frame_x + dx, wwin->frame_y + dy);
-@@ -412,6 +448,7 @@
-
- /* don't let windows become unreachable */
-
-+#if 0
- if (x + (int)tmpw->frame->core->width < 20)
- x = 20 - (int)tmpw->frame->core->width;
- else if (x + 20 > scr_width)
-@@ -421,6 +458,11 @@
- y = 20 - (int)tmpw->frame->core->height;
- else if (y + 20 > scr_height)
- y = scr_height - 20;
-+#else
-+ wScreenBringInside(wwin->screen_ptr, &x, &y,
-+ (int)tmpw->frame->core->width,
-+ (int)tmpw->frame->core->height);
-+#endif
-
- wWindowMove(tmpw, x, y);
- }
-@@ -462,9 +504,11 @@
- drawFrames(WWindow *wwin, WMArray *array, int dx, int dy)
- {
- WWindow *tmpw;
-+ int x, y;
-+#if 0
- int scr_width = wwin->screen_ptr->scr_width;
- int scr_height = wwin->screen_ptr->scr_height;
-- int x, y;
-+#endif
-
- if (!array) {
-
-@@ -483,7 +527,7 @@
- y = tmpw->frame_y + dy;
-
- /* don't let windows become unreachable */
--
-+#if 0
- if (x + (int)tmpw->frame->core->width < 20)
- x = 20 - (int)tmpw->frame->core->width;
- else if (x + 20 > scr_width)
-@@ -493,7 +537,11 @@
- y = 20 - (int)tmpw->frame->core->height;
- else if (y + 20 > scr_height)
- y = scr_height - 20;
--
-+#else
-+ wScreenBringInside(wwin->screen_ptr, &x, &y,
-+ (int)tmpw->frame->core->width,
-+ (int)tmpw->frame->core->height);
-+#endif
- drawTransparentFrame(tmpw, x, y, tmpw->frame->core->width,
- tmpw->frame->core->height);
- }
-@@ -955,10 +1003,19 @@
- if (dx || dy) {
- int i;
- /* window is the leftmost window: check against screen edge */
-+#ifdef XINERAMA
-+ WMRect rect = wGetRectForHead( scr, wGetHeadForPointerLocation( scr));
-+
-+ l_edge = WMAX( scr->totalUsableArea.x1, rect.pos.x);
-+ edge_l = l_edge - resist;
-+ edge_r = WMIN( scr->totalUsableArea.x2, rect.pos.x + rect.size.width);
-+ r_edge = edge_r + resist;
-+#else
- l_edge = scr->totalUsableArea.x1;
- r_edge = scr->totalUsableArea.x2 + resist;
- edge_l = scr->totalUsableArea.x1 - resist;
- edge_r = scr->totalUsableArea.x2;
-+#endif
-
- /* 1 */
- if ((data->rightIndex >= 0) && (data->rightIndex <= data->count)) {
-@@ -1054,10 +1111,17 @@
- }
-
- /* VeRT */
-+#ifdef XINERAMA
-+ t_edge = WMAX( scr->totalUsableArea.y1, rect.pos.y);
-+ edge_t = t_edge - resist;
-+ edge_b = WMIN( scr->totalUsableArea.y2, rect.pos.y + rect.size.height);
-+ b_edge = edge_b + resist;
-+#else
- t_edge = scr->totalUsableArea.y1;
- b_edge = scr->totalUsableArea.y2 + resist;
- edge_t = scr->totalUsableArea.y1 - resist;
- edge_b = scr->totalUsableArea.y2;
-+#endif
-
- if ((data->bottomIndex >= 0) && (data->bottomIndex <= data->count)) {
- WWindow *looprw;
-Only in ./src: moveres.c~
-diff -ru /var/tmp/portage/WindowMaker-0.80.1-r2/work/WindowMaker-0.80.1/src/placement.c ./src/placement.c
---- /var/tmp/portage/WindowMaker-0.80.1-r2/work/WindowMaker-0.80.1/src/placement.c Tue Jan 8 14:45:13 2002
-+++ ./src/placement.c Sun Oct 20 15:37:11 2002
-@@ -40,6 +40,7 @@
- #include "appicon.h"
- #include "dock.h"
-
-+#include "xinerama.h"
-
- extern WPreferences wPreferences;
-
-@@ -144,10 +145,22 @@
- /*
- * Find out screen boundaries.
- */
-+#ifdef XINERAMA
-+ WMRect rect = wGetRectForHead( scr, wGetHeadForPointerLocation( scr));
-+
-+ sx1 = rect.pos.x;
-+ sy1 = rect.pos.y;
-+ sw = rect.size.width;
-+ sh = rect.size.height;
-+ sx2 = sx1 + sw;
-+ sy2 = sy1 + sh;
-+#else
- sx1 = 0;
- sy1 = 0;
-- sx2 = scr->scr_width;
-- sy2 = scr->scr_height;
-+ sw = sx2 = scr->scr_width;
-+ sh = sy2 = scr->scr_height;
-+#endif
-+
- if (scr->dock) {
- if (scr->dock->on_right_side)
- sx2 -= isize + DOCK_EXTRA_SPACE;
-@@ -155,8 +168,8 @@
- sx1 += isize + DOCK_EXTRA_SPACE;
- }
-
-- sw = isize * (scr->scr_width/isize);
-- sh = isize * (scr->scr_height/isize);
-+ sw = isize * (sw/isize);
-+ sh = isize * (sh/isize);
- fullW = (sx2-sx1)/isize;
- fullH = (sy2-sy1)/isize;
-
-@@ -337,7 +350,8 @@
-
- static void
- smartPlaceWindow(WWindow *wwin, int *x_ret, int *y_ret,
-- unsigned int width, unsigned int height)
-+ unsigned int width, unsigned int height,
-+ WArea usableArea)
- {
- WScreen *scr = wwin->screen_ptr;
- int test_x = 0, test_y = Y_ORIGIN(scr);
-@@ -346,7 +360,6 @@
- int min_isect, min_isect_x, min_isect_y;
- int sum_isect;
- int extra_height;
-- WArea usableArea = scr->totalUsableArea;
-
- if (wwin->frame)
- extra_height = wwin->frame->top_width + wwin->frame->bottom_width;
-@@ -413,7 +426,8 @@
-
- static Bool
- autoPlaceWindow(WWindow *wwin, int *x_ret, int *y_ret,
-- unsigned int width, unsigned int height, int tryCount)
-+ unsigned int width, unsigned int height, int tryCount,
-+ WArea usableArea)
- {
- WScreen *scr = wwin->screen_ptr;
- int test_x = 0, test_y = Y_ORIGIN(scr);
-@@ -421,7 +435,6 @@
- int swidth, sx;
- WWindow *test_window;
- int extra_height;
-- WArea usableArea = scr->totalUsableArea;
-
- if (wwin->frame)
- extra_height = wwin->frame->top_width + wwin->frame->bottom_width + 2;
-@@ -527,10 +540,10 @@
-
- static void
- cascadeWindow(WScreen *scr, WWindow *wwin, int *x_ret, int *y_ret,
-- unsigned int width, unsigned int height, int h)
-+ unsigned int width, unsigned int height, int h,
-+ WArea usableArea)
- {
- unsigned int extra_height;
-- WArea usableArea = scr->totalUsableArea;
-
- if (wwin->frame)
- extra_height = wwin->frame->top_width + wwin->frame->bottom_width;
-@@ -555,6 +568,14 @@
- {
- WScreen *scr = wwin->screen_ptr;
- int h = WMFontHeight(scr->title_font) + (wPreferences.window_title_clearance + TITLEBAR_EXTEND_SPACE) * 2;
-+ WArea usableArea;
-+
-+#ifdef XINERAMA
-+ int head = wGetHeadForPointerLocation(scr);
-+ usableArea = wGetUsableAreaForHead(scr, head);
-+#else
-+ usableArea = wwin->screen_ptr->totalUsableArea;
-+#endif /* XINERAMA */
-
- switch (wPreferences.window_placement) {
- case WPM_MANUAL:
-@@ -562,13 +583,13 @@
- break;
-
- case WPM_SMART:
-- smartPlaceWindow(wwin, x_ret, y_ret, width, height);
-+ smartPlaceWindow(wwin, x_ret, y_ret, width, height, usableArea);
- break;
-
- case WPM_AUTO:
-- if (autoPlaceWindow(wwin, x_ret, y_ret, width, height, 0)) {
-+ if (autoPlaceWindow(wwin, x_ret, y_ret, width, height, 0, usableArea)) {
- break;
-- } else if (autoPlaceWindow(wwin, x_ret, y_ret, width, height, 1)) {
-+ } else if (autoPlaceWindow(wwin, x_ret, y_ret, width, height, 1, usableArea)) {
- break;
- }
- /* there isn't a break here, because if we fail, it should fall
-@@ -579,7 +600,7 @@
- if (wPreferences.window_placement == WPM_AUTO)
- scr->cascade_index++;
-
-- cascadeWindow(scr, wwin, x_ret, y_ret, width, height, h);
-+ cascadeWindow(scr, wwin, x_ret, y_ret, width, height, h, usableArea);
-
- if (wPreferences.window_placement == WPM_CASCADE)
- scr->cascade_index++;
-@@ -588,7 +609,6 @@
- case WPM_RANDOM:
- {
- int w, h, extra_height;
-- WArea usableArea = scr->totalUsableArea;
-
- if (wwin->frame)
- extra_height = wwin->frame->top_width + wwin->frame->bottom_width + 2;
-@@ -611,16 +631,16 @@
- *y_ret = 0;
- #endif
- }
--
-- if (*x_ret + width > scr->scr_width)
-- *x_ret = scr->scr_width - width;
-- if (*x_ret < 0)
-- *x_ret = 0;
--
-- if (*y_ret + height > scr->scr_height)
-- *y_ret = scr->scr_height - height;
-- if (*y_ret < 0)
-- *y_ret = 0;
-+
-+ if (*x_ret + width > usableArea.x2)
-+ *x_ret = usableArea.x2 - width;
-+ if (*x_ret < usableArea.x1)
-+ *x_ret = usableArea.x1;
-+
-+ if (*y_ret + height > usableArea.y2)
-+ *y_ret = usableArea.y2 - height;
-+ if (*y_ret < usableArea.y1)
-+ *y_ret = usableArea.y1;
- }
-
-
-Only in ./src: placement.c~
-diff -ru /var/tmp/portage/WindowMaker-0.80.1-r2/work/WindowMaker-0.80.1/src/screen.c ./src/screen.c
---- /var/tmp/portage/WindowMaker-0.80.1-r2/work/WindowMaker-0.80.1/src/screen.c Thu Feb 21 12:28:48 2002
-+++ ./src/screen.c Sun Oct 20 15:38:08 2002
-@@ -1155,6 +1155,30 @@
- int moved = 0;
- int tol_w, tol_h;
-
-+ int sx1, sy1, sx2, sy2;
-+
-+#ifdef XINERAMA
-+ WMRect rect;
-+ int head;
-+
-+ rect.pos.x = *x;
-+ rect.pos.y = *y;
-+ rect.size.width = width;
-+ rect.size.height = height;
-+
-+ head = wGetHeadForRect(scr, rect);
-+ rect = wGetRectForHead(scr, head);
-+
-+ sx1 = rect.pos.x;
-+ sy1 = rect.pos.y;
-+ sx2 = sx1 + rect.size.width;
-+ sy2 = sy1 + rect.size.height;
-+#else
-+ sx1 = sy1 = 0;
-+ sx2 = scr->scr_width;
-+ sy2 = scr->scr_height;
-+#endif
-+
- if (width > 20)
- tol_w = width/2;
- else
-@@ -1165,15 +1189,15 @@
- else
- tol_h = 20;
-
-- if (*x+width < 10)
-- *x = -tol_w, moved = 1;
-- else if (*x >= scr->scr_width - 10)
-- *x = scr->scr_width - tol_w - 1, moved = 1;
--
-- if (*y < -height + 10)
-- *y = -tol_h, moved = 1;
-- else if (*y >= scr->scr_height - 10)
-- *y = scr->scr_height - tol_h - 1, moved = 1;
-+ if (*x + width < sx1 + 10)
-+ *x = sx1 - tol_w, moved = 1;
-+ else if (*x >= sx2 - 10)
-+ *x = sx2 - tol_w - 1, moved = 1;
-+
-+ if (*y < sy1 - height + 10)
-+ *y = sy1 - tol_h, moved = 1;
-+ else if (*y >= sy2 - 10)
-+ *y = sy2 - tol_h - 1, moved = 1;
-
- return moved;
- }
-Only in ./src: screen.c~
-Only in ./src: stamp-h
-Only in ./src: tags
-diff -ru /var/tmp/portage/WindowMaker-0.80.1-r2/work/WindowMaker-0.80.1/src/window.c ./src/window.c
---- /var/tmp/portage/WindowMaker-0.80.1-r2/work/WindowMaker-0.80.1/src/window.c Tue Jul 2 02:30:25 2002
-+++ ./src/window.c Sun Oct 20 15:38:56 2002
-@@ -54,6 +54,7 @@
- #include "defaults.h"
- #include "workspace.h"
-
-+#include "xinerama.h"
-
- #ifdef MWM_HINTS
- # include "motif.h"
-@@ -1109,6 +1110,30 @@
- y = transientOwner->frame_y +
- abs((transientOwner->frame->core->height - height)/3) + offs;
-
-+#ifdef XINERAMA
-+ {
-+ WMRect rect;
-+ int head;
-+
-+ rect.pos.x = transientOwner->frame_x;
-+ rect.pos.y = transientOwner->frame_y;
-+ rect.size.width = transientOwner->frame->core->width;
-+ rect.size.height = transientOwner->frame->core->height;
-+
-+ head = wGetHeadForRect(scr, rect);
-+ rect = wGetRectForHead(scr, head);
-+
-+ if ( x < rect.pos.x)
-+ x = rect.pos.x;
-+ else if ( x + width > rect.pos.x + rect.size.width)
-+ x = rect.pos.x + rect.size.width - width;
-+
-+ if ( y < rect.pos.y)
-+ y = rect.pos.y;
-+ else if ( y + height > rect.pos.y + rect.size.height)
-+ y = rect.pos.y + rect.size.height - height;
-+ }
-+#else
- if (x < 0)
- x = 0;
- else if (x + width > scr->scr_width)
-@@ -1118,6 +1143,7 @@
- y = 0;
- else if (y + height > scr->scr_height)
- y = scr->scr_height - height;
-+#endif
- } else {
- PlaceWindow(wwin, &x, &y, width, height);
- }
-Only in ./src: window.c~
-Only in ./src: windowmaker.patch
-diff -ru /var/tmp/portage/WindowMaker-0.80.1-r2/work/WindowMaker-0.80.1/src/xinerama.c ./src/xinerama.c
---- /var/tmp/portage/WindowMaker-0.80.1-r2/work/WindowMaker-0.80.1/src/xinerama.c Sat Feb 16 05:53:33 2002
-+++ ./src/xinerama.c Sun Oct 20 15:40:27 2002
-@@ -53,6 +53,7 @@
- * 0 if the rectangles do not intersect, 1 otherwise.
- */
-
-+#if 0
- typedef struct {
- int x1, y1, x2, y2;
- } _Rectangle;
-@@ -97,18 +98,60 @@
- rect1.x1 = x1;
- rect1.y1 = y1;
- rect1.x2 = x1+w1;
-- rect1.x2 = y1+w1;
-+ rect1.y2 = y1+h1;
-
- rect2.x1 = x2;
- rect2.y1 = y2;
- rect2.x2 = x2+w2;
-- rect2.x2 = y2+w2;
-+ rect2.y2 = y2+h2;
-
- if (intersect_rectangles(&rect1, &rect2, &result))
- return (result.x2-result.x1)*(result.y2-result.y1);
- else
- return 0;
- }
-+#else
-+/*
-+ * This function calculates the length of the intersection of two
-+ * line sections. (Hey, is that english?)
-+ */
-+static int
-+calcIntersectionLength(int p1, int l1, int p2, int l2)
-+{
-+ int isect;
-+ int tmp;
-+
-+ if (p1 > p2) {
-+ tmp = p1;
-+ p1 = p2;
-+ p2 = tmp;
-+ tmp = l1;
-+ l1 = l2;
-+ l2 = tmp;
-+ }
-+
-+ if (p1 + l1 < p2)
-+ isect = 0;
-+ else if (p2 + l2 < p1 + l1)
-+ isect = l2;
-+ else
-+ isect = p1 + l1 - p2;
-+
-+ return isect;
-+}
-+
-+
-+/*
-+ * This function calculates the area of the intersection of two rectangles.
-+ */
-+static int
-+intersectArea(int x1, int y1, int w1, int h1,
-+ int x2, int y2, int w2, int h2)
-+{
-+ return calcIntersectionLength(x1, w1, x2, w2)
-+ * calcIntersectionLength(y1, h1, y2, h2);
-+}
-+#endif
-
-
- /* get the head that covers most of the rectangle */
-@@ -140,6 +183,9 @@
- }
- }
-
-+ if ( best == -1)
-+ best = wGetHeadForPointerLocation(scr);
-+
- return best;
- }
-
-@@ -162,6 +208,7 @@
- int i;
-
- for (i = 0; i < scr->xine_count; i++) {
-+#if 0
- int yy, xx;
-
- xx = scr->xine_screens[i].x_org + scr->xine_screens[i].width;
-@@ -171,6 +218,13 @@
- point.x < xx && point.y < yy) {
- return i;
- }
-+#else
-+ XineramaScreenInfo *xsi = &scr->xine_screens[i];
-+
-+ if ((unsigned)(point.x - xsi->x_org) < xsi->width &&
-+ (unsigned)(point.y - xsi->y_org) < xsi->height)
-+ return i;
-+#endif
- }
-
- return scr->xine_primary_head;
-@@ -184,7 +238,6 @@
- int ble;
- unsigned int blo;
-
--
- if (!XQueryPointer(dpy, scr->root_win, &bla, &bla,
- &point.x, &point.y,
- &ble, &ble,
-@@ -199,7 +252,14 @@
- {
- WMRect rect;
-
-- if (head < scr->xine_count) {
-+ if (scr->xine_count) {
-+#if 0
-+ if ( head < 0)
-+ head = 0;
-+ else if ( head >= scr->xine_count)
-+ head %= scr->xine_count;
-+#endif
-+
- rect.pos.x = scr->xine_screens[head].x_org;
- rect.pos.y = scr->xine_screens[head].y_org;
- rect.size.width = scr->xine_screens[head].width;
-@@ -217,9 +277,11 @@
- }
- }
-
--
-+#if 0
- WMRect wGetUsableRectForHead(WScreen *scr, int head)
- {
-+ WMRect rect;
-+
- if (head < scr->xine_count) {
- rect.pos.x = scr->xine_screens[head].x_org;
- rect.pos.y = scr->xine_screens[head].y_org;
-@@ -237,5 +299,35 @@
- return rect;
- }
- }
-+#endif
-+
-+WArea wGetUsableAreaForHead(WScreen *scr, int head)
-+{
-+ WArea totalArea, usableArea = scr->totalUsableArea;
-+ WMRect rect = wGetRectForHead(scr, head);
-+
-+ totalArea.x1 = rect.pos.x;
-+ totalArea.y1 = rect.pos.y;
-+ totalArea.x2 = totalArea.x1 + rect.size.width;
-+ totalArea.y2 = totalArea.y1 + rect.size.height;
-+
-+ usableArea.x1 = WMAX(totalArea.x1, usableArea.x1);
-+ usableArea.y1 = WMAX(totalArea.y1, usableArea.y1);
-+ usableArea.x2 = WMIN(totalArea.x2, usableArea.x2);
-+ usableArea.y2 = WMIN(totalArea.y2, usableArea.y2);
-+
-+ return usableArea;
-+}
-+
-+WMPoint wGetCenterForHead(WScreen *scr, int head, int width, int height)
-+{
-+ WMPoint p;
-+ WMRect rect = wGetRectForHead(scr, head);
-+
-+ p.x = rect.pos.x + (rect.size.width - width)/2;
-+ p.y = rect.pos.y + (rect.size.height - height)/2;
-+
-+ return p;
-+}
-
- #endif
-Only in ./src: xinerama.c~
-diff -ru /var/tmp/portage/WindowMaker-0.80.1-r2/work/WindowMaker-0.80.1/src/xinerama.h ./src/xinerama.h
---- /var/tmp/portage/WindowMaker-0.80.1-r2/work/WindowMaker-0.80.1/src/xinerama.h Sat Feb 16 05:53:33 2002
-+++ ./src/xinerama.h Sun Oct 20 15:18:00 2002
-@@ -41,6 +41,10 @@
-
- WMRect wGetUsableRectForHead(WScreen *scr, int head);
-
-+WArea wGetUsableAreaForHead(WScreen *scr, int head);
-+
-+WMPoint wGetCenterForHead(WScreen *scr, int head, int width, int height);
-+
- #endif
-
-
-Only in ./test: Makefile
-Only in ./util: Makefile
-Only in .: windowmaker-xinerama.patch
-Only in .: windowmaker.patch
-Only in ./wmlib: Makefile
-Only in ./wrlib: Makefile
-Only in ./wrlib: get-wraster-flags