Alexandre Julliard : winecfg: Allow to configure the desktop separately for each application.

Alexandre Julliard julliard at winehq.org
Fri Apr 25 08:11:14 CDT 2008


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

Author: Alexandre Julliard <julliard at winehq.org>
Date:   Fri Apr 25 14:36:45 2008 +0200

winecfg: Allow to configure the desktop separately for each application.

---

 programs/winecfg/x11drvdlg.c |  119 ++++++++++++++++++++++-------------------
 1 files changed, 64 insertions(+), 55 deletions(-)

diff --git a/programs/winecfg/x11drvdlg.c b/programs/winecfg/x11drvdlg.c
index c0ec058..ce54924 100644
--- a/programs/winecfg/x11drvdlg.c
+++ b/programs/winecfg/x11drvdlg.c
@@ -28,6 +28,7 @@
 #include <stdio.h>
 
 #include <windows.h>
+#include <wine/unicode.h>
 #include <wine/debug.h>
 
 #include "resource.h"
@@ -45,6 +46,15 @@ WINE_DEFAULT_DEBUG_CHANNEL(winecfg);
 static const WCHAR logpixels_reg[] = {'S','y','s','t','e','m','\\','C','u','r','r','e','n','t','C','o','n','t','r','o','l','S','e','t','\\','H','a','r','d','w','a','r','e',' ','P','r','o','f','i','l','e','s','\\','C','u','r','r','e','n','t','\\','S','o','f','t','w','a','r','e','\\','F','o','n','t','s',0};
 static const WCHAR logpixels[] = {'L','o','g','P','i','x','e','l','s',0};
 
