rootless: Adjust the frame size of the native root window in RootlessResizeWindow

If the native root window isn't resized as well, we will likely crash the
next time we draw to the root.  On OS X, this can be seen by:

1) Put the display preferences in the menu bar and set X11's preferences so you
   can access the menu bar in fullscreen mode
2) Set the resolution of your screen lower than normal.
3) Start X11 in fullscreen mode.  The root window will cover the screen as
   expected.
4) Use the menu bar to increase the resolution of the display.  The root
   window will now cover the old area and not the full screen, but
   'xwininfo -root' will report the full width.
5) Run 'xsetroot -solid red', and we have the crash you mention above.

Leaving/entering fullscreen after #4 will fix the problem.  This is because the
WINREC is erased when we leave fullscreen mode and it is recreated upon
re-entry:

RootlessUpdateRooted(FALSE)
    RootlessDisableRoot(screenInfo.screens[0])
        RootlessDestroyFrame (pRoot, winRec);
RootlessUpdateRooted(TRUE)
    RootlessEnableRoot(screenInfo.screens[0])
        RootlessEnsureFrame(screenInfo.screens[0]->pRoot)
            creates a new WINREC...

Signed-off-by: Jan Hauffa <hauffa@in.tum.de>
Reviewed-by: Jeremy Huddleston <jeremyhu@apple.com>
Acked-By: Jon TURNEY <jon.turney@dronecode.org.uk>
Tested-by: Jeremy Huddleston <jeremyhu@apple.com>
This commit is contained in:
Jan Hauffa 2010-07-17 12:18:39 -07:00 committed by Jeremy Huddleston
parent a2c13f0d65
commit 95756f410c
1 changed files with 7 additions and 0 deletions

View File

@ -1315,6 +1315,13 @@ RootlessResizeWindow(WindowPtr pWin, int x, int y,
RegionCopy(&pWin->clipList, &pWin->winSize);
RegionCopy(&pWin->borderClip, &pWin->winSize);
if (winRec) {
SCREENREC(pScreen)->imp->ResizeFrame(winRec->wid, pScreen,
x + SCREEN_TO_GLOBAL_X,
y + SCREEN_TO_GLOBAL_Y,
w, h, RL_GRAVITY_NONE);
}
miSendExposures(pWin, &pWin->borderClip,
pWin->drawable.x, pWin->drawable.y);
}