File u_tigervnc-use_preferred_mode.patch of Package tigervnc.openSUSE_Leap_42.1_Update

Author: Michal Srb <msrb@suse.com>
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);
 
openSUSE Build Service is sponsored by