+static const WCHAR desktopW[] = {'D','e','s','k','t','o','p',0};
+static const WCHAR defaultW[] = {'D','e','f','a','u','l','t',0};
+static const WCHAR explorerW[] = {'E','x','p','l','o','r','e','r',0};
+static const WCHAR explorer_desktopsW[] = {'E','x','p','l','o','r','e','r','\\',
+                                           'D','e','s','k','t','o','p','s',0};
+static const WCHAR x11_driverW[] = {'X','1','1',' ','D','r','i','v','e','r',0};
+static const WCHAR default_resW[] = {'8','0','0','x','6','0','0',0};
+
+
 static struct SHADERMODE
 {
   UINT displayStrID;
@@ -58,64 +68,55 @@ static struct SHADERMODE
 
 int updating_ui;
 
-static void update_gui_for_desktop_mode(HWND dialog) {
-    int desktopenabled = FALSE;
+/* convert the x11 desktop key to the new explorer config */
+static void convert_x11_desktop_key(void)
+{
+    char *buf;
+
+    if (!(buf = get_reg_key(config_key, "X11 Driver", "Desktop", NULL))) return;
+    set_reg_key(config_key, "Explorer\\Desktops", "Default", buf);
+    set_reg_key(config_key, "Explorer", "Desktop", "Default");
+    set_reg_key(config_key, "X11 Driver", "Desktop", NULL);
+    HeapFree(GetProcessHeap(), 0, buf);
+}
+
+static void update_gui_for_desktop_mode(HWND dialog)
+{
+    WCHAR *buf, *bufindex;
+    const WCHAR *desktop_name = current_app ? current_app : defaultW;
 
     WINE_TRACE("\n");
     updating_ui = TRUE;
 
-    if (current_app)
+    buf = get_reg_keyW(config_key, explorer_desktopsW, desktop_name, NULL);
+    if (buf && (bufindex = strchrW(buf, 'x')))
     {
-        disable(IDC_ENABLE_DESKTOP);
-        disable(IDC_DESKTOP_WIDTH);
-        disable(IDC_DESKTOP_HEIGHT);
-        disable(IDC_DESKTOP_SIZE);
-        disable(IDC_DESKTOP_BY);
-        return;
+        *bufindex = 0;
+        ++bufindex;
+        SetWindowTextW(GetDlgItem(dialog, IDC_DESKTOP_WIDTH), buf);
+        SetWindowTextW(GetDlgItem(dialog, IDC_DESKTOP_HEIGHT), bufindex);
+    } else {
+        SetWindowText(GetDlgItem(dialog, IDC_DESKTOP_WIDTH), "800");
+        SetWindowText(GetDlgItem(dialog, IDC_DESKTOP_HEIGHT), "600");
     }
-    enable(IDC_ENABLE_DESKTOP);
+    HeapFree(GetProcessHeap(), 0, buf);
 
     /* do we have desktop mode enabled? */
-    if (reg_key_exists(config_key, keypath("X11 Driver"), "Desktop"))
+    if (reg_key_exists(config_key, keypath("Explorer"), "Desktop"))
     {
-        char* buf, *bufindex;
 	CheckDlgButton(dialog, IDC_ENABLE_DESKTOP, BST_CHECKED);
-
-        buf = get_reg_key(config_key, keypath("X11 Driver"), "Desktop", "800x600");
-        /* note: this test must match the one in x11drv */
-        if( buf[0] != 'n' &&  buf[0] != 'N' &&  buf[0] != 'F' &&  buf[0] != 'f'
-                &&  buf[0] != '0') {
-            desktopenabled = TRUE;
-            enable(IDC_DESKTOP_WIDTH);
-            enable(IDC_DESKTOP_HEIGHT);
-            enable(IDC_DESKTOP_SIZE);
-            enable(IDC_DESKTOP_BY);
-
-            bufindex = strchr(buf, 'x');
-            if (bufindex) {
-                *bufindex = 0;
-                ++bufindex;
-                SetWindowText(GetDlgItem(dialog, IDC_DESKTOP_WIDTH), buf);
-                SetWindowText(GetDlgItem(dialog, IDC_DESKTOP_HEIGHT), bufindex);
-            } else {
-                WINE_TRACE("Desktop registry entry is malformed\n");
-                SetWindowText(GetDlgItem(dialog, IDC_DESKTOP_WIDTH), "800");
-                SetWindowText(GetDlgItem(dialog, IDC_DESKTOP_HEIGHT), "600");
-            }
-        }
-        HeapFree(GetProcessHeap(), 0, buf);
+        enable(IDC_DESKTOP_WIDTH);
+        enable(IDC_DESKTOP_HEIGHT);
+        enable(IDC_DESKTOP_SIZE);
+        enable(IDC_DESKTOP_BY);
     }
-    if (!desktopenabled)
+    else
     {
 	CheckDlgButton(dialog, IDC_ENABLE_DESKTOP, BST_UNCHECKED);
-	
 	disable(IDC_DESKTOP_WIDTH);
 	disable(IDC_DESKTOP_HEIGHT);
 	disable(IDC_DESKTOP_SIZE);
 	disable(IDC_DESKTOP_BY);
-
-	SetWindowText(GetDlgItem(dialog, IDC_DESKTOP_WIDTH), "");
-	SetWindowText(GetDlgItem(dialog, IDC_DESKTOP_HEIGHT), "");
     }
 
     updating_ui = FALSE;
@@ -126,6 +127,7 @@ static void init_dialog(HWND dialog)
     unsigned int it;
     char* buf;
 
+    convert_x11_desktop_key();
     update_gui_for_desktop_mode(dialog);
 
     updating_ui = TRUE;
@@ -182,30 +184,37 @@ static void init_dialog(HWND dialog)
     updating_ui = FALSE;
 }
 
-static void set_from_desktop_edits(HWND dialog) {
-    char *width, *height, *new;
+static void set_from_desktop_edits(HWND dialog)
+{
+    static const WCHAR x[] = {'x',0};
+    static const WCHAR def_width[]  = {'8','0','0',0};
+    static const WCHAR def_height[] = {'6','0','0',0};
+    WCHAR *width, *height, *new;
+    const WCHAR *desktop_name = current_app ? current_app : defaultW;
 
     if (updating_ui) return;
     
     WINE_TRACE("\n");
 
-    width = get_text(dialog, IDC_DESKTOP_WIDTH);
-    height = get_text(dialog, IDC_DESKTOP_HEIGHT);
+    width = get_textW(dialog, IDC_DESKTOP_WIDTH);
+    height = get_textW(dialog, IDC_DESKTOP_HEIGHT);
 
-    if (width == NULL || strcmp(width, "") == 0) {
+    if (!width || !width[0]) {
         HeapFree(GetProcessHeap(), 0, width);
-        width = strdupA("800");
+        width = strdupW(def_width);
     }
-    
-    if (height == NULL || strcmp(height, "") == 0) {
+    if (!height || !height[0]) {
         HeapFree(GetProcessHeap(), 0, height);
-        height = strdupA("600");
+        height = strdupW(def_height);
     }
 
-    new = HeapAlloc(GetProcessHeap(), 0, strlen(width) + strlen(height) + 2 /* x + terminator */);
-    sprintf(new, "%sx%s", width, height);
-    set_reg_key(config_key, keypath("X11 Driver"), "Desktop", new);
-    
+    new = HeapAlloc(GetProcessHeap(), 0, (strlenW(width) + strlenW(height) + 2) * sizeof(WCHAR));
+    strcpyW( new, width );
+    strcatW( new, x );
+    strcatW( new, height );
+    set_reg_keyW(config_key, explorer_desktopsW, desktop_name, new);
+    set_reg_keyW(config_key, keypathW(explorerW), desktopW, desktop_name);
+
     HeapFree(GetProcessHeap(), 0, width);
     HeapFree(GetProcessHeap(), 0, height);
     HeapFree(GetProcessHeap(), 0, new);
@@ -217,7 +226,7 @@ static void on_enable_desktop_clicked(HWND dialog) {
     if (IsDlgButtonChecked(dialog, IDC_ENABLE_DESKTOP) == BST_CHECKED) {
         set_from_desktop_edits(dialog);
     } else {
-        set_reg_key(config_key, keypath("X11 Driver"), "Desktop", NULL);
+        set_reg_key(config_key, keypath("Explorer"), "Desktop", NULL);
     }
     
     update_gui_for_desktop_mode(dialog);




More information about the wine-cvs mailing list