Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
openSUSE:Evergreen:11.1:kernel-2.6.32
compiz-fusion-plugins-main
plugins-main-NOMAD.diff
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File plugins-main-NOMAD.diff of Package compiz-fusion-plugins-main
diff --git a/src/animation/animation.c b/src/animation/animation.c index c2bde8b..232f8b9 100644 --- a/src/animation/animation.c +++ b/src/animation/animation.c @@ -325,11 +325,27 @@ animRemoveExtension (CompScreen *s, // Stop all ongoing animations CompWindow *w; - for (w = s->windows; w; w = w->next) + + w = s->root.windows; + for (;;) { ANIM_WINDOW (w); if (aw->com.curAnimEffect != AnimEffectNone) postAnimationCleanup (w); + + if (w->windows) + { + w = w->windows; + continue; + } + + while (!w->next && (w != &s->root)) + w = w->parent; + + if (w == &s->root) + break; + + w = w->next; } int p; @@ -998,6 +1014,8 @@ compTransformUpdateBB (CompOutput *output, static void damageBoundingBox (CompWindow * w) { + CompWindow *p; + ANIM_WINDOW(w); if (aw->BB.x1 == MAXSHORT) // unintialized BB @@ -1023,6 +1041,9 @@ damageBoundingBox (CompWindow * w) rect.height = lastBB->y2 - lastBB->y1 + 2; XUnionRectWithRegion (&rect, regionToDamage, regionToDamage); + for (p = w->parent; p != &w->screen->root; p = p->parent) + XOffsetRegion (regionToDamage, p->attrib.x, p->attrib.y); + damageScreenRegion (w->screen, regionToDamage); } @@ -1033,7 +1054,7 @@ Bool getMousePointerXY(CompScreen * s, short *x, short *y) unsigned int m; if (XQueryPointer - (s->display->display, s->root, &w1, &w2, &xj, &yj, &xp, &yp, &m)) + (s->display->display, s->root.id, &w1, &w2, &xj, &yj, &xp, &yp, &m)) { *x = xp; *y = yp; @@ -1543,7 +1564,7 @@ static void postAnimationCleanupCustom (CompWindow * w, if (aw->com.curAnimEffect == AnimEffectFocusFade) { CompWindow *w2; - for (w2 = w->screen->windows; w2; w2 = w2->next) + for (w2 = w->parent->windows; w2; w2 = w2->next) { AnimWindow *aw2; @@ -1715,7 +1736,7 @@ animActivateEvent (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"; @@ -2081,7 +2102,8 @@ restackInfoStillGood(CompScreen *s, RestackInfo *restackInfo) Bool wRestackedGood = FALSE; CompWindow *w; - for (w = s->windows; w; w = w->next) + w = s->root.windows; + for (;;) { if (restackInfo->wStart == w && isWinVisible(w)) wStartGood = TRUE; @@ -2091,7 +2113,22 @@ restackInfoStillGood(CompScreen *s, RestackInfo *restackInfo) wRestackedGood = TRUE; if (restackInfo->wOldAbove == w && isWinVisible(w)) wOldAboveGood = TRUE; + + if (w->windows) + { + w = w->windows; + continue; + } + + while (!w->next && (w != &s->root)) + w = w->parent; + + if (w == &s->root) + break; + + w = w->next; } + return (wStartGood && wEndGood && wOldAboveGood && wRestackedGood); } @@ -2100,7 +2137,8 @@ static void resetStackingInfo (CompScreen *s) { CompWindow *w; - for (w = s->windows; w; w = w->next) + w = s->root.windows; + for (;;) { ANIM_WINDOW (w); @@ -2110,6 +2148,20 @@ resetStackingInfo (CompScreen *s) free (aw->restackInfo); aw->restackInfo = NULL; } + + if (w->windows) + { + w = w->windows; + continue; + } + + while (!w->next && (w != &s->root)) + w = w->parent; + + if (w == &s->root) + break; + + w = w->next; } } @@ -2173,7 +2225,9 @@ static void animPreparePaintScreen(CompScreen * s, int msSinceLastPaint) now: C0001B 36000A5 3205B63 1E0000C 1E00050 1E0005B 600003 */ CompWindow *wOldAbove = NULL; - for (w = s->windows; w; w = w->next) + + w = s->root.windows; + for (;;) { ANIM_WINDOW(w); if (aw->restackInfo) @@ -2198,10 +2252,26 @@ static void animPreparePaintScreen(CompScreen * s, int msSinceLastPaint) aw->restackInfo->wOldAbove = wOldAbove; } } + + if (w->windows) + { + w = w->windows; + continue; + } + + while (!w->next && (w != &s->root)) + w = w->parent; + + if (w == &s->root) + break; + + w = w->next; } + // do in reverse order so that focus-fading chains are handled // properly - for (w = s->reverseWindows; w; w = w->prev) + w = s->root.reverseWindows; + for (;;) { ANIM_WINDOW(w); if (aw->restackInfo) @@ -2259,27 +2329,56 @@ static void animPreparePaintScreen(CompScreen * s, int msSinceLastPaint) } initiateFocusAnimation(w); } + + if (w->reverseWindows) + { + w = w->reverseWindows; + continue; + } + + while (!w->prev && (w != &s->root)) + w = w->parent; + + if (w == &s->root) + break; + + w = w->prev; } - for (w = s->reverseWindows; w; w = w->prev) + w = s->root.reverseWindows; + for (;;) { ANIM_WINDOW(w); + if (aw->isDodgeSubject) + { + Bool dodgersAreOnlySubjects = TRUE; + CompWindow *dw; + AnimWindow *adw; + for (dw = aw->dodgeChainStart; dw; dw = adw->dodgeChainNext) + { + adw = GET_ANIM_WINDOW(dw, as); + if (!adw) + break; + if (!adw->isDodgeSubject) + dodgersAreOnlySubjects = FALSE; + } + if (dodgersAreOnlySubjects) + aw->skipPostPrepareScreen = TRUE; + } - if (!aw->isDodgeSubject) - continue; - Bool dodgersAreOnlySubjects = TRUE; - CompWindow *dw; - AnimWindow *adw; - for (dw = aw->dodgeChainStart; dw; dw = adw->dodgeChainNext) + if (w->reverseWindows) { - adw = GET_ANIM_WINDOW(dw, as); - if (!adw) - break; - if (!adw->isDodgeSubject) - dodgersAreOnlySubjects = FALSE; + w = w->reverseWindows; + continue; } - if (dodgersAreOnlySubjects) - aw->skipPostPrepareScreen = TRUE; + + while (!w->prev && (w != &s->root)) + w = w->parent; + + if (w == &s->root) + break; + + w = w->prev; } } @@ -2288,7 +2387,8 @@ static void animPreparePaintScreen(CompScreen * s, int msSinceLastPaint) AnimWindow *aw; Bool animStillInProgress = FALSE; - for (w = s->windows; w; w = w->next) + w = s->root.windows; + for (;;) { aw = GET_ANIM_WINDOW(w, as); @@ -2374,9 +2474,24 @@ static void animPreparePaintScreen(CompScreen * s, int msSinceLastPaint) aw->com.curWindowEvent = WindowEventNone; aw->com.curAnimEffect = AnimEffectNone; } + + if (w->windows) + { + w = w->windows; + continue; + } + + while (!w->next && (w != &s->root)) + w = w->parent; + + if (w == &s->root) + break; + + w = w->next; } - for (w = s->windows; w; w = w->next) + w = s->root.windows; + for (;;) { aw = GET_ANIM_WINDOW(w, as); if (aw && aw->com.curAnimEffect->properties. @@ -2384,6 +2499,20 @@ static void animPreparePaintScreen(CompScreen * s, int msSinceLastPaint) { aw->com.curAnimEffect->properties.postPrepPaintScreenFunc (w); } + + if (w->windows) + { + w = w->windows; + continue; + } + + while (!w->next && (w != &s->root)) + w = w->parent; + + if (w == &s->root) + break; + + w = w->next; } if (!animStillInProgress) @@ -3118,10 +3247,10 @@ getBottommostInFocusChain (CompWindow *w) } static void -resetWalkerMarks (CompScreen *s) +resetWalkerMarks (CompWindow *parent) { CompWindow *w; - for (w = s->windows; w; w = w->next) + for (w = parent->windows; w; w = w->next) { ANIM_WINDOW(w); aw->walkerOverNewCopy = FALSE; @@ -3130,13 +3259,13 @@ resetWalkerMarks (CompScreen *s) } static CompWindow* -animWalkFirst (CompScreen *s) +animWalkFirst (CompWindow *parent) { - ANIM_SCREEN (s); + ANIM_SCREEN (parent->screen); - resetWalkerMarks (s); + resetWalkerMarks (parent); - CompWindow *w = getBottommostInFocusChain(s->windows); + CompWindow *w = getBottommostInFocusChain(parent->windows); if (w) { AnimWindow *aw = GET_ANIM_WINDOW (w, as); @@ -3146,13 +3275,13 @@ animWalkFirst (CompScreen *s) } static CompWindow* -animWalkLast (CompScreen *s) +animWalkLast (CompWindow *parent) { - ANIM_SCREEN (s); + ANIM_SCREEN (parent->screen); - resetWalkerMarks (s); + resetWalkerMarks (parent); - CompWindow *w = s->reverseWindows; + CompWindow *w = parent->reverseWindows; if (w) { AnimWindow *aw = GET_ANIM_WINDOW (w, as); @@ -3259,12 +3388,13 @@ animWalkPrev (CompWindow *w) static void animInitWindowWalker (CompScreen *s, + CompWindow *w, CompWalker *walker) { ANIM_SCREEN (s); UNWRAP (as, s, initWindowWalker); - (*s->initWindowWalker) (s, walker); + (*s->initWindowWalker) (s, w, walker); WRAP (as, s, initWindowWalker, animInitWindowWalker); if (as->walkerAnimCount > 0) // only walk if necessary @@ -3717,7 +3847,7 @@ static void animHandleEvent(CompDisplay * d, XEvent * event) { XConfigureEvent *ce = &event->xconfigure; w = findWindowAtDisplay (d, ce->window); - if (!w) + if (!w || !w->parent) break; if (w->prev) { @@ -3823,7 +3953,7 @@ static void animHandleEvent(CompDisplay * d, XEvent * event) onlyTwo = TRUE; } // Clear all configureNotified's - for (w2 = s->windows; w2; w2 = w2->next) + for (w2 = w->parent->windows; w2; w2 = w2->next) { AnimWindow *aw2 = GET_ANIM_WINDOW(w2, as); aw2->configureNotified = FALSE; @@ -4254,7 +4384,9 @@ animWindowMoveNotify(CompWindow * w, int dx, int dy, Bool immediate) if (as->animInProgress) { Bool animStillInProgress = FALSE; - for (w2 = w->screen->windows; w2; w2 = w2->next) + + w2 = w->screen->root.windows; + for (;;) { AnimWindow *aw2; @@ -4264,6 +4396,20 @@ animWindowMoveNotify(CompWindow * w, int dx, int dy, Bool immediate) animStillInProgress = TRUE; break; } + + if (w2->windows) + { + w2 = w2->windows; + continue; + } + + while (!w2->next && (w2 != &w->screen->root)) + w2 = w2->parent; + + if (w2 == &w->screen->root) + break; + + w2 = w2->next; } if (!animStillInProgress) @@ -4353,10 +4499,25 @@ animPaintOutput(CompScreen * s, if (as->markAllWinCreatedCountdown == 1) { // Mark all windows as "created" - for (w = s->windows; w; w = w->next) + w = s->root.windows; + for (;;) { ANIM_WINDOW(w); aw->created = TRUE; + + if (w->windows) + { + w = w->windows; + continue; + } + + while (!w->next && (w != &s->root)) + w = w->parent; + + if (w == &s->root) + break; + + w = w->next; } } as->markAllWinCreatedCountdown--; diff --git a/src/colorfilter/colorfilter.c b/src/colorfilter/colorfilter.c index f7674d1..4a94e45 100644 --- a/src/colorfilter/colorfilter.c +++ b/src/colorfilter/colorfilter.c @@ -135,6 +135,10 @@ colorFilterToggleWindow (CompWindow * w) /* Ensure window is going to be repainted */ addWindowDamage (w); + + /* toggle child windows */ + for (w = w->windows; w; w = w->next) + colorFilterToggleWindow (w); } /* @@ -151,7 +155,7 @@ colorFilterToggleScreen (CompScreen * s) cfs->isFiltered = !cfs->isFiltered; /* Toggle filtering for every window */ - for (w = s->windows; w; w = w->next) + for (w = s->root.windows; w; w = w->next) if (w) colorFilterToggleWindow (w); } @@ -190,7 +194,7 @@ colorFilterSwitchFilter (CompScreen * s) } /* Damage currently filtered windows */ - for (w = s->windows; w; w = w->next) + for (w = s->root.windows; w; w = w->next) { FILTER_WINDOW (w); if (cfw->isFiltered) @@ -348,7 +352,7 @@ loadFilters (CompScreen *s, CompTexture *texture) cfs->filtersCount = 0; /* Damage currently filtered windows */ - for (w = s->windows; w; w = w->next) + for (w = s->root.windows; w; w = w->next) { FILTER_WINDOW (w); if (cfw->isFiltered) @@ -422,14 +426,24 @@ colorFilterDrawWindowTexture (CompWindow *w, CompTexture *texture, * Filter windows when they are open if they match the filtering rules */ static void -colorFilterWindowAdd (CompScreen *s, +colorFilterWindowAdd (CompObject *parent, CompWindow *w) { - FILTER_SCREEN (s); + Bool isFiltered = FALSE; + + FILTER_SCREEN (w->screen); /* cfw->isFiltered is initialized to FALSE in InitWindow, so we only have to toggle it to TRUE if necessary */ - if (cfs->isFiltered && matchEval (colorfilterGetFilterMatch (s), w)) + if (w->parent) + { + if (w->parent == &w->screen->root) + isFiltered = cfs->isFiltered; + else + isFiltered = GET_FILTER_WINDOW (w->parent, cfs)->isFiltered; + } + + if (isFiltered && matchEval (colorfilterGetFilterMatch (w->screen), w)) colorFilterToggleWindow (w); } @@ -447,7 +461,7 @@ colorFilterMatchsChanged (CompScreen *s, CompOption *opt, FILTER_SCREEN (s); /* Re-check every window against new match settings */ - for (w = s->windows; w; w = w->next) + for (w = s->root.windows; w; w = w->next) { FILTER_WINDOW (w); if (matchEval (colorfilterGetFilterMatch (s), w) && @@ -470,7 +484,7 @@ colorFilterExcludeMatchsChanged (CompScreen *s, CompOption *opt, FILTER_SCREEN (s); /* Re-check every window against new match settings */ - for (w = s->windows; w; w = w->next) + for (w = s->root.windows; w; w = w->next) { Bool isExcluded; diff --git a/src/expo/expo.c b/src/expo/expo.c index 46fa27b..7357755 100644 --- a/src/expo/expo.c +++ b/src/expo/expo.c @@ -272,7 +272,7 @@ expoDnDFini (CompDisplay *d, { EXPO_SCREEN (s); - if (xid && (s->root != xid)) + if (xid && (s->root.id != xid)) continue; if (es->dndState == DnDDuring || es->dndState == DnDStart) @@ -641,7 +641,8 @@ invertTransformedVertex (CompScreen *s, alpha = -p1[2] / v[2]; - if (expoGetDeform (s->display) == DeformCurve && s->desktopWindowCount) + if (expoGetDeform (s->display) == DeformCurve && + s->root.desktopWindowCount) { const float sws = s->width * s->width; const float rs = (es->curveDistance * es->curveDistance) + 0.25; @@ -1259,7 +1260,7 @@ expoAddWindowGeometry (CompWindow *w, EXPO_SCREEN (s); if (es->expoCam > 0.0 && expoGetDeform (s->display) == DeformCurve && - s->desktopWindowCount) + s->root.desktopWindowCount) { int x1, x2, i, oldVCount = w->vCount; REGION reg; @@ -1318,10 +1319,12 @@ expoAddWindowGeometry (CompWindow *w, v = w->vertices + (w->vertexStride - 3); v += w->vertexStride * oldVCount; - if (!windowOnAllViewports (w)) + if (!windowOnAllViewports (w) && w->parent) { - getWindowMovementForOffset (w, s->windowOffsetX, - s->windowOffsetY, &offX, &offY); + getWindowMovementForOffset (w, + w->parent->viewportOffsetX, + w->parent->viewportOffsetY, + &offX, &offY); } lastX = -1000000000.0; @@ -1369,7 +1372,7 @@ expoDrawWindowTexture (CompWindow *w, EXPO_SCREEN (s); if (es->expoCam > 0.0 && expoGetDeform (s->display) == DeformCurve && - s->desktopWindowCount && s->lighting) + s->root.desktopWindowCount && s->lighting) { int i, idx; int offX = 0, offY = 0; @@ -1388,10 +1391,12 @@ expoDrawWindowTexture (CompWindow *w, es->winNormSize = w->vCount * 3; } - if (!windowOnAllViewports (w)) + if (!windowOnAllViewports (w) && w->parent) { - getWindowMovementForOffset (w, s->windowOffsetX, - s->windowOffsetY, &offX, &offY); + getWindowMovementForOffset (w, + w->parent->viewportOffsetX, + w->parent->viewportOffsetY, + &offX, &offY); } v = w->vertices + (w->vertexStride - 3); @@ -1556,7 +1561,7 @@ expoDonePaintScreen (CompScreen * s) { CompWindow *w; - for (w = s->reverseWindows; w; w = w->prev) + for (w = s->root.reverseWindows; w; w = w->prev) { Bool inWindow; int xOffset, yOffset; diff --git a/src/ezoom/ezoom.c b/src/ezoom/ezoom.c index 90bf4ca..91cea99 100644 --- a/src/ezoom/ezoom.c +++ b/src/ezoom/ezoom.c @@ -1406,7 +1406,7 @@ cursorZoomInactive (CompScreen *s) if (zs->cursorInfoSelected) { zs->cursorInfoSelected = FALSE; - XFixesSelectCursorInput (s->display->display, s->root, 0); + XFixesSelectCursorInput (s->display->display, s->root.id, 0); } if (zs->cursor.isSet) @@ -1417,7 +1417,7 @@ cursorZoomInactive (CompScreen *s) if (zs->cursorHidden) { zs->cursorHidden = FALSE; - XFixesShowCursor (s->display->display, s->root); + XFixesShowCursor (s->display->display, s->root.id); } } @@ -1440,7 +1440,7 @@ cursorZoomActive (CompScreen *s) if (!zs->cursorInfoSelected) { zs->cursorInfoSelected = TRUE; - XFixesSelectCursorInput (s->display->display, s->root, + XFixesSelectCursorInput (s->display->display, s->root.id, XFixesDisplayCursorNotifyMask); zoomUpdateCursor (s, &zs->cursor); } @@ -1448,7 +1448,7 @@ cursorZoomActive (CompScreen *s) zs->opt[SOPT_HIDE_ORIGINAL_MOUSE].value.b) { zs->cursorHidden = TRUE; - XFixesHideCursor (s->display->display, s->root); + XFixesHideCursor (s->display->display, s->root.id); } } @@ -1735,7 +1735,7 @@ zoomSpecific (CompDisplay *d, w = findWindowAtDisplay(d, d->activeWindow); if (zd->opt[DOPT_SPECIFIC_TARGET_FOCUS].value.b - && w && w->screen->root == s->root) + && w && w->screen->root.id == s->root.id) { zoomAreaToWindow (w); } @@ -1812,7 +1812,7 @@ zoomToWindow (CompDisplay *d, xid = getIntOptionNamed (option, nOption, "window", 0); w = findWindowAtDisplay (d, xid); - if (!w || w->screen->root != s->root) + if (!w || w->screen->root.id != s->root.id) return TRUE; width = w->width + w->input.left + w->input.right; height = w->height + w->input.top + w->input.bottom; @@ -2044,7 +2044,7 @@ zoomTerminate (CompDisplay *d, int out; ZOOM_SCREEN (s); - if (xid && s->root != xid) + if (xid && s->root.id != xid) continue; out = outputDeviceForPoint (s, pointerX, pointerY); diff --git a/src/mousepoll/mousepoll.c b/src/mousepoll/mousepoll.c index d64d641..d552ea6 100644 --- a/src/mousepoll/mousepoll.c +++ b/src/mousepoll/mousepoll.c @@ -90,12 +90,12 @@ getMousePosition (CompScreen *s) MOUSEPOLL_SCREEN (s); - status = XQueryPointer (s->display->display, s->root, + status = XQueryPointer (s->display->display, s->root.id, &root_return, &child_return, &rootX, &rootY, &winX, &winY, &maskReturn); if (!status || rootX > s->width || rootY > s->height || - s->root != root_return) + s->root.id != root_return) return FALSE; if ((rootX != ms->posX || rootY != ms->posY)) diff --git a/src/neg/neg.c b/src/neg/neg.c index 4535f55..9d4a6d3 100644 --- a/src/neg/neg.c +++ b/src/neg/neg.c @@ -91,6 +91,10 @@ NEGToggle (CompWindow *w) /* cause repainting */ addWindowDamage (w); + + /* toggle child windows */ + for (w = w->windows; w; w = w->next) + NEGToggle (w); } static void @@ -104,7 +108,7 @@ NEGToggleScreen (CompScreen *s) ns->isNeg = !ns->isNeg; /* toggle every window */ - for (w = s->windows; w; w = w->next) + for (w = s->root.windows; w; w = w->next) if (w) NEGToggle (w); } @@ -546,14 +550,24 @@ NEGDrawWindowTexture (CompWindow *w, } static void -NEGWindowAdd (CompScreen *s, +NEGWindowAdd (CompObject *parent, CompWindow *w) { - NEG_SCREEN (s); + Bool isNeg = FALSE; + + NEG_SCREEN (w->screen); /* nw->isNeg is initialized to FALSE in InitWindow, so we only have to toggle it to TRUE if necessary */ - if (ns->isNeg && matchEval (negGetNegMatch (s), w)) + if (w->parent) + { + if (w->parent == &w->screen->root) + isNeg = ns->isNeg; + else + isNeg = GET_NEG_WINDOW (w->parent, ns)->isNeg; + } + + if (isNeg && matchEval (negGetNegMatch (w->screen), w)) NEGToggle (w); } @@ -570,7 +584,7 @@ NEGScreenOptionChanged (CompScreen *s, CompWindow *w; NEG_SCREEN (s); - for (w = s->windows; w; w = w->next) + for (w = s->root.windows; w; w = w->next) { Bool isNeg; NEG_WINDOW (w); diff --git a/src/opacify/opacify.c b/src/opacify/opacify.c index 67d2261..7b90ae1 100644 --- a/src/opacify/opacify.c +++ b/src/opacify/opacify.c @@ -169,7 +169,7 @@ passiveWindows (CompScreen *s, OPACIFY_SCREEN (s); - for (w = s->windows; w; w = w->next) + for (w = s->root.windows; w; w = w->next) { if (w->id == os->active) { @@ -314,7 +314,7 @@ checkDelay (CompScreen *s) return TRUE; if (!opacifyGetTimeout (d)) return TRUE; - if (!os->newActive || (os->newActive->id == s->root)) + if (!os->newActive || (os->newActive->id == s->root.id)) return FALSE; if (os->newActive->type & (CompWindowTypeDesktopMask | CompWindowTypeDockMask)) @@ -558,7 +558,7 @@ opacifyInitDisplay (CompPlugin *p, } d->base.privates[displayPrivateIndex].ptr = od; od->timeoutHandle = 0; - od->activeScreen = d->screens->screenNum; + od->activeScreen = 0; od->toggle = TRUE; opacifySetToggleKeyInitiate (d, opacifyToggle); diff --git a/src/put/put.c b/src/put/put.c index 116b9e2..a36f923 100644 --- a/src/put/put.c +++ b/src/put/put.c @@ -178,7 +178,7 @@ putPreparePaintScreen (CompScreen *s, Window endAnimationWindow = None; ps->moreAdjust = 0; - for (w = s->windows; w; w = w->next) + for (w = s->root.windows; w; w = w->next) { PUT_WINDOW (w); diff --git a/src/resizeinfo/resizeinfo.c b/src/resizeinfo/resizeinfo.c index bfde570..d1b69c9 100644 --- a/src/resizeinfo/resizeinfo.c +++ b/src/resizeinfo/resizeinfo.c @@ -130,7 +130,7 @@ setupCairoLayer (CompScreen *s, format = XRenderFindStandardFormat (s->display->display, PictStandardARGB32); - il->pixmap = XCreatePixmap (s->display->display, s->root, w, h, 32); + il->pixmap = XCreatePixmap (s->display->display, s->root.id, w, h, 32); if (!bindPixmapToTexture (s, &il->texture, il->pixmap, w, h, 32)) { compLogMessage ("resizeinfo", CompLogLevelWarn, diff --git a/src/ring/ring.c b/src/ring/ring.c index 44f0a80..28c5e42 100644 --- a/src/ring/ring.c +++ b/src/ring/ring.c @@ -388,20 +388,29 @@ ringPaintWindow (CompWindow *w, RING_WINDOW (w); - if (w->mapNum) - { - if (!w->texture->pixmap && !w->bindFailed) - bindWindow (w); - } - if (rw->adjust || rw->slot) { - scaled = rw->adjust || (rw->slot && rs->paintingSwitcher); + if (mask & PAINT_WINDOW_OCCLUSION_DETECTION_MASK) + return FALSE; + + if (rw->adjust || (rw->slot && rs->paintingSwitcher)) + { + if (rw->slot) + sAttrib.brightness = (float) sAttrib.brightness * + rw->slot->depthBrightness; + + if (w->id != rs->selectedWindow) + sAttrib.opacity = (float) sAttrib.opacity * + ringGetInactiveOpacity (s) / 100; + + scaled = TRUE; + } + mask |= PAINT_WINDOW_NO_CORE_INSTANCE_MASK; } else if (rs->state != RingStateIn) { - if (ringGetDarkenBack (s)) + if (w->parent == &w->screen->root && ringGetDarkenBack (s)) { /* modify brightness of the other windows */ sAttrib.brightness = sAttrib.brightness / 2; @@ -412,28 +421,21 @@ ringPaintWindow (CompWindow *w, status = (*s->paintWindow) (w, &sAttrib, transform, region, mask); WRAP (rs, s, paintWindow, ringPaintWindow); - if (scaled && w->texture->pixmap) - { - FragmentAttrib fragment; - CompTransform wTransform = *transform; - - if (mask & PAINT_WINDOW_OCCLUSION_DETECTION_MASK) - return FALSE; + if (w->attrib.map_state != IsViewable) + return status; - initFragmentAttrib (&fragment, &w->lastPaint); + if (!w->damaged) + return status; - if (rw->slot) - { - fragment.brightness = (float) fragment.brightness * - rw->slot->depthBrightness; - - if (w->id != rs->selectedWindow) - fragment.opacity = (float)fragment.opacity * - ringGetInactiveOpacity (s) / 100; - } + if (w->mapNum) + { + if (!w->texture->pixmap && !w->bindFailed) + bindWindow (w); + } - if (w->alpha || fragment.opacity != OPAQUE) - mask |= PAINT_WINDOW_TRANSLUCENT_MASK; + if (scaled && w->texture->pixmap) + { + CompTransform wTransform = *transform; matrixTranslate (&wTransform, w->attrib.x, w->attrib.y, 0.0f); matrixScale (&wTransform, rw->scale, rw->scale, 1.0f); @@ -442,13 +444,7 @@ ringPaintWindow (CompWindow *w, rw->ty / rw->scale - w->attrib.y, 0.0f); - glPushMatrix (); - glLoadMatrixf (wTransform.m); - - (*s->drawWindow) (w, &wTransform, &fragment, region, - mask | PAINT_WINDOW_TRANSFORMED_MASK); - - glPopMatrix (); + drawTransformedWindowWithChildren (w, &sAttrib, &wTransform); } if (scaled && (rs->state != RingStateIn) && @@ -764,7 +760,7 @@ ringCreateWindowList (CompScreen *s) rs->nWindows = 0; - for (w = s->windows; w; w = w->next) + for (w = s->root.windows; w; w = w->next) { if (isRingWin (w)) { @@ -830,7 +826,7 @@ ringCountWindows (CompScreen *s) CompWindow *w; int count = 0; - for (w = s->windows; w; w = w->next) + for (w = s->root.windows; w; w = w->next) { if (isRingWin (w)) count++; @@ -1028,7 +1024,7 @@ ringPreparePaintScreen (CompScreen *s, rs->rotateAdjust = adjustRingRotation (s, chunk); rs->moreAdjust = FALSE; - for (w = s->windows; w; w = w->next) + for (w = s->root.windows; w; w = w->next) { RING_WINDOW (w); @@ -1106,7 +1102,7 @@ ringTerminate (CompDisplay *d, { RING_SCREEN (s); - if (xid && s->root != xid) + if (xid && s->root.id != xid) continue; if (rs->grabIndex) @@ -1119,7 +1115,7 @@ ringTerminate (CompDisplay *d, { CompWindow *w; - for (w = s->windows; w; w = w->next) + for (w = s->root.windows; w; w = w->next) { RING_WINDOW (w); @@ -1375,7 +1371,7 @@ ringWindowSelectAt (CompScreen *s, o.type = CompOptionTypeInt; o.name = "root"; - o.value.i = s->root; + o.value.i = s->root.id; ringTerminate (s->display, NULL, 0, &o, 1); } @@ -1439,7 +1435,7 @@ ringWindowRemove (CompDisplay *d, o.type = CompOptionTypeInt; o.name = "root"; - o.value.i = w->screen->root; + o.value.i = w->screen->root.id; ringTerminate (d, NULL, 0, &o, 1); return; diff --git a/src/scaleaddon/scaleaddon.c b/src/scaleaddon/scaleaddon.c index ae876ab..c151e6a 100644 --- a/src/scaleaddon/scaleaddon.c +++ b/src/scaleaddon/scaleaddon.c @@ -345,7 +345,7 @@ scaleaddonCheckForWindowAt (CompScreen *s, float x1, y1, x2, y2; CompWindow *w; - for (w = s->reverseWindows; w; w = w->prev) + for (w = s->root.reverseWindows; w; w = w->prev) { SCALE_WINDOW (w); @@ -494,7 +494,7 @@ scaleaddonPullWindow (CompDisplay *d, o[0].type = CompOptionTypeInt; o[0].name = "root"; - o[0].value.i = s->root; + o[0].value.i = s->root.id; if (action->terminate) (*action->terminate) (d, action, 0, o, 1); @@ -732,7 +732,7 @@ scaleaddonDonePaintScreen (CompScreen *s) { CompWindow *w; - for (w = s->windows; w; w = w->next) + for (w = s->root.windows; w; w = w->next) scaleaddonRenderWindowTitle (w); } else if (ss->state == SCALE_STATE_NONE && @@ -740,7 +740,7 @@ scaleaddonDonePaintScreen (CompScreen *s) { CompWindow *w; - for (w = s->windows; w; w = w->next) + for (w = s->root.windows; w; w = w->next) scaleaddonFreeWindowTitle (w); } @@ -808,7 +808,7 @@ scaleaddonHandleCompizEvent (CompDisplay *d, { CompWindow *w; - for (w = s->windows; w; w = w->next) + for (w = s->root.windows; w; w = w->next) { ADDON_WINDOW (w); aw->rescaled = FALSE; @@ -1261,7 +1261,7 @@ scaleaddonScreenOptionChanged (CompScreen *s, { CompWindow *w; - for (w = s->windows; w; w = w->next) + for (w = s->root.windows; w; w = w->next) { ADDON_WINDOW (w); diff --git a/src/session/session.c b/src/session/session.c index 6b58320..ef20671 100644 --- a/src/session/session.c +++ b/src/session/session.c @@ -481,7 +481,7 @@ saveState (CompDisplay *d, { CompWindow *w; - for (w = s->windows; w; w = w->next) + for (w = s->root.windows; w; w = w->next) { if (!isSessionWindow (w)) continue; @@ -853,7 +853,7 @@ sessionWindowAddTimeout (void *closure) SESSION_DISPLAY (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) sessionWindowAdd (s, w); sd->windowAddTimeout = 0; diff --git a/src/shift/shift.c b/src/shift/shift.c index 4978c9f..6ee308b 100644 --- a/src/shift/shift.c +++ b/src/shift/shift.c @@ -203,7 +203,7 @@ shiftActivateEvent (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"; @@ -465,17 +465,29 @@ shiftPaintWindow (CompWindow *w, { WindowPaintAttrib sAttrib = *attrib; Bool scaled = FALSE; + float anim = MIN (1.0, MAX (0.0, ss->anim)); - if (w->mapNum) + if (sw->active) { - if (!w->texture->pixmap && !w->bindFailed) - bindWindow (w); + if (mask & PAINT_WINDOW_OCCLUSION_DETECTION_MASK) + return FALSE; + + if (ss->activeSlot) + { + if (ss->activeSlot->slot->primary && !ss->reflectActive) + sAttrib.opacity *= + (ss->anim * ss->activeSlot->slot->opacity) + + (1 - ss->anim); + else + sAttrib.opacity *= anim * anim * + ss->activeSlot->slot->opacity; + + mask |= PAINT_WINDOW_TRANSLUCENT_MASK; + + scaled = TRUE; + } } - - if (sw->active) - scaled = (ss->activeSlot != NULL); - if (sw->opacity > 0.01 && (ss->activeSlot == NULL)) { sAttrib.brightness = sAttrib.brightness * sw->brightness; @@ -487,53 +499,43 @@ shiftPaintWindow (CompWindow *w, if (sw->active && (ss->output->id == ss->usedOutput || ss->output->id == ~0)) mask |= PAINT_WINDOW_NO_CORE_INSTANCE_MASK; - UNWRAP (ss, s, paintWindow); status = (*s->paintWindow) (w, &sAttrib, transform, region, mask); WRAP (ss, s, paintWindow, shiftPaintWindow); + if (w->attrib.map_state != IsViewable) + return status; + + if (!w->damaged) + return status; + + if (w->mapNum) + { + if (!w->texture->pixmap && !w->bindFailed) + bindWindow (w); + } + if (scaled && w->texture->pixmap) { - FragmentAttrib fragment; - CompTransform wTransform = *transform; - ShiftSlot *slot = ss->activeSlot->slot; + CompTransform wTransform = *transform; + ShiftSlot *slot = ss->activeSlot->slot; float sx = ss->anim * slot->tx; float sy = ss->anim * slot->ty; float sz = ss->anim * slot->z; float srot = (ss->anim * slot->rotation); - float anim = MIN (1.0, MAX (0.0, ss->anim)); float sscale; - float sopacity; - if (slot->primary) sscale = (ss->anim * slot->scale) + (1 - ss->anim); else sscale = ss->anim * slot->scale; - if (slot->primary && !ss->reflectActive) - sopacity = (ss->anim * slot->opacity) + (1 - ss->anim); - else - sopacity = anim * anim * slot->opacity; - - if (sopacity <= 0.05) + if (w->lastPaint.opacity <= (0.05 * OPAQUE)) return status; - if (mask & PAINT_WINDOW_OCCLUSION_DETECTION_MASK) - return FALSE; - - initFragmentAttrib (&fragment, attrib); - - fragment.opacity = (float)fragment.opacity * sopacity; - fragment.brightness = (float)fragment.brightness * - ss->reflectBrightness; - - if (w->alpha || fragment.opacity != OPAQUE) - mask |= PAINT_WINDOW_TRANSLUCENT_MASK; - matrixTranslate (&wTransform, sx, sy, sz); matrixTranslate (&wTransform, @@ -553,13 +555,7 @@ shiftPaintWindow (CompWindow *w, matrixTranslate (&wTransform, -w->attrib.x - (w->width / 2), -w->attrib.y - (w->attrib.height / 2), 0.0f); - glPushMatrix (); - glLoadMatrixf (wTransform.m); - - (*s->drawWindow) (w, &wTransform, &fragment, region, - mask | PAINT_WINDOW_TRANSFORMED_MASK); - - glPopMatrix (); + drawTransformedWindowWithChildren (w, &sAttrib, &wTransform); } if (scaled && ((shiftGetOverlayIcon (s) != OverlayIconNone) || @@ -1144,7 +1140,7 @@ shiftCreateWindowList (CompScreen *s) ss->nWindows = 0; - for (w = s->windows; w; w = w->next) + for (w = s->root.windows; w; w = w->next) { if (isShiftWin (w)) { @@ -1209,7 +1205,7 @@ shiftCountWindows (CompScreen *s) CompWindow *w; int count = 0; - for (w = s->windows; w; w = w->next) + for (w = s->root.windows; w; w = w->next) { if (isShiftWin (w)) count++; @@ -1629,7 +1625,7 @@ shiftPreparePaintScreen (CompScreen *s, { ss->moreAdjust = adjustShiftAnimationAttribs (s, chunk); - for (w = s->windows; w; w = w->next) + for (w = s->root.windows; w; w = w->next) { SHIFT_WINDOW (w); @@ -1687,7 +1683,7 @@ shiftDonePaintScreen (CompScreen *s) { ss->state = ShiftStateNone; shiftActivateEvent(s, FALSE); - for (w = s->windows; w; w = w->next) + for (w = s->root.windows; w; w = w->next) { SHIFT_WINDOW (w); sw->active = FALSE; @@ -1783,7 +1779,7 @@ shiftTerminate (CompDisplay *d, for (s = d->screens; s; s = s->next) { - if (xid && s->root != xid) + if (xid && s->root.id != xid) continue; shiftTerm (s, (state & CompActionStateCancel)); @@ -2125,7 +2121,7 @@ shiftWindowRemove (CompDisplay * d, o.type = CompOptionTypeInt; o.name = "root"; - o.value.i = w->screen->root; + o.value.i = w->screen->root.id; shiftTerminate (d, NULL, 0, &o, 1); return; diff --git a/src/snap/snap.c b/src/snap/snap.c index da316bc..bf0450c 100644 --- a/src/snap/snap.c +++ b/src/snap/snap.c @@ -338,7 +338,7 @@ static void snapUpdateWindowsEdges(CompWindow * w) Bool remove = FALSE; // First add all the windows - c = w->screen->windows; + c = w->screen->root.windows; while (c) { // Just check that we're not trying to snap to current window, @@ -366,7 +366,7 @@ static void snapUpdateWindowsEdges(CompWindow * w) // If an edge has been passed, check if it's in the region window, // if the edge is fully under the window, drop it, or if it's only // partly covered, cut it/split it in one/two smaller visible edges - for (c = w->screen->windows; c; c = c->next) + for (c = w->screen->root.windows; c; c = c->next) { if (c == w || !isSnapWindow(c)) continue; @@ -461,7 +461,7 @@ static void snapUpdateScreenEdges(CompWindow * w) // Drop screen edges parts that are under struts, basically apply the // same strategy than for windows edges visibility - for (c = w->screen->windows; c; c = c->next) + for (c = w->screen->root.windows; c; c = c->next) { if (c == w || !c->struts) continue; diff --git a/src/staticswitcher/staticswitcher.c b/src/staticswitcher/staticswitcher.c index 316cbf7..d55a48c 100644 --- a/src/staticswitcher/staticswitcher.c +++ b/src/staticswitcher/staticswitcher.c @@ -184,7 +184,7 @@ switchActivateEvent (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"; @@ -324,7 +324,7 @@ switchCreateWindowList (CompScreen *s, ss->nWindows = 0; - for (w = s->windows; w; w = w->next) + for (w = s->root.windows; w; w = w->next) { if (isSwitchWin (w)) switchAddWindowToList (s, w); @@ -445,7 +445,7 @@ switchToWindow (CompScreen *s, xev.xclient.format = 32; xev.xclient.message_type = s->display->desktopViewportAtom; - xev.xclient.window = s->root; + xev.xclient.window = s->root.id; xev.xclient.data.l[0] = x * s->width; xev.xclient.data.l[1] = y * s->height; @@ -453,7 +453,7 @@ switchToWindow (CompScreen *s, xev.xclient.data.l[3] = 0; xev.xclient.data.l[4] = 0; - XSendEvent (s->display->display, s->root, FALSE, + XSendEvent (s->display->display, s->root.id, FALSE, SubstructureRedirectMask | SubstructureNotifyMask, &xev); } @@ -495,7 +495,7 @@ switchCountWindows (CompScreen *s) CompWindow *w; int count = 0; - for (w = s->windows; w; w = w->next) + for (w = s->root.windows; w; w = w->next) if (isSwitchWin (w)) count++; @@ -608,11 +608,11 @@ switchInitiate (CompScreen *s, attr.background_pixel = 0; attr.border_pixel = 0; - attr.colormap = XCreateColormap (dpy, s->root, visual, + attr.colormap = XCreateColormap (dpy, s->root.id, visual, AllocNone); ss->popupWindow = - XCreateWindow (dpy, s->root, -1, -1, 1, 1, 0, + XCreateWindow (dpy, s->root.id, -1, -1, 1, 1, 0, 32, InputOutput, visual, CWBackPixel | CWBorderPixel | CWColormap, &attr); @@ -697,7 +697,7 @@ switchTerminate (CompDisplay *d, { SWITCH_SCREEN (s); - if (xid && s->root != xid) + if (xid && s->root.id != xid) continue; if (ss->grabIndex) @@ -973,7 +973,7 @@ switchWindowRemove (CompDisplay *d, o.type = CompOptionTypeInt; o.name = "root"; - o.value.i = w->screen->root; + o.value.i = w->screen->root.id; switchTerminate (d, NULL, 0, &o, 1); return; @@ -1242,8 +1242,9 @@ switchPaintOutput (CompScreen *s, for (w = zoomed->prev; w && w->id <= 1; w = w->prev); zoomedAbove = (w) ? w->id : None; - unhookWindowFromScreen (s, zoomed); - insertWindowIntoScreen (s, zoomed, s->reverseWindows->id); + unhookWindow (zoomed->parent, zoomed); + insertWindow (zoomed->parent, zoomed, + s->root.reverseWindows->id); } } else @@ -1258,8 +1259,8 @@ switchPaintOutput (CompScreen *s, if (zoomed) { - unhookWindowFromScreen (s, zoomed); - insertWindowIntoScreen (s, zoomed, zoomedAbove); + unhookWindow (zoomed->parent, zoomed); + insertWindow (zoomed->parent, zoomed, zoomedAbove); } if (switcher || mode == HighlightModeShowRectangle) @@ -1392,7 +1393,6 @@ switchPaintThumb (CompWindow *w, if (w->texture->pixmap) { AddWindowGeometryProc oldAddWindowGeometry; - FragmentAttrib fragment; CompTransform wTransform = *transform; int ww, wh; @@ -1434,11 +1434,6 @@ switchPaintThumb (CompWindow *w, sAttrib.xTranslate = wx - w->attrib.x + w->input.left * sAttrib.xScale; sAttrib.yTranslate = wy - w->attrib.y + w->input.top * sAttrib.yScale; - initFragmentAttrib (&fragment, &sAttrib); - - if (w->alpha || fragment.opacity != OPAQUE) - mask |= PAINT_WINDOW_TRANSLUCENT_MASK; - matrixTranslate (&wTransform, w->attrib.x, w->attrib.y, 0.0f); matrixScale (&wTransform, sAttrib.xScale, sAttrib.yScale, 1.0f); matrixTranslate (&wTransform, @@ -1446,20 +1441,14 @@ switchPaintThumb (CompWindow *w, sAttrib.yTranslate / sAttrib.yScale - w->attrib.y, 0.0f); - glPushMatrix (); - glLoadMatrixf (wTransform.m); - /* XXX: replacing the addWindowGeometry function like this is very ugly but necessary until the vertex stage has been made fully pluggable. */ oldAddWindowGeometry = w->screen->addWindowGeometry; w->screen->addWindowGeometry = addWindowGeometry; - (w->screen->drawWindow) (w, &wTransform, &fragment, &infiniteRegion, - mask); + drawTransformedWindowWithChildren (w, &sAttrib, &wTransform); w->screen->addWindowGeometry = oldAddWindowGeometry; - glPopMatrix (); - if (staticswitcherGetIcon (s)) { icon = getWindowIcon (w, ICON_SIZE, ICON_SIZE); @@ -1671,6 +1660,12 @@ switchPaintWindow (CompWindow *w, status = (*s->paintWindow) (w, attrib, transform, region, mask); WRAP (ss, s, paintWindow, switchPaintWindow); + if (w->attrib.map_state != IsViewable) + return status; + + if (!w->damaged) + return status; + if (!(mask & PAINT_WINDOW_TRANSFORMED_MASK) && region->numRects == 0) return TRUE; diff --git a/src/text/text.c b/src/text/text.c index d281625..fe22be3 100644 --- a/src/text/text.c +++ b/src/text/text.c @@ -216,7 +216,7 @@ textFileToImage (CompDisplay *d, return FALSE; } - pixmap = XCreatePixmap (dpy, textAttrib->screen->root, 1, 1, 32); + pixmap = XCreatePixmap (dpy, textAttrib->screen->root.id, 1, 1, 32); if (!pixmap) { compLogMessage ("text", CompLogLevelError, @@ -365,7 +365,8 @@ textFileToImage (CompDisplay *d, pixmap = None; if (w > 0 && h > 0) - pixmap = XCreatePixmap (dpy, textAttrib->screen->root, w, h, 32); + pixmap = XCreatePixmap (dpy, textAttrib->screen->root.id, + w, h, 32); if (!pixmap) { diff --git a/src/thumbnail/thumbnail.c b/src/thumbnail/thumbnail.c index f477acb..cd859f4 100644 --- a/src/thumbnail/thumbnail.c +++ b/src/thumbnail/thumbnail.c @@ -439,7 +439,7 @@ positionUpdate (CompScreen *s, int x, int y) { - CompWindow *cw = s->windows; + CompWindow *cw = s->root.windows; CompWindow *found = NULL; THUMB_SCREEN (s); @@ -685,8 +685,6 @@ thumbPaintThumb (CompScreen *s, float width = t->width; float height = t->height; WindowPaintAttrib sAttrib; - unsigned int mask = PAINT_WINDOW_TRANSFORMED_MASK | - PAINT_WINDOW_TRANSLUCENT_MASK; THUMB_SCREEN (s); @@ -705,10 +703,9 @@ thumbPaintThumb (CompScreen *s, if (w->texture->pixmap) { - int off = t->offset; - GLenum filter = s->display->textureFilter; - FragmentAttrib fragment; - CompTransform wTransform = *transform; + int off = t->offset; + GLenum filter = s->display->textureFilter; + CompTransform wTransform = *transform; glEnable (GL_BLEND); glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); @@ -876,8 +873,6 @@ thumbPaintThumb (CompScreen *s, if (thumbnailGetMipmap (s)) s->display->textureFilter = GL_LINEAR_MIPMAP_LINEAR; - initFragmentAttrib (&fragment, &sAttrib); - matrixTranslate (&wTransform, w->attrib.x, w->attrib.y, 0.0f); matrixScale (&wTransform, sAttrib.xScale, sAttrib.yScale, 1.0f); matrixTranslate (&wTransform, @@ -885,11 +880,7 @@ thumbPaintThumb (CompScreen *s, sAttrib.yTranslate / sAttrib.yScale - w->attrib.y, 0.0f); - glPushMatrix (); - glLoadMatrixf (wTransform.m); - (*w->screen->drawWindow) (w, &wTransform, &fragment, - &infiniteRegion, mask); - glPopMatrix (); + drawTransformedWindowWithChildren (w, &sAttrib, &wTransform); s->display->textureFilter = filter; } diff --git a/src/vpswitch/vpswitch.c b/src/vpswitch/vpswitch.c index a88e853..7fc6d51 100644 --- a/src/vpswitch/vpswitch.c +++ b/src/vpswitch/vpswitch.c @@ -71,7 +71,7 @@ typedef struct _VpSwitchDisplay xid = getIntOptionNamed (option, nOption, "window", 0); \ w = findWindowAtDisplay (d, xid); \ if ((!w || (w->type & CompWindowTypeDesktopMask) == 0) && \ - xid != s->root) \ + xid != s->root.id) \ return FALSE; static Bool @@ -177,7 +177,7 @@ vpswitchGoto (CompScreen *s, xev.xclient.format = 32; xev.xclient.message_type = s->display->desktopViewportAtom; - xev.xclient.window = s->root; + xev.xclient.window = s->root.id; xev.xclient.data.l[0] = x * s->width; xev.xclient.data.l[1] = y * s->height; @@ -185,7 +185,7 @@ vpswitchGoto (CompScreen *s, xev.xclient.data.l[3] = 0; xev.xclient.data.l[4] = 0; - XSendEvent (s->display->display, s->root, FALSE, + XSendEvent (s->display->display, s->root.id, FALSE, SubstructureRedirectMask | SubstructureNotifyMask, &xev); } diff --git a/src/wall/wall.c b/src/wall/wall.c index dfe004b..7339e9d 100644 --- a/src/wall/wall.c +++ b/src/wall/wall.c @@ -403,7 +403,7 @@ wallSetupCairoContext (CompScreen *s, format = XRenderFindStandardFormat (s->display->display, PictStandardARGB32); - context->pixmap = XCreatePixmap (s->display->display, s->root, + context->pixmap = XCreatePixmap (s->display->display, s->root.id, width, height, 32); if (!bindPixmapToTexture(s, &context->texture, context->pixmap, @@ -1760,7 +1760,7 @@ wallSetOptionForPlugin (CompObject *o, status = (*core.setOptionForPlugin) (o, plugin, name, value); WRAP (wc, &core, setOptionForPlugin, wallSetOptionForPlugin); - if (status && o->type == COMP_OBJECT_TYPE_SCREEN) + if (status && o->parent && o->type == COMP_OBJECT_TYPE_SCREEN) { if (strcmp (plugin, "core") == 0) if (strcmp (name, "hsize") == 0 || strcmp (name, "vsize") == 0) diff --git a/src/winrules/winrules.c b/src/winrules/winrules.c index 8f10998..6b4249c 100644 --- a/src/winrules/winrules.c +++ b/src/winrules/winrules.c @@ -410,7 +410,7 @@ winrulesSetScreenOption (CompPlugin *plugin, { CompWindow *w; - for (w = screen->windows; w; w = w->next) + for (w = screen->root.windows; w; w = w->next) winrulesSetNoAlpha (w, WINRULES_SCREEN_OPTION_NOARGB_MATCH); return TRUE; @@ -421,7 +421,7 @@ winrulesSetScreenOption (CompPlugin *plugin, { CompWindow *w; - for (w = screen->windows; w; w = w->next) + for (w = screen->root.windows; w; w = w->next) winrulesSetNoFocus (w, WINRULES_SCREEN_OPTION_NOFOCUS_MATCH); return TRUE; @@ -448,7 +448,7 @@ winrulesSetScreenOption (CompPlugin *plugin, { CompWindow *w; - for (w = screen->windows; w; w = w->next) + for (w = screen->root.windows; w; w = w->next) winrulesUpdateState (w, index, updateStateMask); return TRUE; @@ -458,7 +458,7 @@ winrulesSetScreenOption (CompPlugin *plugin, { CompWindow *w; - for (w = screen->windows; w; w = w->next) + for (w = screen->root.windows; w; w = w->next) winrulesSetAllowedActions (w, index, updateActionsMask); return TRUE; @@ -582,7 +582,7 @@ winrulesMatchExpHandlerChanged (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) winrulesApplyRules (w); } diff --git a/src/workarounds/workarounds.c b/src/workarounds/workarounds.c index 0e0f9a1..bb9941e 100644 --- a/src/workarounds/workarounds.c +++ b/src/workarounds/workarounds.c @@ -534,7 +534,7 @@ workaroundsDisplayOptionChanged (CompDisplay *d, for (s = d->screens; s; s = s->next) { ws = GET_WORKAROUNDS_SCREEN (s, GET_WORKAROUNDS_DISPLAY (d)); - for (w = s->windows; w; w = w->next) + for (w = s->root.windows; w; w = w->next) workaroundsUpdateSticky (w); workaroundsUpdateParameterFix (s); if (workaroundsGetFglrxXglFix (d))
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor