PATCH: Fix Multiplication of Windows in VGA_DoSetMode

Christian Costa titan.costa at wanadoo.fr
Thu May 16 15:14:47 CDT 2002


Changelog:

Do not create a Window each time VGA_DoSetMode is called. The Window is
created the first time and just resized after. 

        Modified files: dlls/winedos/vga.c

Christian Costa   titan.costa at wanadoo.fr
-------------- next part --------------
Index: vga.c
===================================================================
RCS file: /home/wine/wine/dlls/winedos/vga.c,v
retrieving revision 1.11
diff -u -r1.11 vga.c
--- vga.c	14 May 2002 03:57:26 -0000	1.11
+++ vga.c	16 May 2002 20:01:42 -0000
@@ -52,6 +52,8 @@
 
 static void CALLBACK VGA_Poll( LPVOID arg, DWORD low, DWORD high );
 
+static HWND vga_hwnd = (HWND) NULL;
+
 /*
  * For simplicity, I'm creating a second palette.
  * 16 color accesses will use these pointers and insert
@@ -247,7 +249,6 @@
 static void WINAPI VGA_DoSetMode(ULONG_PTR arg)
 {
     LRESULT	res;
-    HWND	hwnd;
     ModeSet *par = (ModeSet *)arg;
     par->ret=1;
 
@@ -267,11 +268,19 @@
             ERR("DirectDraw is not available (res = %lx)\n",res);
             return;
         }
-	hwnd = CreateWindowExA(0,"STATIC","WINEDOS VGA",WS_POPUP|WS_BORDER|WS_CAPTION|WS_SYSMENU,0,0,par->Xres,par->Yres,0,0,0,NULL);
-	if (!hwnd) {
-	    ERR("Failed to create user window.\n");
-	}
-        if ((res=IDirectDraw_SetCooperativeLevel(lpddraw,hwnd,DDSCL_FULLSCREEN|DDSCL_EXCLUSIVE))) {
+        if (!vga_hwnd) {
+            vga_hwnd = CreateWindowExA(0,"STATIC","WINEDOS VGA",WS_POPUP|WS_BORDER|WS_CAPTION|WS_SYSMENU,0,0,par->Xres,par->Yres,0,0,0,NULL);
+            if (!vga_hwnd) {
+                ERR("Failed to create user window.\n");
+                IDirectDraw_Release(lpddraw);
+                lpddraw=NULL;
+                return;
+            }
+        }
+        else
+            SetWindowPos(vga_hwnd,0,0,0,par->Xres,par->Yres,SWP_NOMOVE|SWP_NOZORDER);
+
+        if ((res=IDirectDraw_SetCooperativeLevel(lpddraw,vga_hwnd,DDSCL_FULLSCREEN|DDSCL_EXCLUSIVE))) {
 	    ERR("Could not set cooperative level to exclusive (%lx)\n",res);
 	}
 


More information about the wine-patches mailing list