A paintable window is a window whose pixels are (potentially) modifiable by rendering commands. Right now this is effectively a shadow of the viewable bit, but set by DDX instead of DIX. Later in this series it will also indicate a window with allocated backing store.
Signed-off-by: Adam Jackson <[email protected]> --- dix/window.c | 1 + fb/fbwindow.c | 2 ++ hw/dmx/dmxwindow.c | 5 +++++ hw/xnest/Window.c | 2 ++ include/windowstr.h | 1 + 5 files changed, 11 insertions(+) diff --git a/dix/window.c b/dix/window.c index 99024de..39cb6f7 100644 --- a/dix/window.c +++ b/dix/window.c @@ -367,6 +367,7 @@ SetWindowToDefaults(WindowPtr pWin) pWin->mapped = FALSE; /* off */ pWin->realized = FALSE; /* off */ pWin->viewable = FALSE; + pWin->paintable = FALSE; pWin->visibility = VisibilityNotViewable; pWin->overrideRedirect = FALSE; pWin->saveUnder = FALSE; diff --git a/fb/fbwindow.c b/fb/fbwindow.c index 7a5fac8..8ac6aba 100644 --- a/fb/fbwindow.c +++ b/fb/fbwindow.c @@ -48,6 +48,7 @@ fbDestroyWindow(WindowPtr pWin) Bool fbRealizeWindow(WindowPtr pWindow) { + pWindow->paintable = (pWindow->drawable.class == InputOutput); return TRUE; } @@ -60,6 +61,7 @@ fbPositionWindow(WindowPtr pWin, int x, int y) Bool fbUnrealizeWindow(WindowPtr pWindow) { + pWindow->paintable = FALSE; return TRUE; } diff --git a/hw/dmx/dmxwindow.c b/hw/dmx/dmxwindow.c index c753735..5eb4ee9 100644 --- a/hw/dmx/dmxwindow.c +++ b/hw/dmx/dmxwindow.c @@ -622,6 +622,9 @@ dmxRealizeWindow(WindowPtr pWindow) ret = pScreen->RealizeWindow(pWindow); #endif + /* tell DIX this window is paintable */ + pWindow->paintable = (pWindow->drawable.class == InputOutput); + /* Determine if the window is completely off the visible portion of the screen */ pWinPriv->offscreen = DMX_WINDOW_OFFSCREEN(pWindow); @@ -662,6 +665,8 @@ dmxUnrealizeWindow(WindowPtr pWindow) ret = pScreen->UnrealizeWindow(pWindow); #endif + pWindow->paintable = FALSE; + if (pWinPriv->window) { /* Unrealize window on back-end server */ XUnmapWindow(dmxScreen->beDisplay, pWinPriv->window); diff --git a/hw/xnest/Window.c b/hw/xnest/Window.c index 8d9c672..ccdc3e3 100644 --- a/hw/xnest/Window.c +++ b/hw/xnest/Window.c @@ -352,6 +352,7 @@ xnestChangeWindowAttributes(WindowPtr pWin, unsigned long mask) Bool xnestRealizeWindow(WindowPtr pWin) { + pWin->paintable = (pWin->drawable.class == InputOutput); xnestConfigureWindow(pWin, CWStackingOrder); xnestShapeWindow(pWin); XMapWindow(xnestDisplay, xnestWindow(pWin)); @@ -362,6 +363,7 @@ xnestRealizeWindow(WindowPtr pWin) Bool xnestUnrealizeWindow(WindowPtr pWin) { + pWin->paintable = FALSE; XUnmapWindow(xnestDisplay, xnestWindow(pWin)); return True; diff --git a/include/windowstr.h b/include/windowstr.h index 740f4a6..6443ead 100644 --- a/include/windowstr.h +++ b/include/windowstr.h @@ -158,6 +158,7 @@ typedef struct _Window { unsigned mapped:1; unsigned realized:1; /* ancestors are all mapped */ unsigned viewable:1; /* realized && InputOutput */ + unsigned paintable:1; unsigned dontPropagate:3; /* index into DontPropagateMasks */ unsigned forcedBS:1; /* system-supplied backingStore */ unsigned redirectDraw:2; /* COMPOSITE rendering redirect */ -- 1.9.3 _______________________________________________ [email protected]: X.Org development Archives: http://lists.x.org/archives/xorg-devel Info: http://lists.x.org/mailman/listinfo/xorg-devel
