winex11drv: Initialize real default mode in xrandr and xvidmode backends

Dmitry Timoshkov dmitry at codeweavers.com
Wed Oct 31 00:47:34 CDT 2007


Hello,

the following test program causes a display mode change on my system:

int main(void)
{
    GetDesktopWindow();
    ChangeDisplaySettingsEx(NULL, NULL, 0, 0, NULL);

    return 0;
}

ChangeDisplaySettingsEx with all parameters set to 0 is intended to restore
an original display mode. The default display mode is not at the position 0
of returned modes on my system, but xrandr and xvidmode backends assume that
mode 0 is always a default one.

Changelog:
    winex11drv: Initialize real default mode in xrandr and xvidmode backends.
---
 dlls/winex11.drv/xrandr.c   |    9 ++++++---
 dlls/winex11.drv/xvidmode.c |    7 ++++---
 2 files changed, 10 insertions(+), 6 deletions(-)

diff --git a/dlls/winex11.drv/xrandr.c b/dlls/winex11.drv/xrandr.c
index 8a8d7d9..863db6c 100644
--- a/dlls/winex11.drv/xrandr.c
+++ b/dlls/winex11.drv/xrandr.c
@@ -241,7 +241,7 @@ static LONG X11DRV_XRandR_SetCurrentMode(int mode)
 void X11DRV_XRandR_Init(void)
 {
     Bool ok;
-    int nmodes = 0;
+    int nmodes = 0, default_mode;
     unsigned int i;
 
     if (xrandr_major) return; /* already initialized? */
@@ -280,7 +280,7 @@ void X11DRV_XRandR_Init(void)
                 nmodes += real_xrandr_rates_count[i];
 		for (j = 0; j < real_xrandr_rates_count[i]; ++j) {
 		  if (j > 0) TRACE(",");
-		  TRACE("  %d", real_xrandr_rates[i][j]);
+		  TRACE(" %d", real_xrandr_rates[i][j]);
 		}
             }
             else
@@ -304,7 +304,10 @@ void X11DRV_XRandR_Init(void)
     make_modes();
     X11DRV_Settings_AddDepthModes();
     dd_mode_count = X11DRV_Settings_GetModeCount();
-    X11DRV_Settings_SetDefaultMode(0);
+
+    default_mode = X11DRV_XRandR_GetCurrentMode();
+    TRACE("default mode: %d\n", default_mode);
+    X11DRV_Settings_SetDefaultMode(default_mode);
 
     TRACE("Available DD modes: count=%d\n", dd_mode_count);
     TRACE("Enabling XRandR\n");
diff --git a/dlls/winex11.drv/xvidmode.c b/dlls/winex11.drv/xvidmode.c
index 3a0363c..4aabbbc 100644
--- a/dlls/winex11.drv/xvidmode.c
+++ b/dlls/winex11.drv/xvidmode.c
@@ -141,7 +141,7 @@ static LONG X11DRV_XF86VM_SetCurrentMode(int mode)
 void X11DRV_XF86VM_Init(void)
 {
   Bool ok;
-  int nmodes;
+  int nmodes, default_mode;
   unsigned int i;
   DWORD dwBpp = screen_depth;
   if (dwBpp == 24) dwBpp = 32;
@@ -198,8 +198,9 @@ void X11DRV_XF86VM_Init(void)
 
   TRACE("Available DD modes: count=%d\n", dd_mode_count);
 
-  /* the first mode in the list seems to be the default */
-  X11DRV_Settings_SetDefaultMode(0);
+  default_mode = X11DRV_XF86VM_GetCurrentMode();
+  TRACE("default mode: %d\n", default_mode);
+  X11DRV_Settings_SetDefaultMode(default_mode);
   
   TRACE("Enabling XVidMode\n");
 }
-- 
1.5.3.4






More information about the wine-patches mailing list