summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMaarten Maathuis <madman2003@gmail.com>2008-02-17 11:21:01 +0100
committerMaarten Maathuis <madman2003@gmail.com>2008-02-17 11:21:01 +0100
commit70c0592a97c7dc9db0576d32b3bdbe4766520509 (patch)
treef409b5995888c7ddb7bda05e727f0dfd107a036a
parentb95059c20746a71e60ef152bb627e1d5c2210d75 (diff)
Resize composite overlay window when the root window changes.
- This allows some compositing managers to work, even after randr12 has changed the root window size. - Thanks to ajax for figuring out the best place to put this. - Example: - xf86RandR12SetMode() calls EnableDisableFBAccess(). - That calls xf86SetRootClip() which in turn calls ResizeChildrenWinSize(). - The final step is the call to PositionWindow().
-rw-r--r--composite/compwindow.c25
1 files changed, 25 insertions, 0 deletions
diff --git a/composite/compwindow.c b/composite/compwindow.c
index 579236713..ee0f7d270 100644
--- a/composite/compwindow.c
+++ b/composite/compwindow.c
@@ -162,12 +162,35 @@ compCheckRedirect (WindowPtr pWin)
else
compFreePixmap (pWin);
}
return TRUE;
}
+static int
+updateOverlayWindow(ScreenPtr pScreen)
+{
+ CompScreenPtr cs;
+ WindowPtr pWin; /* overlay window */
+ XID vlist[2];
+
+ cs = GetCompScreen(pScreen);
+ if ((pWin = cs->pOverlayWin) != NULL) {
+ if ((pWin->drawable.width == pScreen->width) &&
+ (pWin->drawable.height == pScreen->height))
+ return Success;
+
+ /* Let's resize the overlay window. */
+ vlist[0] = pScreen->width;
+ vlist[1] = pScreen->height;
+ return ConfigureWindow(pWin, CWWidth | CWHeight, vlist, wClient(pWin));
+ }
+
+ /* Let's be on the safe side and not assume an overlay window is always allocated. */
+ return Success;
+}
+
Bool
compPositionWindow (WindowPtr pWin, int x, int y)
{
ScreenPtr pScreen = pWin->drawable.pScreen;
CompScreenPtr cs = GetCompScreen (pScreen);
Bool ret = TRUE;
@@ -200,12 +223,14 @@ compPositionWindow (WindowPtr pWin, int x, int y)
if (!(*pScreen->PositionWindow) (pWin, x, y))
ret = FALSE;
cs->PositionWindow = pScreen->PositionWindow;
pScreen->PositionWindow = compPositionWindow;
compCheckTree (pWin->drawable.pScreen);
+ if (updateOverlayWindow(pScreen) != Success)
+ ret = FALSE;
return ret;
}
Bool
compRealizeWindow (WindowPtr pWin)
{