Alexandre Julliard : explorer: Allow specifying a default size for each desktop using the HKCU\Software\Wine\Explorer\Desktops registry key .

Alexandre Julliard julliard at winehq.org
Thu Apr 24 15:56:33 CDT 2008


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

Author: Alexandre Julliard <julliard at winehq.org>
Date:   Thu Apr 24 16:24:46 2008 +0200

explorer: Allow specifying a default size for each desktop using the HKCU\Software\Wine\Explorer\Desktops registry key.

---

 programs/explorer/desktop.c |   67 ++++++++++++++++++++++++++++---------------
 1 files changed, 44 insertions(+), 23 deletions(-)

diff --git a/programs/explorer/desktop.c b/programs/explorer/desktop.c
index e19b4c4..93ea000 100644
--- a/programs/explorer/desktop.c
+++ b/programs/explorer/desktop.c
@@ -111,24 +111,31 @@ static BOOL parse_size( const WCHAR *size, unsigned int *width, unsigned int *he
     return !*end;
 }
 
-/* retrieve the default desktop size from the X11 driver config */
-/* FIXME: this is for backwards compatibility, should probably be changed */
-static BOOL get_default_desktop_size( unsigned int *width, unsigned int *height )
+/* retrieve the default desktop size from the registry */
+static BOOL get_default_desktop_size( const WCHAR *name, unsigned int *width, unsigned int *height )
 {
-    static const WCHAR keyW[] = {'S','o','f','t','w','a','r','e','\\','W','i','n','e','\\',
-                                 'X','1','1',' ','D','r','i','v','e','r',0};
-    static const WCHAR desktopW[] = {'D','e','s','k','t','o','p',0};
+    static const WCHAR desktop_keyW[] = {'S','o','f','t','w','a','r','e','\\','W','i','n','e','\\',
+                                         'E','x','p','l','o','r','e','r','\\',
+                                         'D','e','s','k','t','o','p','s',0};
     HKEY hkey;
     WCHAR buffer[64];
     DWORD size = sizeof(buffer);
-    BOOL ret = FALSE;
-
-    /* @@ Wine registry key: HKCU\Software\Wine\X11 Driver */
-    if (RegOpenKeyW( HKEY_CURRENT_USER, keyW, &hkey )) return FALSE;
-    if (!RegQueryValueExW( hkey, desktopW, 0, NULL, (LPBYTE)buffer, &size ))
-        ret = parse_size( buffer, width, height );
-    RegCloseKey( hkey );
-    return ret;
+    BOOL found = FALSE;
+
+    *width = 800;
+    *height = 600;
+
+    /* @@ Wine registry key: HKCU\Software\Wine\Explorer\Desktops */
+    if (!RegOpenKeyW( HKEY_CURRENT_USER, desktop_keyW, &hkey ))
+    {
+        if (!RegQueryValueExW( hkey, name, 0, NULL, (LPBYTE)buffer, &size ))
+        {
+            found = TRUE;
+            if (!parse_size( buffer, width, height )) *width = *height = 0;
+        }
+        RegCloseKey( hkey );
+    }
+    return found;
 }
 
 static void initialize_display_settings( HWND desktop )
@@ -218,21 +225,35 @@ void manage_desktop( WCHAR *arg )
     if (*arg == '=' || *arg == ',')
     {
         arg++;
+        name = arg;
         if ((p = strchrW( arg, ',' ))) *p++ = 0;
         if (!p || !parse_size( p, &width, &height ))
-        {
-            width = 800;
-            height = 600;
-        }
-        name = arg;
-        xwin = create_desktop( name, width, height );
+            get_default_desktop_size( name, &width, &height );
     }
-    else if (get_default_desktop_size( &width, &height ))
+    else  /* check for the X11 driver key for backwards compatibility (to be removed) */
     {
-        name = defaultW;
-        xwin = create_desktop( name, width, height );
+        static const WCHAR desktopW[] = {'D','e','s','k','t','o','p',0};
+        static const WCHAR x11_keyW[] = {'S','o','f','t','w','a','r','e','\\','W','i','n','e','\\',
+                                         'X','1','1',' ','D','r','i','v','e','r',0};
+        HKEY hkey;
+        WCHAR buffer[64];
+        DWORD size = sizeof(buffer);
+
+        width = height = 0;
+        /* @@ Wine registry key: HKCU\Software\Wine\X11 Driver */
+        if (!RegOpenKeyW( HKEY_CURRENT_USER, x11_keyW, &hkey ))
+        {
+            if (!RegQueryValueExW( hkey, desktopW, 0, NULL, (LPBYTE)buffer, &size ))
+            {
+                name = defaultW;
+                if (!parse_size( buffer, &width, &height )) width = height = 0;
+            }
+            RegCloseKey( hkey );
+        }
     }
 
+    if (name && width && height) xwin = create_desktop( name, width, height );
+
     if (!xwin) using_root = TRUE; /* using the root window */
 
     /* create the desktop window */




More information about the wine-cvs mailing list