Module: wine Branch: master Commit: 4d653b77ecda8b0d1ebcd30c7c7c844f0449a21c URL: http://source.winehq.org/git/wine.git/?a=commit;h=4d653b77ecda8b0d1ebcd30c7c...
Author: Alexandre Julliard julliard@winehq.org Date: Thu Nov 15 15:54:52 2012 +0100
user32: Add parameter entry objects for the desktop wallpaper and pattern.
---
dlls/user32/sysparams.c | 105 +++++++++++++++++++++++++++------------------- 1 files changed, 62 insertions(+), 43 deletions(-)
diff --git a/dlls/user32/sysparams.c b/dlls/user32/sysparams.c index 437d9e2..465ab8f 100644 --- a/dlls/user32/sysparams.c +++ b/dlls/user32/sysparams.c @@ -170,6 +170,8 @@ static const WCHAR SPI_SETSCREENREADER_REGKEY[]= {'C','o','n','t',' static const WCHAR SPI_SETSCREENREADER_VALNAME[]= {'O','n',0}; #define SPI_SETDESKWALLPAPER_REGKEY DESKTOP_REGKEY static const WCHAR SPI_SETDESKWALLPAPER_VALNAME[]= {'W','a','l','l','p','a','p','e','r',0}; +#define SPI_SETDESKPATTERN_REGKEY DESKTOP_REGKEY +static const WCHAR SPI_SETDESKPATTERN_VALNAME[]= {'P','a','t','t','e','r','n',0}; #define SPI_SETFONTSMOOTHING_REGKEY DESKTOP_REGKEY static const WCHAR SPI_SETFONTSMOOTHING_VALNAME[]= {'F','o','n','t','S','m','o','o','t','h','i','n','g',0}; #define SPI_SETDRAGWIDTH_REGKEY DESKTOP_REGKEY @@ -345,6 +347,12 @@ struct sysparam_binary_entry size_t size; };
+struct sysparam_path_entry +{ + struct sysparam_entry hdr; + WCHAR path[MAX_PATH]; +}; + struct sysparam_font_entry { struct sysparam_entry hdr; @@ -367,6 +375,7 @@ union sysparam_all_entry struct sysparam_bool_entry bool; struct sysparam_dword_entry dword; struct sysparam_binary_entry bin; + struct sysparam_path_entry path; struct sysparam_font_entry font; struct sysparam_pref_entry pref; }; @@ -1045,6 +1054,40 @@ static BOOL set_font_entry( union sysparam_all_entry *entry, UINT int_param, voi return TRUE; }
+/* get a path parameter in the registry */ +static BOOL get_path_entry( union sysparam_all_entry *entry, UINT int_param, void *ptr_param ) +{ + if (!ptr_param) return FALSE; + + if (!entry->hdr.loaded) + { + WCHAR buffer[MAX_PATH]; + + if (load_entry( &entry->hdr, buffer, sizeof(buffer) )) + lstrcpynW( entry->path.path, buffer, MAX_PATH ); + HeapFree( GetProcessHeap(), 0, buffer ); + } + lstrcpynW( ptr_param, entry->path.path, int_param ); + return TRUE; +} + +/* set a path parameter in the registry */ +static BOOL set_path_entry( union sysparam_all_entry *entry, UINT int_param, void *ptr_param, UINT flags ) +{ + WCHAR buffer[MAX_PATH]; + BOOL ret; + + lstrcpynW( buffer, ptr_param, MAX_PATH ); + ret = save_entry_string( &entry->hdr, buffer, flags ); + if (ret) + { + strcpyW( entry->path.path, buffer ); + entry->hdr.loaded = TRUE; + } + HeapFree( GetProcessHeap(), 0, buffer ); + return ret; +} + /* get a binary parameter in the registry */ static BOOL get_binary_entry( union sysparam_all_entry *entry, UINT int_param, void *ptr_param ) { @@ -1158,6 +1201,10 @@ static BOOL set_entry( void *ptr, UINT int_param, void *ptr_param, UINT flags ) struct sysparam_binary_entry entry_##name = { { get_binary_entry, set_binary_entry, \ SPI_SET ## name ##_REGKEY, SPI_SET ## name ##_VALNAME }, &(data), sizeof(data) }
+#define PATH_ENTRY(name) \ + struct sysparam_binary_entry entry_##name = { { get_path_entry, set_path_entry, \ + SPI_SET ## name ##_REGKEY, SPI_SET ## name ##_VALNAME } } + #define FONT_ENTRY(name,weight) \ struct sysparam_font_entry entry_##name = { { get_font_entry, set_font_entry, \ SPI_SET ## name ##_REGKEY, SPI_SET ## name ##_VALNAME }, (weight) } @@ -1234,6 +1281,9 @@ static DWORD_ENTRY( FOREGROUNDFLASHCOUNT, 3 ); static DWORD_ENTRY( FOREGROUNDLOCKTIMEOUT, 0 ); static DWORD_ENTRY( MOUSECLICKLOCKTIME, 1200 );
+static PATH_ENTRY( DESKPATTERN ); +static PATH_ENTRY( DESKWALLPAPER ); + static BYTE user_prefs[8] = { 0x30, 0x00, 0x00, 0x80, 0x10, 0x00, 0x00, 0x00 }; static BINARY_ENTRY( USERPREFERENCESMASK, user_prefs );
@@ -1388,26 +1438,16 @@ BOOL WINAPI SystemParametersInfoW( UINT uiAction, UINT uiParam, case SPI_SETGRIDGRANULARITY: ret = set_entry( &entry_GRIDGRANULARITY, uiParam, pvParam, fWinIni ); break; - - case SPI_SETDESKWALLPAPER: /* 20 */ - if (!pvParam || !SetDeskWallPaper( pvParam )) return FALSE; - SYSPARAMS_Save(SPI_SETDESKWALLPAPER_REGKEY, SPI_SETDESKWALLPAPER_VALNAME, pvParam, fWinIni); - break; - - case SPI_SETDESKPATTERN: /* 21 */ - /* FIXME: the ability to specify a pattern in pvParam - doesn't seem to be documented for Win32 */ - if ((INT16)uiParam == -1) - { + case SPI_SETDESKWALLPAPER: + ret = set_entry( &entry_DESKWALLPAPER, uiParam, pvParam, fWinIni ); + break; + case SPI_SETDESKPATTERN: + if (!pvParam || set_entry( &entry_DESKPATTERN, uiParam, pvParam, fWinIni )) + { WCHAR buf[256]; - GetProfileStringW( Desktop, Pattern, - defPattern, - buf, sizeof(buf)/sizeof(WCHAR) ); - ret = DESKTOP_SetPattern( buf ); - } else - ret = DESKTOP_SetPattern( pvParam ); - break; - + ret = get_entry( &entry_DESKPATTERN, 256, buf ) && DESKTOP_SetPattern( buf ); + } + break; case SPI_GETKEYBOARDDELAY: ret = get_entry( &entry_KEYBOARDDELAY, uiParam, pvParam ); break; @@ -1911,30 +1951,9 @@ BOOL WINAPI SystemParametersInfoW( UINT uiAction, UINT uiParam, case SPI_GETSCREENSAVERRUNNING: ret = get_entry( &entry_SCREENSAVERRUNNING, uiParam, pvParam ); break; - - case SPI_GETDESKWALLPAPER: /* 115 _WIN32_WINNT >= 0x500 || _WIN32_WINDOW > 0x400 */ - { - WCHAR buf[MAX_PATH]; - - if (!pvParam) return FALSE; - - if (uiParam > MAX_PATH) - { - uiParam = MAX_PATH; - } - - if (SYSPARAMS_Load(SPI_SETDESKWALLPAPER_REGKEY, SPI_SETDESKWALLPAPER_VALNAME, buf, sizeof(buf))) - { - lstrcpynW(pvParam, buf, uiParam); - } - else - { - /* Return an empty string */ - memset(pvParam, 0, uiParam); - } - - break; - } + case SPI_GETDESKWALLPAPER: + ret = get_entry( &entry_DESKWALLPAPER, uiParam, pvParam ); + break; case SPI_GETACTIVEWINDOWTRACKING: ret = get_entry( &entry_ACTIVEWINDOWTRACKING, uiParam, pvParam ); break;