user[3/5]: handle special cases for SPI_SETDESKWALLPAPER

Andrew Ziem ahziem1 at mailbolt.com
Sun Jul 9 21:15:52 CDT 2006


The special cases remove the wallpaper or set it to default.
Previously, these cases were ignored, so Wine would crash.
---
 dlls/user/desktop.c   |   16 +++++++++++++---
 dlls/user/sysparams.c |   29 ++++++++++++++++++++++-------
 2 files changed, 35 insertions(+), 10 deletions(-)

diff --git a/dlls/user/desktop.c b/dlls/user/desktop.c
index 2252f99..a26d113 100644
--- a/dlls/user/desktop.c
+++ b/dlls/user/desktop.c
@@ -207,11 +207,21 @@ BOOL WINAPI SetDeskWallPaper( LPCSTR fil
     HDC hdc;
     char buffer[256];
 
-    if (filename == (LPSTR)-1)
+    if ((LPCSTR)NULL == filename || (LPCSTR)SETWALLPAPER_DEFAULT == filename)
     {
-	GetProfileStringA( "desktop", "WallPaper", "(None)", buffer, 256 );
-	filename = buffer;
+        /* revert to default wallpaper */
+        GetProfileStringA( "desktop", "WallPaper", "(None)", buffer, 256 );
+        filename = buffer;
     }
+    else if ('\0' == filename[0])
+    {
+        /* remove wallpaper*/
+        if (hbitmapWallPaper)
+            DeleteObject( hbitmapWallPaper );
+        return TRUE;
+    }
+  
+
     hdc = GetDC( 0 );
     hbitmap = DESKTOP_LoadBitmap( hdc, filename );
     ReleaseDC( 0, hdc );
diff --git a/dlls/user/sysparams.c b/dlls/user/sysparams.c
index 17027f6..6683685 100644
--- a/dlls/user/sysparams.c
+++ b/dlls/user/sysparams.c
@@ -1314,9 +1314,21 @@ #define WINE_SPI_WARN(x) \
         break;
 
     case SPI_SETDESKWALLPAPER:			/*     20 */
-        if (!pvParam || !SetDeskWallPaper( (LPSTR)pvParam )) return FALSE;
-        SYSPARAMS_Save(SPI_SETDESKWALLPAPER_REGKEY, SPI_SETDESKWALLPAPER_VALNAME, pvParam, fWinIni);
-	break;
+    {
+        if (NULL == pvParam || SETWALLPAPER_DEFAULT == pvParam)
+        {
+            static const WCHAR emptyW[1] = {'\0'};
+            if (!SetDeskWallPaper( (LPSTR)pvParam ))
+                return FALSE;
+            SYSPARAMS_Save(SPI_SETDESKWALLPAPER_REGKEY, SPI_SETDESKWALLPAPER_VALNAME, emptyW, fWinIni);
+        }
+        else
+        {
+            if (!SetDeskWallPaper( (LPSTR) pvParam ))
+               return FALSE;
+        }
+        break;
+    }
 	
     case SPI_SETDESKPATTERN:			/*     21 */
 	/* FIXME: the ability to specify a pattern in pvParam
@@ -2389,13 +2401,16 @@ BOOL WINAPI SystemParametersInfoA( UINT 
     case SPI_SETDESKWALLPAPER:			/*     20 */
     case SPI_SETDESKPATTERN:			/*     21 */
     {
-	WCHAR buffer[256];
-	if (pvParam)
+        WCHAR buffer[256];
+        if (pvParam && !((SPI_SETDESKWALLPAPER==uiAction) && (SETWALLPAPER_DEFAULT==pvParam)))
+        {
             if (!MultiByteToWideChar( CP_ACP, 0, (LPSTR)pvParam, -1,
                                       buffer, sizeof(buffer)/sizeof(WCHAR) ))
                 buffer[sizeof(buffer)/sizeof(WCHAR)-1] = 0;
-	ret = SystemParametersInfoW( uiAction, uiParam, pvParam ? buffer : NULL, fuWinIni );
-	break;
+            pvParam = buffer;
+        }
+        ret = SystemParametersInfoW( uiAction, uiParam, pvParam, fuWinIni );
+        break;
     }
 
     case SPI_GETICONTITLELOGFONT:		/*     31 */
-- 
1.4.0




More information about the wine-patches mailing list