Author: Michal Srb Subject: Use preferred mode. Patch-Mainline: To be upstreamed References: bnc#896540 If there is any resolution specified with -geometry or -screen parameters, report this resolution as preferred one. That way desktop environments won't change it immediately after start. Index: unix/xserver/hw/vnc/xvnc.c =================================================================== --- unix/xserver/hw/vnc/xvnc.c.orig +++ unix/xserver/hw/vnc/xvnc.c @@ -1296,12 +1296,24 @@ static RRCrtcPtr vncRandRCrtcCreate(Scre vncRandRCrtcSet(pScreen, crtc, NULL, 0, 0, RR_Rotate_0, 1, &output); /* Populate a list of default modes */ - modes = malloc(sizeof(RRModePtr)*sizeof(vncRandRWidths)/sizeof(*vncRandRWidths)); + modes = malloc(sizeof(RRModePtr)*sizeof(vncRandRWidths)/sizeof(*vncRandRWidths) + 1); if (modes == NULL) return NULL; num_modes = 0; + + /* Start with requested mode */ + mode = vncRandRModeGet(pScreen->width, pScreen->height); + if(mode != NULL) { + modes[num_modes] = mode; + num_modes++; + } + + /* Add default modes */ for (i = 0;i < sizeof(vncRandRWidths)/sizeof(*vncRandRWidths);i++) { + if (vncRandRWidths[i] == pScreen->width && vncRandRHeights[i] == pScreen->height) + continue; + mode = vncRandRModeGet(vncRandRWidths[i], vncRandRHeights[i]); if (mode != NULL) { modes[num_modes] = mode; @@ -1309,7 +1321,7 @@ static RRCrtcPtr vncRandRCrtcCreate(Scre } } - RROutputSetModes(output, modes, num_modes, 0); + RROutputSetModes(output, modes, num_modes, 1); free(modes);