mi: decouple miCreateScreenResources from pScreen->{width,height}
This allows pScreen->{width,height} to be changed to smaller values after miScreenInit() is called but before pScreen is further set up / used by dix, so that the screen size can be fit to the mode of choice even when it does not have the maximum width and/or height among its peers. XGetImage() for one will fail once the screen is change back to a bigger size with xrandr, which prevents e.g. x11vnc to work on the server. Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/854>
This commit is contained in:
parent
aa3f5023e3
commit
7c5b5642b2
|
@ -55,6 +55,8 @@ from The Open Group.
|
||||||
typedef struct {
|
typedef struct {
|
||||||
void *pbits; /* pointer to framebuffer */
|
void *pbits; /* pointer to framebuffer */
|
||||||
int width; /* delta to add to a framebuffer addr to move one row down */
|
int width; /* delta to add to a framebuffer addr to move one row down */
|
||||||
|
int xsize;
|
||||||
|
int ysize;
|
||||||
} miScreenInitParmsRec, *miScreenInitParmsPtr;
|
} miScreenInitParmsRec, *miScreenInitParmsPtr;
|
||||||
|
|
||||||
/* this plugs into pScreen->ModifyPixmapHeader */
|
/* this plugs into pScreen->ModifyPixmapHeader */
|
||||||
|
@ -166,8 +168,8 @@ miCreateScreenResources(ScreenPtr pScreen)
|
||||||
if (!pPixmap)
|
if (!pPixmap)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
if (!(*pScreen->ModifyPixmapHeader) (pPixmap, pScreen->width,
|
if (!(*pScreen->ModifyPixmapHeader) (pPixmap, pScrInitParms->xsize,
|
||||||
pScreen->height,
|
pScrInitParms->ysize,
|
||||||
pScreen->rootDepth,
|
pScreen->rootDepth,
|
||||||
BitsPerPixel(pScreen->rootDepth),
|
BitsPerPixel(pScreen->rootDepth),
|
||||||
PixmapBytePad(pScrInitParms->width,
|
PixmapBytePad(pScrInitParms->width,
|
||||||
|
@ -185,7 +187,7 @@ miCreateScreenResources(ScreenPtr pScreen)
|
||||||
}
|
}
|
||||||
|
|
||||||
static Bool
|
static Bool
|
||||||
miScreenDevPrivateInit(ScreenPtr pScreen, int width, void *pbits)
|
miScreenDevPrivateInit(ScreenPtr pScreen, int width, void *pbits, int xsize, int ysize)
|
||||||
{
|
{
|
||||||
miScreenInitParmsPtr pScrInitParms;
|
miScreenInitParmsPtr pScrInitParms;
|
||||||
|
|
||||||
|
@ -198,6 +200,8 @@ miScreenDevPrivateInit(ScreenPtr pScreen, int width, void *pbits)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
pScrInitParms->pbits = pbits;
|
pScrInitParms->pbits = pbits;
|
||||||
pScrInitParms->width = width;
|
pScrInitParms->width = width;
|
||||||
|
pScrInitParms->xsize = xsize;
|
||||||
|
pScrInitParms->ysize = ysize;
|
||||||
pScreen->devPrivate = (void *) pScrInitParms;
|
pScreen->devPrivate = (void *) pScrInitParms;
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
@ -291,7 +295,7 @@ miScreenInit(ScreenPtr pScreen, void *pbits, /* pointer to screen bits */
|
||||||
|
|
||||||
miSetZeroLineBias(pScreen, DEFAULTZEROLINEBIAS);
|
miSetZeroLineBias(pScreen, DEFAULTZEROLINEBIAS);
|
||||||
|
|
||||||
return miScreenDevPrivateInit(pScreen, width, pbits);
|
return miScreenDevPrivateInit(pScreen, width, pbits, xsize, ysize);
|
||||||
}
|
}
|
||||||
|
|
||||||
DevPrivateKeyRec miZeroLineScreenKeyRec;
|
DevPrivateKeyRec miZeroLineScreenKeyRec;
|
||||||
|
|
Loading…
Reference in New Issue