diff options
author | David Reveman <davidr@novell.com> | 2008-11-18 18:22:34 -0500 |
---|---|---|
committer | David Reveman <davidr@novell.com> | 2008-11-18 18:22:34 -0500 |
commit | f05de44e824838b0debbfec6e8342639e97a3cbb (patch) | |
tree | 9d09ef3cb6276f933ac328c02c928513a9245b78 | |
parent | 0a4fa666b5f264769858cf12ecec4f1f4978020d (diff) |
Never update proxy window geometry on backend server.
-rw-r--r-- | hw/dmx/dmxwindow.c | 32 |
1 files changed, 24 insertions, 8 deletions
diff --git a/hw/dmx/dmxwindow.c b/hw/dmx/dmxwindow.c index 4e06fea13..3a0ab1601 100644 --- a/hw/dmx/dmxwindow.c +++ b/hw/dmx/dmxwindow.c @@ -263,6 +263,7 @@ static Window dmxCreateNonRootWindow(WindowPtr pWindow) XSetWindowAttributes attribs; dmxWinPrivPtr pParentPriv = DMX_GET_WINDOW_PRIV(pWindow->parent); Window win = None; + int x, y, w, h, bw; /* Avoid to create windows on back-end servers with virtual framebuffer */ if (dmxScreen->virtualFb) @@ -309,14 +310,29 @@ static Window dmxCreateNonRootWindow(WindowPtr pWindow) be created on top of the stack, so we must restack the windows */ pWinPriv->restacked = (pWindow->prevSib != NullWindow); + if (pWindow != dmxScreen->pInputOverlayWin) + { + x = pWindow->origin.x - wBorderWidth(pWindow); + y = pWindow->origin.y - wBorderWidth(pWindow); + w = pWindow->drawable.width; + h = pWindow->drawable.height; + bw = pWindow->borderWidth; + } + else + { + x = y = -1; + w = h = 1; + bw = 0; + } + XLIB_PROLOGUE (dmxScreen); win = XCreateWindow(dmxScreen->beDisplay, parent, - pWindow->origin.x - wBorderWidth(pWindow), - pWindow->origin.y - wBorderWidth(pWindow), - pWindow->drawable.width, - pWindow->drawable.height, - pWindow->borderWidth, + x, + y, + w, + h, + bw, pWindow->drawable.depth, pWindow->drawable.class, pWinPriv->visual, @@ -514,7 +530,7 @@ Bool dmxPositionWindow(WindowPtr pWindow, int x, int y) been created yet, create it and map it */ if (!pWinPriv->window && pWinPriv->mapped && !pWinPriv->offscreen) { dmxCreateAndRealizeWindow(pWindow, TRUE); - } else if (pWinPriv->window) { + } else if (pWinPriv->window && pWindow != dmxScreen->pInputOverlayWin) { /* Position window on back-end server */ m = CWX | CWY | CWWidth | CWHeight; c.x = pWindow->origin.x - wBorderWidth(pWindow); @@ -897,7 +913,7 @@ void dmxResizeWindow(WindowPtr pWindow, int x, int y, been created yet, create it and map it */ if (!pWinPriv->window && pWinPriv->mapped && !pWinPriv->offscreen) { dmxCreateAndRealizeWindow(pWindow, TRUE); - } else if (pWinPriv->window) { + } else if (pWinPriv->window && pWindow != dmxScreen->pInputOverlayWin) { /* Handle resizing on back-end server */ m = CWX | CWY | CWWidth | CWHeight; c.x = pWindow->origin.x - wBorderWidth(pWindow); @@ -960,7 +976,7 @@ void dmxChangeBorderWidth(WindowPtr pWindow, unsigned int width) /* NOTE: Do we need to check for on/off screen here? */ - if (pWinPriv->window) { + if (pWinPriv->window && pWindow != dmxScreen->pInputOverlayWin) { /* Handle border width change on back-end server */ m = CWBorderWidth; c.border_width = width; |