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