File plugins-extra-NOMAD.diff of Package compiz-fusion-plugins-extra

diff --git a/src/3d/3d.c b/src/3d/3d.c
index 0afa8cc..545951a 100644
--- a/src/3d/3d.c
+++ b/src/3d/3d.c
@@ -146,7 +146,7 @@ tdPreparePaintScreen (CompScreen *s,
 	(*cs->getRotation) (s, &x, &x, &progress);
 
 	tds->maxDepth = 0;
-	for (w = s->windows; w; w = w->next)
+	for (w = s->root.windows; w; w = w->next)
 	{
 	    TD_WINDOW (w);
 	    tdw->is3D = FALSE;
@@ -459,7 +459,7 @@ tdPaintViewport (CompScreen              *s,
 	if (wDepth != 0.0)
 	{
 	    /* all BTF windows in normal order */
-	    for (w = s->windows; w; w = w->next)
+	    for (w = s->root.windows; w; w = w->next)
 	    {
 		tdw = (tdWindow *)
 		      (w)->base.privates[tds->windowPrivateIndex].ptr;
@@ -481,7 +481,7 @@ tdPaintViewport (CompScreen              *s,
 
 	screenLighting (s, TRUE);
 
-	(*s->initWindowWalker) (s, &walk);
+	(*s->initWindowWalker) (s, &s->root, &walk);
 
 	matrixGetIdentity (&screenSpace);
 	transformToScreenSpace (s, output, -sAttrib->zTranslate,
@@ -490,7 +490,7 @@ tdPaintViewport (CompScreen              *s,
 	glPushMatrix ();
 
 	/* paint all windows from bottom to top */
-	for (w = (*walk.first) (s); w; w = (*walk.next) (w))
+	for (w = (*walk.first) (&s->root); w; w = (*walk.next) (w))
 	{
 	    if (w->destroyed)
 		continue;
@@ -524,11 +524,14 @@ tdPaintViewport (CompScreen              *s,
 		(*s->applyScreenTransform) (s, sAttrib, output, &mTransform);
 		(*s->enableOutputClipping) (s, &mTransform, region, output);
 
-		if ((s->windowOffsetX != 0 || s->windowOffsetY != 0) &&
+		if ((s->root.viewportOffsetX != 0 ||
+		     s->root.viewportOffsetY != 0) &&
 		    !windowOnAllViewports (w))
 		{
-		    getWindowMovementForOffset (w, s->windowOffsetX,
-						s->windowOffsetY, &offX, &offY);
+		    getWindowMovementForOffset (w,
+						s->root.viewportOffsetX,
+						s->root.viewportOffsetY,
+						&offX, &offY);
 
 		    screenSpaceOffset = screenSpace;
 		    matrixTranslate (&screenSpaceOffset, offX, offY, 0);
diff --git a/src/addhelper/addhelper.c b/src/addhelper/addhelper.c
index 96b32b3..fbfddaf 100644
--- a/src/addhelper/addhelper.c
+++ b/src/addhelper/addhelper.c
@@ -83,7 +83,7 @@ walkWindows (CompDisplay *d)
 
     for (s = d->screens; s; s = s->next)
     {
-	for (w = s->windows; w; w = w->next)
+	for (w = s->root.windows; w; w = w->next)
 	{
 	    ADD_WINDOW (w);
 
diff --git a/src/animationaddon/polygon.c b/src/animationaddon/polygon.c
index 9095e8b..41e0f66 100644
--- a/src/animationaddon/polygon.c
+++ b/src/animationaddon/polygon.c
@@ -980,8 +980,9 @@ polygonsDrawCustomGeometry (CompWindow * w)
     aw->nDrawGeometryCalls++;
 
     // draw windows only on current viewport unless it's on all viewports
-    if ((s->windowOffsetX != 0 || s->windowOffsetY != 0) &&
-	!windowOnAllViewports (w))
+    if (!w->parent ||
+	((w->parent->viewportOffsetX || w->parent->viewportOffsetY) &&
+	 !windowOnAllViewports (w)))
     {
 	return;
 	// since this is not the viewport the window was drawn
@@ -1643,7 +1644,7 @@ polygonsPrePaintOutput (CompScreen *s, CompOutput *output)
     // Find out if an animation running now uses depth test
     Bool depthUsed = FALSE;
     CompWindow *w;
-    for (w = s->windows; w; w = w->next)
+    for (w = s->root.windows; w; w = w->next)
     {
 	ANIMADDON_WINDOW (w);
 	if (aw->com->animRemainingTime > 0 &&
diff --git a/src/cubeaddon/cubeaddon.c b/src/cubeaddon/cubeaddon.c
index 413a72d..86a797a 100644
--- a/src/cubeaddon/cubeaddon.c
+++ b/src/cubeaddon/cubeaddon.c
@@ -963,8 +963,10 @@ cubeaddonAddWindowGeometry (CompWindow *w,
 
 	if (!windowOnAllViewports (w))
 	{
-	    getWindowMovementForOffset (w, s->windowOffsetX,
-                                        s->windowOffsetY, &offX, &offY);
+	    getWindowMovementForOffset (w,
+					s->root.viewportOffsetX,
+                                        s->root.viewportOffsetY,
+					&offX, &offY);
 	}
 
 	if (cs->moMode == CUBE_MOMODE_ONE)
@@ -1106,8 +1108,10 @@ cubeaddonDrawWindow (CompWindow	          *w,
 
 	if (!windowOnAllViewports (w))
 	{
-	    getWindowMovementForOffset (w, s->windowOffsetX,
-                                        s->windowOffsetY, &offX, &offY);
+	    getWindowMovementForOffset (w,
+					s->root.viewportOffsetX,
+                                        s->root.viewportOffsetY,
+					&offX, &offY);
 	}
 
 	x1 = w->attrib.x - w->output.left + offX;
@@ -1163,8 +1167,10 @@ cubeaddonDrawWindowTexture (CompWindow	         *w,
 	
 	if (!windowOnAllViewports (w))
 	{
-	    getWindowMovementForOffset (w, s->windowOffsetX,
-                                        s->windowOffsetY, &offX, &offY);
+	    getWindowMovementForOffset (w,
+					s->root.viewportOffsetX,
+                                        s->root.viewportOffsetY,
+					&offX, &offY);
 	}
 	
 	if (cs->moMode == CUBE_MOMODE_ONE)
@@ -1265,7 +1271,7 @@ cubeaddonPaintTransformedOutput (CompScreen              *s,
     CUBE_SCREEN (s);
 
     if (cubeaddonGetDeformation (s) != DeformationNone
-	&& s->hsize * cs->nOutput > 2 && s->desktopWindowCount &&
+	&& s->hsize * cs->nOutput > 2 && s->root.desktopWindowCount &&
 	(cs->rotationState == RotationManual ||
 	(cs->rotationState == RotationChange &&
 	!cubeaddonGetCylinderManualOnly (s)) || cas->wasDeformed) &&
diff --git a/src/fadedesktop/fadedesktop.c b/src/fadedesktop/fadedesktop.c
index 3336f74..16f74f4 100644
--- a/src/fadedesktop/fadedesktop.c
+++ b/src/fadedesktop/fadedesktop.c
@@ -96,7 +96,7 @@ fadeDesktopActivateEvent (CompScreen *s,
 
 	o[0].type = CompOptionTypeInt;
 	o[0].name = "root";
-	o[0].value.i = s->root;
+	o[0].value.i = s->root.id;
 
 	o[1].type = CompOptionTypeBool;
 	o[1].name = "active";
@@ -143,7 +143,7 @@ fadeDesktopPreparePaintScreen(CompScreen *s, int msSinceLastPaint)
 	if ((fs->state == FD_STATE_OUT) || (fs->state == FD_STATE_IN))
 	{
 		CompWindow *w;
-		for (w = s->windows; w; w = w->next)
+		for (w = s->root.windows; w; w = w->next)
 		{
 			FD_WINDOW(w);
 
@@ -178,7 +178,7 @@ static void fadeDesktopDonePaintScreen(CompScreen *s)
 			CompWindow *w;
 			Bool isStillSD = FALSE;
 
-			for (w = s->windows; w; w = w->next)
+			for (w = s->root.windows; w; w = w->next)
 			{
 				FD_WINDOW(w);
 				if (fw->fading)
@@ -252,7 +252,7 @@ static void fadeDesktopEnterShowDesktopMode(CompScreen *s)
 		fs->state = FD_STATE_OUT;
 		fs->fadeTime = fadedesktopGetFadetime(s) - fs->fadeTime;
 
-		for (w = s->windows; w; w = w->next)
+		for (w = s->root.windows; w; w = w->next)
 		{
 			if (isFDWin(w))
 			{
@@ -289,7 +289,7 @@ static void fadeDesktopLeaveShowDesktopMode(CompScreen *s, CompWindow *w)
 			fs->fadeTime = fadedesktopGetFadetime(s) - fs->fadeTime;
 		}
 
-		for (cw = s->windows; cw; cw = cw->next)
+		for (cw = s->root.windows; cw; cw = cw->next)
 		{
 			if (w && (w->id != cw->id))
 				continue;
diff --git a/src/firepaint/firepaint.c b/src/firepaint/firepaint.c
index 825ca69..2db549a 100644
--- a/src/firepaint/firepaint.c
+++ b/src/firepaint/firepaint.c
@@ -509,7 +509,7 @@ fireTerminate (CompDisplay     *d,
     {
 	FIRE_SCREEN (s);
 
-	if (xid && s->root != xid)
+	if (xid && s->root.id != xid)
 	    continue;
 
 	if (fs->grabIndex)
diff --git a/src/group/cairo.c b/src/group/cairo.c
index a3aef9c..9b3d2bd 100644
--- a/src/group/cairo.c
+++ b/src/group/cairo.c
@@ -689,7 +689,8 @@ groupRenderWindowTitle (GroupSelection *group)
     {
 	/* getting the pixmap failed, so create an empty one */
 	Pixmap emptyPixmap;
-	emptyPixmap = XCreatePixmap (d->display, s->root, width, height, 32);
+	emptyPixmap = XCreatePixmap (d->display, s->root.id,
+				     width, height, 32);
 
 	if (emptyPixmap)
 	{
diff --git a/src/group/group.c b/src/group/group.c
index 3a1d4e0..67eab18 100644
--- a/src/group/group.c
+++ b/src/group/group.c
@@ -276,7 +276,7 @@ groupRaiseWindows (CompWindow     *top,
     if (!stack)
 	return;
 
-    for (w = group->screen->windows; w; w = w->next)
+    for (w = group->screen->root.windows; w; w = w->next)
     {
 	GROUP_WINDOW (w);
 	if ((w->id != top->id) && (gw->group == group))
@@ -1422,7 +1422,7 @@ groupHandleEvent (CompDisplay *d,
 	    w = findWindowAtDisplay (d, event->xmap.window);
 	    if (w)
 	    {
-		for (cw = w->screen->windows; cw; cw = cw->next)
+		for (cw = w->screen->root.windows; cw; cw = cw->next)
 		{
 		    if (w->id == cw->frame)
 		    {
diff --git a/src/group/init.c b/src/group/init.c
index 920e181..336e124 100644
--- a/src/group/init.c
+++ b/src/group/init.c
@@ -75,7 +75,7 @@ groupScreenOptionChanged (CompScreen         *s,
 	    {
 		CompWindow *w;
 
-		for (w = s->windows; w; w = w->next)
+		for (w = s->root.windows; w; w = w->next)
 		{
 		    GROUP_WINDOW (w);
 
@@ -111,7 +111,7 @@ groupScreenOptionChanged (CompScreen         *s,
 		{
 		    CompWindow *w;
 
-		    for (w = s->windows; w; w = w->next)
+		    for (w = s->root.windows; w; w = w->next)
 			groupComputeGlowQuads (w, &gs->glowTexture.matrix);
 
 		    damageScreen (s);
@@ -140,7 +140,7 @@ groupApplyInitialActions (void *closure)
     /* we need to do it from top to buttom of the stack to avoid problems
        with a reload of Compiz and tabbed static groups. (topTab will always
        be above the other windows in the group) */
-    for (w = s->reverseWindows; w; w = w->prev)
+    for (w = s->root.reverseWindows; w; w = w->prev)
     {
 	Bool     tabbed;
 	long int id;
diff --git a/src/group/selection.c b/src/group/selection.c
index 4a91351..445a88f 100644
--- a/src/group/selection.c
+++ b/src/group/selection.c
@@ -99,7 +99,7 @@ groupFindWindowsInRegion (CompScreen *s,
     int        count = 0;
     CompWindow *w;
 
-    for (w = s->reverseWindows; w; w = w->prev)
+    for (w = s->root.reverseWindows; w; w = w->prev)
     {
 	if (groupIsGroupWindow (w) &&
 	    groupWindowInRegion (w, reg, precision))
diff --git a/src/group/tab.c b/src/group/tab.c
index 2e57b69..8a1b861 100644
--- a/src/group/tab.c
+++ b/src/group/tab.c
@@ -43,7 +43,7 @@ groupGetCurrentMousePosition (CompScreen *s,
     Window       child;
     Bool         result;
 
-    result = XQueryPointer (s->display->display, s->root, &root,
+    result = XQueryPointer (s->display->display, s->root.id, &root,
 			    &child, &mouseX, &mouseY, &winX, &winY, &rmask);
 
     if (result)
@@ -654,7 +654,7 @@ groupTabChangeActivateEvent (CompScreen *s,
 
     o[0].type = CompOptionTypeInt;
     o[0].name = "root";
-    o[0].value.i = s->root;
+    o[0].value.i = s->root.id;
 
     o[1].type = CompOptionTypeBool;
     o[1].name = "active";
@@ -942,7 +942,7 @@ groupUpdateTabBars (CompScreen *s,
     if (!otherScreenGrabExist (s, "group", "group-drag", 0))
     {
 	/* first check if the entered window is a frame */
-	for (w = s->windows; w; w = w->next)
+	for (w = s->root.windows; w; w = w->next)
 	{
 	    if (w->frame == enteredWin)
 		break;
@@ -1056,7 +1056,7 @@ groupGetConstrainRegion (CompScreen *s)
     r.rects    = &r.extents;
     r.numRects = r.size = 1;
 
-    for (w = s->windows; w; w = w->next)
+    for (w = s->root.windows; w; w = w->next)
     {
 	if (!w->mapNum)
 	    continue;
@@ -2756,7 +2756,7 @@ groupCreateInputPreventionWindow (GroupSelection *group)
 
 	group->inputPrevention =
 	    XCreateWindow (group->screen->display->display,
-			   group->screen->root, -100, -100, 1, 1, 0,
+			   group->screen->root.id, -100, -100, 1, 1, 0,
 			   CopyFromParent, InputOnly,
 			   CopyFromParent, CWOverrideRedirect, &attrib);
 	group->ipwMapped = FALSE;
diff --git a/src/loginout/loginout.c b/src/loginout/loginout.c
index 5e40153..b71db87 100644
--- a/src/loginout/loginout.c
+++ b/src/loginout/loginout.c
@@ -123,7 +123,7 @@ loginoutScreenOptionChanged (CompScreen          *s,
     {
     case LoginoutScreenOptionInMatch:
     case LoginoutScreenOptionOutMatch:
-	for (w = s->windows; w; w = w->next)
+	for (w = s->root.windows; w; w = w->next)
 	    loginoutUpdateWindowMatch (w);
 
 	damageScreen (s);
@@ -150,7 +150,7 @@ loginoutMatchExpHandlerChanged (CompDisplay *d)
     /* match options are up to date after the call to matchExpHandlerChanged */
     for (s = d->screens; s; s = s->next)
     {
-	for (w = s->windows; w; w = w->next)
+	for (w = s->root.windows; w; w = w->next)
 	    loginoutUpdateWindowMatch (w);
     }
 }
diff --git a/src/maximumize/maximumize.c b/src/maximumize/maximumize.c
index 8b20364..f93ee15 100644
--- a/src/maximumize/maximumize.c
+++ b/src/maximumize/maximumize.c
@@ -77,7 +77,7 @@ maximumizeEmptyRegion (CompWindow *window,
 	    window->input.bottom;
     }
 
-    for (w = s->windows; w; w = w->next)
+    for (w = s->root.windows; w; w = w->next)
     {
 	EMPTY_REGION (tmpRegion);
         if (w->id == window->id)
diff --git a/src/reflex/reflex.c b/src/reflex/reflex.c
index 87bc4bf..c7bb2d9 100644
--- a/src/reflex/reflex.c
+++ b/src/reflex/reflex.c
@@ -218,7 +218,7 @@ reflexScreenOptionChanged (CompScreen          *s,
 	break;
 
     case ReflexScreenOptionMatch:
-	for (w = s->windows; w; w = w->next)
+	for (w = s->root.windows; w; w = w->next)
 	    reflexUpdateWindowMatch (w);
 
 	damageScreen (s);
@@ -328,7 +328,7 @@ reflexMatchExpHandlerChanged (CompDisplay *d)
     /* match options are up to date after the call to matchExpHandlerChanged */
     for (s = d->screens; s; s = s->next)
     {
-	for (w = s->windows; w; w = w->next)
+	for (w = s->root.windows; w; w = w->next)
 	    reflexUpdateWindowMatch (w);
     }
 }
diff --git a/src/scalefilter/scalefilter.c b/src/scalefilter/scalefilter.c
index cc7e545..1a4bdb8 100644
--- a/src/scalefilter/scalefilter.c
+++ b/src/scalefilter/scalefilter.c
@@ -323,7 +323,7 @@ scalefilterRelayout (CompScreen *s)
 
     o[0].type    = CompOptionTypeInt;
     o[0].name    = "root";
-    o[0].value.i = s->root;
+    o[0].value.i = s->root.id;
 
     if (action->initiate)
     {
diff --git a/src/shelf/shelf.c b/src/shelf/shelf.c
index e6b636c..d522280 100644
--- a/src/shelf/shelf.c
+++ b/src/shelf/shelf.c
@@ -241,7 +241,7 @@ shelfPreparePaintScreen (CompScreen *s,
 
     /* FIXME: should only loop over all windows if at least one animation
        is running */
-    for (w = s->windows; w; w = w->next)
+    for (w = s->root.windows; w; w = w->next)
 	GET_SHELF_WINDOW (w, ss)->steps = steps;
     
     UNWRAP (ss, s, preparePaintScreen);
@@ -358,7 +358,7 @@ shelfCreateIPW (CompWindow *w)
     attrib.event_mask        = 0;
 
     ipw = XCreateWindow (w->screen->display->display,
-			 w->screen->root,
+			 w->screen->root.id,
 			 w->serverX - w->input.left,
 			 w->serverY - w->input.top,
 			 w->serverWidth + w->input.left + w->input.right,
diff --git a/src/showdesktop/showdesktop.c b/src/showdesktop/showdesktop.c
index cc5a07d..30c87dd 100644
--- a/src/showdesktop/showdesktop.c
+++ b/src/showdesktop/showdesktop.c
@@ -285,7 +285,7 @@ prepareSDWindows (CompScreen *s,
     CompWindow *w;
     int        count = 0;
 
-    for (w = s->windows; w; w = w->next)
+    for (w = s->root.windows; w; w = w->next)
     {
 	SD_WINDOW (w);
 
@@ -434,7 +434,7 @@ showdesktopPreparePaintScreen (CompScreen *s,
 	{
 	    ss->moreAdjust = 0;
 
-	    for (w = s->windows; w; w = w->next)
+	    for (w = s->root.windows; w; w = w->next)
 	    {
 		SD_WINDOW (w);
 
@@ -504,7 +504,7 @@ showdesktopDonePaintScreen (CompScreen *s)
     	    {
 		Bool inSDMode = FALSE;
 
-		for (w = s->windows; w; w = w->next)
+		for (w = s->root.windows; w; w = w->next)
 		{
 		    if (w->inShowDesktopMode)
 			inSDMode = TRUE;
@@ -663,7 +663,7 @@ showdesktopEnterShowDesktopMode (CompScreen *s)
 	count = prepareSDWindows (s, ss->state);
 	if (count > 0)
 	{
-	    XSetInputFocus (s->display->display, s->root,
+	    XSetInputFocus (s->display->display, s->root.id,
 			    RevertToPointerRoot, CurrentTime);
 	    ss->state = SD_STATE_ACTIVATING;
 	    damageScreen (s);
@@ -685,7 +685,7 @@ showdesktopLeaveShowDesktopMode (CompScreen *s,
     {
 	CompWindow *cw;
 
-	for (cw = s->windows; cw; cw = cw->next)
+	for (cw = s->root.windows; cw; cw = cw->next)
 	{
 	    SD_WINDOW (cw);
 
diff --git a/src/splash/splash.c b/src/splash/splash.c
index c1c0f51..f2a3a64 100644
--- a/src/splash/splash.c
+++ b/src/splash/splash.c
@@ -237,7 +237,7 @@ splashGetCurrentOutputRect (CompScreen *s,
 	output = 0;
     else
     {
-	XQueryPointer (s->display->display, s->root, &ignore_w, &ignore_w,
+	XQueryPointer (s->display->display, s->root.id, &ignore_w, &ignore_w,
 		       &root_x, &root_y, &ignore_i, &ignore_i, &ignore_ui);
 	output = outputDeviceForPoint (s, root_x, root_y);
     }
@@ -512,7 +512,7 @@ splashInitScreen (CompPlugin *p,
 	unsigned long n, left;
 	unsigned char *propData;
 
-	result = XGetWindowProperty (s->display->display, s->root,
+	result = XGetWindowProperty (s->display->display, s->root.id,
 				     sd->splashAtom, 0L, 8192L, FALSE,
 				     XA_INTEGER, &actual, &format,
 				     &n, &left, &propData);
@@ -524,7 +524,7 @@ splashInitScreen (CompPlugin *p,
 	else
 	{
 	    int value = 1;
-	    XChangeProperty (s->display->display, s->root, sd->splashAtom,
+	    XChangeProperty (s->display->display, s->root.id, sd->splashAtom,
 			     XA_INTEGER, 32, PropModeReplace,
 			     (unsigned char *) &value, 1);
 	    ss->initiate = TRUE;
diff --git a/src/trailfocus/trailfocus.c b/src/trailfocus/trailfocus.c
index e89d48f..9918f45 100644
--- a/src/trailfocus/trailfocus.c
+++ b/src/trailfocus/trailfocus.c
@@ -127,7 +127,7 @@ setWindows (CompScreen *s)
 
     winMax = trailfocusGetWindowsCount (s);
 
-    for (w = s->windows; w; w = w->next)
+    for (w = s->root.windows; w; w = w->next)
     {
 	TRAILFOCUS_WINDOW (w);
 
@@ -306,7 +306,7 @@ cleanList (CompScreen *s)
 
     if (i < winMax)
     {
-	w = s->windows;
+	w = s->root.windows;
 	if (w)
 	    w = w->next;
 
diff --git a/src/wallpaper/wallpaper.c b/src/wallpaper/wallpaper.c
index 3adc78b..7919e66 100644
--- a/src/wallpaper/wallpaper.c
+++ b/src/wallpaper/wallpaper.c
@@ -368,9 +368,10 @@ createFakeDesktopWindow (CompScreen *s)
 
     attr.background_pixel = 0;
     attr.border_pixel     = 0;
-    attr.colormap	  = XCreateColormap (dpy, s->root, visual, AllocNone);
+    attr.colormap	  = XCreateColormap (dpy, s->root.id, visual,
+					     AllocNone);
 
-    ws->fakeDesktop = XCreateWindow (dpy, s->root, -1, -1, 1, 1, 0, 32,
+    ws->fakeDesktop = XCreateWindow (dpy, s->root.id, -1, -1, 1, 1, 0, 32,
 				     InputOutput, visual,
 				     CWBackPixel | CWBorderPixel | CWColormap,
 				     &attr);
@@ -418,7 +419,7 @@ updateProperty(CompScreen *s)
 
 	if (ws->propSet)
 	    XDeleteProperty (s->display->display,
-			     s->root, wd->compizWallpaperAtom);
+			     s->root.id, wd->compizWallpaperAtom);
 	ws->propSet = FALSE;
     }
     else if (!ws->propSet)
@@ -426,7 +427,7 @@ updateProperty(CompScreen *s)
 	WALLPAPER_DISPLAY (s->display);
 	unsigned char sd = 1;
 
-	XChangeProperty (s->display->display, s->root,
+	XChangeProperty (s->display->display, s->root.id,
 			 wd->compizWallpaperAtom, XA_CARDINAL,
 			 8, PropModeReplace, &sd, 1);
 	ws->propSet = TRUE;
@@ -565,12 +566,12 @@ getBackgroundForViewport (CompScreen *s)
     if (!ws->nBackgrounds)
 	return NULL;
 
-    x = s->x - (s->windowOffsetX / s->width);
+    x = s->x - (s->root.viewportOffsetX / s->width);
     x %= s->hsize;
     if (x < 0)
 	x += s->hsize;
 
-    y = s->y - (s->windowOffsetY / s->height);
+    y = s->y - (s->root.viewportOffsetY / s->height);
     y %= s->vsize;
     if (y < 0)
 	y += s->vsize;
@@ -593,11 +594,11 @@ wallpaperHandleEvent (CompDisplay *d,
     {
 	WALLPAPER_SCREEN (s);
 
-	if (!s->desktopWindowCount && ws->fakeDesktop == None
+	if (!s->root.desktopWindowCount && ws->fakeDesktop == None
 	    && ws->nBackgrounds)
 	    createFakeDesktopWindow (s);
 
-	if ((s->desktopWindowCount > 1 || !ws->nBackgrounds)
+	if ((s->root.desktopWindowCount > 1 || !ws->nBackgrounds)
 	    && ws->fakeDesktop != None)
 	    destroyFakeDesktopWindow (s);
     }
@@ -893,7 +894,7 @@ static Bool wallpaperInitScreen (CompPlugin *p,
     updateProperty (s);
     damageScreen (s);
 
-    if (!s->desktopWindowCount && ws->nBackgrounds)
+    if (!s->root.desktopWindowCount && ws->nBackgrounds)
 	createFakeDesktopWindow (s);
 
     WRAP (ws, s, paintOutput, wallpaperPaintOutput);
@@ -911,7 +912,8 @@ static void wallpaperFiniScreen (CompPlugin *p,
     WALLPAPER_DISPLAY (s->display);
 
     if (ws->propSet)
-	XDeleteProperty (s->display->display, s->root, wd->compizWallpaperAtom);
+	XDeleteProperty (s->display->display, s->root.id,
+			 wd->compizWallpaperAtom);
 
     if (ws->fakeDesktop != None)
 	destroyFakeDesktopWindow (s);
diff --git a/src/widget/widget.c b/src/widget/widget.c
index ba6b27b..6ac7d68 100644
--- a/src/widget/widget.c
+++ b/src/widget/widget.c
@@ -119,14 +119,14 @@ widgetUpdateTreeStatus (CompWindow *w)
     WIDGET_SCREEN (w->screen);
 
     /* first clear out every reference to our window */
-    for (p = w->screen->windows; p; p = p->next)
+    for (p = w->screen->root.windows; p; p = p->next)
     {
 	pww = GET_WIDGET_WINDOW (p, ws);
 	if (pww->parentWidget == w)
 	    pww->parentWidget = NULL;
     }
 
-    for (p = w->screen->windows; p; p = p->next)
+    for (p = w->screen->root.windows; p; p = p->next)
     {
 	Window clientLeader;
 
@@ -249,7 +249,7 @@ widgetSetWidgetLayerMapState (CompScreen *s,
 
     WIDGET_DISPLAY (s->display);
 
-    for (w = s->windows; w; w = w->next)
+    for (w = s->root.windows; w; w = w->next)
     {
 	WIDGET_WINDOW (w);
 
@@ -339,7 +339,7 @@ widgetMatchExpHandlerChanged (CompDisplay *d)
     /* match options are up to date after the call to matchExpHandlerChanged */
     for (s = d->screens; s; s = s->next)
     {
-	for (w = s->windows; w; w = w->next)
+	for (w = s->root.windows; w; w = w->next)
 	    if (widgetUpdateWidgetStatus (w))
 	    {
 		Bool map;
@@ -474,7 +474,7 @@ widgetHandleEvent (CompDisplay *d,
 
 			    o.type    = CompOptionTypeInt;
 			    o.name    = "root";
-			    o.value.i = s->root;
+			    o.value.i = s->root.id;
 
 			    widgetToggle (d, NULL, 0, &o, 1);
 			}
@@ -691,7 +691,7 @@ widgetScreenOptionChanged (CompScreen           *s,
     case WidgetScreenOptionMatch:
 	{
 	    CompWindow *w;
-	    for (w = s->windows; w; w = w->next)
+	    for (w = s->root.windows; w; w = w->next)
 		if (widgetUpdateWidgetStatus (w))
 		{
 		    Bool map;
openSUSE Build Service is sponsored by