{
vncGlueContext *ctx = &randrGlueContext;
- int xwidth = DisplayWidth(ctx->dpy, DefaultScreen(ctx->dpy));
- int xheight = DisplayHeight(ctx->dpy, DefaultScreen(ctx->dpy));
- int xwidthmm = DisplayWidthMM(ctx->dpy, DefaultScreen(ctx->dpy));
- int xheightmm = DisplayHeightMM(ctx->dpy, DefaultScreen(ctx->dpy));
-
- /* Try to retain DPI when we resize */
- XRRSetScreenSize(ctx->dpy, DefaultRootWindow(ctx->dpy), width, height,
- xwidthmm * width / xwidth,
- xheightmm * height / xheight);
+ int mwidth, mheight;
+
+ // Always calculate a DPI of 96.
+ // It's what mutter does, so good enough for us.
+ mwidth = width * 254 / 96 / 10;
+ mheight = height * 254 / 96 / 10;
+
+ XRRSetScreenSize(ctx->dpy, DefaultRootWindow(ctx->dpy),
+ width, height, mwidth, mheight);
return 1;
}
int vncRandRResizeScreen(int width, int height)
{
ScreenPtr pScreen = screenInfo.screens[scrIdx];
+ int dpi, mwidth, mheight;
- /* Try to retain DPI when we resize */
- return RRScreenSizeSet(pScreen, width, height,
- pScreen->mmWidth * width / pScreen->width,
- pScreen->mmHeight * height / pScreen->height);
+ /* Keep the DPI specified at start */
+ dpi = monitorResolution ? monitorResolution : 96;
+ mwidth = width * 254 / dpi / 10;
+ mheight = height * 254 / dpi / 10;
+
+ return RRScreenSizeSet(pScreen, width, height, mwidth, mheight);
}
void vncRandRUpdateSetTime(void)