diff --git a/hw/xnest/Screen.c b/hw/xnest/Screen.c index c55f00410..142186bb8 100644 --- a/hw/xnest/Screen.c +++ b/hw/xnest/Screen.c @@ -340,7 +340,7 @@ xnestOpenScreen(ScreenPtr pScreen, int argc, char *argv[]) #define POSITION_OFFSET (pScreen->myNum * (xnestWidth + xnestHeight) / 32) if (xnestDoFullGeneration) { - XnestScreenPtr xnscr = xnestScreenPriv(pScreen); + XnestScreenPtr xnscr = xnestAllocScreenPriv(pScreen); valuemask = CWBackPixel | CWEventMask | CWColormap; attributes.background_pixel = xnestWhitePixel; diff --git a/hw/xnest/multiscreen.c b/hw/xnest/multiscreen.c index fc96a22cf..c8eaff23c 100644 --- a/hw/xnest/multiscreen.c +++ b/hw/xnest/multiscreen.c @@ -4,6 +4,12 @@ XnestScreenRec xnestScreens[MAXSCREENS] = { 0 }; +XnestScreenPtr xnestAllocScreenPriv(ScreenPtr pScreen) +{ + xnestScreens[pScreen->myNum].pScreen = pScreen; + return &xnestScreens[pScreen->myNum]; +} + XnestScreenPtr xnestScreenPriv(ScreenPtr pScreen) { return &xnestScreens[pScreen->myNum]; diff --git a/hw/xnest/multiscreen.h b/hw/xnest/multiscreen.h index 2cd931fe9..e31011456 100644 --- a/hw/xnest/multiscreen.h +++ b/hw/xnest/multiscreen.h @@ -13,6 +13,7 @@ typedef struct xnest_screen { Window rootWindow; + ScreenPtr pScreen; } XnestScreenRec, *XnestScreenPtr; /* retrieve private screen structure by ScreenPtr */ @@ -21,4 +22,7 @@ XnestScreenPtr xnestScreenPriv(ScreenPtr pScreen); /* retrieve private screen structure by global index */ XnestScreenPtr xnestScreenByIdx(int idx); +/* allocate new private screen structure for ScreenPtr */ +XnestScreenPtr xnestAllocScreenPriv(ScreenPtr pScreen); + #endif /* _XSERVER_CALLBACK_PRIV_H */