Alexandre Julliard : user32: Add parameter entry objects for the desktop wallpaper and pattern.

Alexandre Julliard julliard at winehq.org
Thu Nov 15 15:26:31 CST 2012


Module: wine
Branch: master
Commit: 4d653b77ecda8b0d1ebcd30c7c7c844f0449a21c
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=4d653b77ecda8b0d1ebcd30c7c7c844f0449a21c

Author: Alexandre Julliard <julliard at 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;




More information about the wine-cvs mailing list