Index: En.rc
===================================================================
RCS file: /home/wine/wine/programs/winecfg/En.rc,v
retrieving revision 1.46
diff -u -r1.46 En.rc
--- En.rc	11 Jul 2005 10:24:28 -0000	1.46
+++ En.rc	11 Jul 2005 21:38:50 -0000
@@ -45,6 +45,7 @@
                     IDC_STATIC,15,20,227,30
     CONTROL         "Applications",IDC_APP_LISTVIEW,"SysListView32",WS_BORDER | WS_TABSTOP | LVS_LIST | LVS_SINGLESEL | LVS_SHOWSELALWAYS,
                     15,50,230,150
+    PUSHBUTTON	    "&Configure...",IDC_APP_CONFAPP, 15,184,50,14
     PUSHBUTTON	    "&Add application...",IDC_APP_ADDAPP, 90,204,75,14
     PUSHBUTTON	    "&Remove application",IDC_APP_REMOVEAPP, 170,204,75,14
     LTEXT           "&Windows Version:",IDC_STATIC,17,226,58,8
@@ -58,11 +59,11 @@
     LTEXT	    "Screen color depth: ",IDC_STATIC,8,10,70,30
     COMBOBOX	    IDC_SCREEN_DEPTH,80,8,170,70,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
 
+    GROUPBOX        " Window settings ",IDC_STATIC,8,25,244,120
+
     CONTROL	    "Allow DirectX apps to stop the mouse leaving their window",IDC_DX_MOUSE_GRAB,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,15,35,230,8
     CONTROL	    "Enable desktop double buffering",IDC_DOUBLE_BUFFER,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,15,45,230,8
     
-    GROUPBOX        " Window settings ",IDC_STATIC,8,25,244,120
-
     /* FIXME: the wording of this explanation could be a lot better */
     LTEXT           "You can choose to emulate a windows desktop, where all the windows are confined to one 'virtual screen', or you can have the windows placed on your standard desktop.",
                     IDC_STATIC,15,73,228,28
@@ -73,6 +74,13 @@
 		    
     EDITTEXT        IDC_DESKTOP_WIDTH,64,115,40,12,ES_AUTOHSCROLL | ES_NUMBER | WS_DISABLED
     EDITTEXT        IDC_DESKTOP_HEIGHT,117,115,40,12,ES_AUTOHSCROLL | ES_NUMBER | WS_DISABLED
+
+    GROUPBOX        " Direct3D ",IDC_STATIC,8,140,244,120
+
+    LTEXT	    "Vertex Shader Support: ",IDC_STATIC,15,150,80,30
+    COMBOBOX	    IDC_D3D_VSHADER_MODE,100,148,150,70,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
+
+    CONTROL         "Allow Pixel Shader (if supported by HW)",IDC_D3D_PSHADER_MODE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,15,165,230,10
 END
 
 IDD_DLLCFG DIALOG DISCARDABLE  0, 0, 260, 250
Index: Fr.rc
===================================================================
RCS file: /home/wine/wine/programs/winecfg/Fr.rc,v
retrieving revision 1.5
diff -u -r1.5 Fr.rc
--- Fr.rc	11 Jul 2005 10:24:28 -0000	1.5
+++ Fr.rc	11 Jul 2005 21:38:50 -0000
@@ -43,8 +43,12 @@
                     IDC_STATIC,15,20,227,20
     CONTROL         "Applications",IDC_APP_LISTVIEW,"SysListView32",WS_BORDER | WS_TABSTOP | LVS_LIST | LVS_SINGLESEL | LVS_SHOWSELALWAYS,
                     15,40,230,140
+
+    PUSHBUTTON	    "&Configurer...",IDC_APP_CONFAPP, 15,184,50,14
     PUSHBUTTON	    "&Ajouter une application...",IDC_APP_ADDAPP, 70,184,85,14
-    PUSHBUTTON	    "&Enlever une application",IDC_APP_REMOVEAPP, 160,184,85,14
+    PUSHBUTTON	    "&Enlever une application",IDC_APP_REMOVEAPP,160,184,85,14
+
+
     LTEXT           "Version de &Windows:",IDC_STATIC,17,204,70,8
     COMBOBOX        IDC_WINVER,95,202,151,56,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP    
 END
@@ -56,11 +60,11 @@
     LTEXT	    "Qualité couleur: ",IDC_STATIC,8,10,70,30
     COMBOBOX	    IDC_SCREEN_DEPTH,80,8,170,70,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
 
+    GROUPBOX        " Paramètres des fenêtres ",IDC_STATIC,8,25,244,110
+
     CONTROL	    "Permettre aux applications DirectX d'empêcher la souris de quitter leur fenêtre",IDC_DX_MOUSE_GRAB,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,15,35,230,8
     CONTROL	    "Activer le double buffering du bureau",IDC_DOUBLE_BUFFER,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,15,45,230,8
     
-    GROUPBOX        " Paramètres des fenêtres ",IDC_STATIC,8,25,244,120
-
     /* FIXME: the wording of this explanation could be a lot better */
     LTEXT           "Vous avez le choix entre l'émulation d'un bureau Windows où toutes les fenêtres de vos programme swindows sont confinées ou bien d'afficher les fenêtres de ces programmes sur votre bureau standard.",
                     IDC_STATIC,15,73,228,28
@@ -71,6 +75,14 @@
 		    
     EDITTEXT        IDC_DESKTOP_WIDTH,64,115,40,12,ES_AUTOHSCROLL | ES_NUMBER | WS_DISABLED
     EDITTEXT        IDC_DESKTOP_HEIGHT,117,115,40,12,ES_AUTOHSCROLL | ES_NUMBER | WS_DISABLED
+
+ 
+    GROUPBOX        " Direct3D ",IDC_STATIC,8,140,244,120
+
+    LTEXT	    "Vertex Shader Support: ",IDC_STATIC,15,150,80,30
+    COMBOBOX	    IDC_D3D_VSHADER_MODE,100,148,150,70,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
+
+    CONTROL         "Allow Pixel Shader (if supported by HW)",IDC_D3D_PSHADER_MODE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,15,165,230,10
 END
 
 IDD_DLLCFG DIALOG DISCARDABLE  0, 0, 260, 250
@@ -79,18 +91,40 @@
 BEGIN
     GROUPBOX        " Surclassage de DLLs ",IDC_STATIC,8,4,244,240
     LTEXT           "Il est possible de spécifier si Wine doit utiliser une version native (importée depuis Windows ou installée par l'application) ou bien une version inclue (distribuée avec Wine) de chaque DLL (Dynamic Link Libraries) utilisée par un programme."
-                    ,  IDC_STATIC,15,17,228,32
-    LISTBOX         IDC_DLLS_LIST,15,50,142,187,WS_BORDER | WS_TABSTOP | WS_VSCROLL
-    LTEXT           "Ordre de chargement:",IDC_STATIC,163,50,80,8
-    CONTROL         "&Inclue (Wine)",IDC_RAD_BUILTIN,"Button", BS_AUTORADIOBUTTON | WS_GROUP,163,65,75,10
-    CONTROL         "&Native (Windows)",IDC_RAD_NATIVE,"Button", BS_AUTORADIOBUTTON,163,80,75,10
-    CONTROL         "&Inclue puis native",IDC_RAD_BUILTIN_NATIVE,"Button", BS_AUTORADIOBUTTON,163,95,75,10
-    CONTROL         "Nati&ve puis inclue",IDC_RAD_NATIVE_BUILTIN,"Button", BS_AUTORADIOBUTTON,163,110,75,10
-    CONTROL         "&Désactivé",IDC_RAD_DISABLE,"Button", BS_AUTORADIOBUTTON,163,125,75,10
-    PUSHBUTTON	    "Surcl&assage pour:",IDC_DLLS_ADDDLL, 163,184,82,14
-    COMBOBOX        IDC_DLLCOMBO,163,204,82,14,CBS_DROPDOWN | WS_VSCROLL | WS_TABSTOP | CBS_SORT | CBS_LOWERCASE
-    PUSHBUTTON	    "&Supprimer surclassage",IDC_DLLS_REMOVEDLL,163,224,82,14
+                    , IDC_STATIC,16,16,220,32
+    LTEXT           "&Nouveau suclassage pour:",IDC_STATIC,16,58,100,8
+    COMBOBOX        IDC_DLLCOMBO,16,68,140,14,CBS_DROPDOWN | WS_VSCROLL | WS_TABSTOP | CBS_SORT | CBS_LOWERCASE
+    PUSHBUTTON      "&Ajouter surclassage",IDC_DLLS_ADDDLL, 164,68,82,13,BS_DEFPUSHBUTTON 
+    LTEXT           "Surclassages existants:",IDC_STATIC,16,86,100,8
+    LISTBOX         IDC_DLLS_LIST,16,96,140,140,WS_BORDER | WS_TABSTOP | WS_VSCROLL
+    PUSHBUTTON      "&Editer surclassage",IDC_DLLS_EDITDLL,164,96,82,14
+    PUSHBUTTON      "&Supprimer surclassage",IDC_DLLS_REMOVEDLL,164,114,82,14 
 END
+
+IDD_LOADORDER DIALOG DISCARDABLE 80, 90, 110, 92
+STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU
+CAPTION "Edit Override"
+FONT 8, "MS Shell Dlg"
+BEGIN
+    GROUPBOX        " Load Order ",IDC_STATIC,8,4,94,66
+    CONTROL         "&Builtin (Wine)",IDC_RAD_BUILTIN,"Button", BS_AUTORADIOBUTTON | WS_GROUP,16,14,75,10
+    CONTROL         "&Native (Windows)",IDC_RAD_NATIVE,"Button", BS_AUTORADIOBUTTON,16,24,75,10
+    CONTROL         "Bui&ltin then Native",IDC_RAD_BUILTIN_NATIVE,"Button", BS_AUTORADIOBUTTON,16,34,75,10
+    CONTROL         "Nati&ve then Builtin",IDC_RAD_NATIVE_BUILTIN,"Button", BS_AUTORADIOBUTTON,16,44,75,10
+    CONTROL         "&Disable",IDC_RAD_DISABLE,"Button", BS_AUTORADIOBUTTON,16,54,75,10
+    DEFPUSHBUTTON   "OK",IDOK,8,74,45,14,WS_GROUP
+    PUSHBUTTON      "Cancel",IDCANCEL,57,74,45,14,WS_GROUP
+END
+
+IDD_APP_CONFIG DIALOG DISCARDABLE 80, 90, 110, 92
+STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU
+CAPTION "Application Configuration"
+FONT 8, "MS Shell Dlg"
+BEGIN
+    DEFPUSHBUTTON   "OK",IDOK,8,74,45,14,WS_GROUP
+    PUSHBUTTON      "Cancel",IDCANCEL,57,74,45,14,WS_GROUP
+END
+
 
 IDD_DRIVECFG DIALOG DISCARDABLE  0, 0, 260, 250
 STYLE WS_CHILD | WS_DISABLED
Index: appdefaults.c
===================================================================
RCS file: /home/wine/wine/programs/winecfg/appdefaults.c,v
retrieving revision 1.18
diff -u -r1.18 appdefaults.c
--- appdefaults.c	27 Jun 2005 09:48:06 -0000	1.18
+++ appdefaults.c	11 Jul 2005 21:38:50 -0000
@@ -201,12 +201,14 @@
   {
       WINE_TRACE("current_app is now %s\n", current_app);
       enable(IDC_APP_REMOVEAPP);
+      enable(IDC_APP_CONFAPP);
   }
   else
   {
       WINE_TRACE("current_app=NULL, editing global settings\n");
       /* focus will never be on the button in this callback so it's safe  */
       disable(IDC_APP_REMOVEAPP);
+      disable(IDC_APP_CONFAPP);
   }
 
   /* reset the combo boxes if we changed from/to global/app-specific  */
@@ -288,6 +290,118 @@
     SendMessage(GetParent(dialog), PSM_CHANGED, (WPARAM) dialog, 0);        
 }
 
+#define NUM_PROPERTY_PAGES 4
+
+static void CALLBACK
+PropSheetCallback (HWND hWnd, UINT uMsg, LPARAM lParam)
+{
+    switch (uMsg)
+    {
+	/*
+	 * hWnd = NULL, lParam == dialog resource
+	 */
+    case PSCB_PRECREATE:
+	break;
+
+    case PSCB_INITIALIZED:
+	break;
+
+    default:
+	break;
+    }
+}
+static INT_PTR CALLBACK
+AboutDlgProc (HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
+{
+    switch (uMsg) {
+
+	case WM_NOTIFY:
+	    if (((LPNMHDR)lParam)->code != PSN_SETACTIVE) break;
+	    /* otherwise fall through, we want to refresh the page as well */
+	case WM_INITDIALOG:
+	    break;
+
+	case WM_COMMAND:
+	    break;
+	    
+	default:
+	    break;
+	    
+    }
+    return FALSE;
+}
+
+static void on_conf_app_click(HWND dialog)
+{
+  INT_PTR ret;
+  HWND listview = GetDlgItem(dialog, IDC_APP_LISTVIEW);
+  int selection = get_listview_selection(listview);
+
+  PROPSHEETPAGE psp[NUM_PROPERTY_PAGES];
+  PROPSHEETHEADER psh;
+  int pg = 0; /* start with page 0 */
+
+    /*
+     * Fill out the (Libraries) PROPSHEETPAGE data structure 
+     * for the property sheet
+     */
+    psp[pg].dwSize = sizeof (PROPSHEETPAGE);
+    psp[pg].dwFlags = PSP_USETITLE;
+    psp[pg].hInstance = NULL;
+    psp[pg].u.pszTemplate = MAKEINTRESOURCE (IDD_DLLCFG);
+    psp[pg].u2.pszIcon = NULL;
+    psp[pg].pfnDlgProc = LibrariesDlgProc;
+    psp[pg].pszTitle = "Libraries";
+    psp[pg].lParam = 0;
+    pg++;
+    
+    /*
+     * Fill out the (X11Drv) PROPSHEETPAGE data structure 
+     * for the property sheet
+     */
+    psp[pg].dwSize = sizeof (PROPSHEETPAGE);
+    psp[pg].dwFlags = PSP_USETITLE;
+    psp[pg].hInstance = NULL;
+    psp[pg].u.pszTemplate = MAKEINTRESOURCE (IDD_GRAPHCFG);
+    psp[pg].u2.pszIcon = NULL;
+    psp[pg].pfnDlgProc = GraphDlgProc;
+    psp[pg].pszTitle = "Graphics";
+    psp[pg].lParam = 0;
+    pg++;
+
+    psp[pg].dwSize = sizeof (PROPSHEETPAGE);
+    psp[pg].dwFlags = PSP_USETITLE;
+    psp[pg].hInstance = NULL;
+    psp[pg].u.pszTemplate = MAKEINTRESOURCE (IDD_AUDIOCFG);
+    psp[pg].u2.pszIcon = NULL;
+    psp[pg].pfnDlgProc = AudioDlgProc;
+    psp[pg].pszTitle = "Audio";
+    psp[pg].lParam = 0;
+    pg++;
+
+    /*
+     * Fill out the PROPSHEETHEADER
+     */
+    psh.dwSize = sizeof (PROPSHEETHEADER);
+    psh.dwFlags = PSH_PROPSHEETPAGE | PSH_USEICONID | PSH_USECALLBACK;
+    psh.hwndParent = dialog;
+    psh.hInstance = NULL;
+    psh.u.pszIcon = NULL;
+    psh.pszCaption = "Specific Application Configuration";
+    psh.nPages = pg;
+    psh.u3.ppsp = (LPCPROPSHEETPAGE) & psp;
+    psh.pfnCallback = (PFNPROPSHEETCALLBACK) PropSheetCallback;
+    psh.u2.nStartPage = 0;
+
+    /*
+     * Display the modal property sheet
+     */
+    /*return-*/ 
+    PropertySheet (&psh);
+
+    /*ret = DialogBoxParam(0, MAKEINTRESOURCE(IDD_APP_CONFIG), dialog, NULL, 0);*/
+}
+
 static void on_winver_change(HWND dialog)
 {
     int selection = SendDlgItemMessage(dialog, IDC_WINVER, CB_GETCURSEL, 0, 0);
@@ -339,21 +453,14 @@
       switch(HIWORD(wParam))
       {
         case CBN_SELCHANGE:
-          switch(LOWORD(wParam))
-          {
-            case IDC_WINVER:
-              on_winver_change(hDlg);
-              break;
+          switch(LOWORD(wParam)) {
+            case IDC_WINVER: on_winver_change(hDlg); break;
           }
         case BN_CLICKED:
-          switch(LOWORD(wParam))
-          {
-            case IDC_APP_ADDAPP:
-              on_add_app_click(hDlg);
-              break;
-            case IDC_APP_REMOVEAPP:
-              on_remove_app_click(hDlg);
-              break;
+          switch(LOWORD(wParam)) {
+            case IDC_APP_ADDAPP: on_add_app_click(hDlg); break;
+            case IDC_APP_REMOVEAPP: on_remove_app_click(hDlg); break;
+            case IDC_APP_CONFAPP: on_conf_app_click(hDlg); break;
           }
           break;
       }
Index: resource.h
===================================================================
RCS file: /home/wine/wine/programs/winecfg/resource.h,v
retrieving revision 1.27
diff -u -r1.27 resource.h
--- resource.h	11 Jul 2005 10:24:28 -0000	1.27
+++ resource.h	11 Jul 2005 21:38:51 -0000
@@ -5,6 +5,7 @@
  * Copyright 2003 Dimitrie O. Paun
  * Copyright 2003 Mark Westcott
  * Copyright 2004 Mike Hearn
+ * Copyright 2005 Raphael Junqueira
  *
  * This library is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Lesser General Public
@@ -116,11 +117,15 @@
 #define IDC_DX_MOUSE_GRAB               1102
 #define IDC_USE_TAKE_FOCUS              1103
 #define IDC_DOUBLE_BUFFER               1104
+#define IDC_D3D_VSHADER_MODE            1105
+#define IDC_D3D_PSHADER_MODE            1106
 
 /* applications tab */
 #define IDC_APP_LISTVIEW                1200
 #define IDC_APP_ADDAPP                  1201
 #define IDC_APP_REMOVEAPP               1202
+#define IDC_APP_CONFAPP                 1203
+#define IDD_APP_CONFIG                  1205
 
 /* audio tab */
 #define IDC_AUDIO_AUTODETECT            1300
Index: x11drvdlg.c
===================================================================
RCS file: /home/wine/wine/programs/winecfg/x11drvdlg.c,v
retrieving revision 1.23
diff -u -r1.23 x11drvdlg.c
--- x11drvdlg.c	23 Jun 2005 11:42:54 -0000	1.23
+++ x11drvdlg.c	11 Jul 2005 21:38:52 -0000
@@ -3,6 +3,7 @@
  *
  * Copyright 2003 Mark Westcott
  * Copyright 2003-2004 Mike Hearn
+ * Copyright 2005 Raphael Junqueira
  *
  * This library is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Lesser General Public
@@ -36,6 +37,15 @@
 
 #define RES_MAXLEN 5 /* the maximum number of characters in a screen dimension. 5 digits should be plenty, what kind of crazy person runs their screen >10,000 pixels across? */
 
+
+static const char* D3D_VS_Modes[] = {
+  "hardware",
+  "none",
+  "emulation",
+  NULL
+};
+
+
 int updating_ui;
 
 static void update_gui_for_desktop_mode(HWND dialog) {
@@ -87,6 +97,7 @@
 
 static void init_dialog (HWND dialog)
 {
+    unsigned int it;
     char* buf;
 
     update_gui_for_desktop_mode(dialog);
@@ -128,7 +139,30 @@
     else
 	CheckDlgButton(dialog, IDC_DOUBLE_BUFFER, BST_UNCHECKED);
     HeapFree(GetProcessHeap(), 0, buf);
-    
+
+    SendDlgItemMessage(dialog, IDC_D3D_VSHADER_MODE, CB_RESETCONTENT, 0, 0);
+    for (it = 0; NULL != D3D_VS_Modes[it]; ++it) {
+      SendDlgItemMessage(dialog, IDC_D3D_VSHADER_MODE, CB_ADDSTRING, 0, (LPARAM) D3D_VS_Modes[it]);
+    }  
+    buf = get_reg_key(config_key, keypath("Direct3D"), "VertexShaderMode", "hardware"); 
+    for (it = 0; NULL != D3D_VS_Modes[it]; ++it) {
+      if (strcmp(buf, D3D_VS_Modes[it]) == 0) {
+	SendDlgItemMessage(dialog, IDC_D3D_VSHADER_MODE, CB_SETCURSEL, it, 0);
+	break ;
+      }
+    }
+    if (NULL == D3D_VS_Modes[it]) {
+      WINE_ERR("Invalid Direct3D VertexShader Mode read from registry (%s)\n", buf);
+    }
+    HeapFree(GetProcessHeap(), 0, buf);
+
+    buf = get_reg_key(config_key, keypath("Direct3D"), "PixelShaderMode", "enabled");
+    if (!strcmp(buf, "enabled"))
+      CheckDlgButton(dialog, IDC_D3D_PSHADER_MODE, BST_CHECKED);
+    else
+      CheckDlgButton(dialog, IDC_D3D_PSHADER_MODE, BST_UNCHECKED);
+    HeapFree(GetProcessHeap(), 0, buf);
+
     updating_ui = FALSE;
 }
 
@@ -200,6 +234,18 @@
         set_reg_key(config_key, keypath("X11 Driver"), "DesktopDoubleBuffered", "N");
 }
 
+static void on_d3d_vshader_mode_changed(HWND dialog) {
+  int selected_mode = SendDlgItemMessage(dialog, IDC_D3D_VSHADER_MODE, CB_GETCURSEL, 0, 0);  
+  set_reg_key(config_key, keypath("Direct3D"), "VertexShaderMode", D3D_VS_Modes[selected_mode]); 
+}
+
+static void on_d3d_pshader_mode_clicked(HWND dialog) {
+    if (IsDlgButtonChecked(dialog, IDC_D3D_PSHADER_MODE) == BST_CHECKED)
+        set_reg_key(config_key, keypath("Direct3D"), "PixelShaderMode", "enabled");
+    else
+        set_reg_key(config_key, keypath("Direct3D"), "PixelShaderMode", "disabled");
+}
+
 INT_PTR CALLBACK
 GraphDlgProc (HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
 {
@@ -227,12 +273,16 @@
 			case IDC_ENABLE_DESKTOP: on_enable_desktop_clicked(hDlg); break;
 			case IDC_DX_MOUSE_GRAB:  on_dx_mouse_grab_clicked(hDlg); break;
                         case IDC_DOUBLE_BUFFER:  on_double_buffer_clicked(hDlg); break;
+		        case IDC_D3D_PSHADER_MODE: on_d3d_pshader_mode_clicked(hDlg); break;
 		    }
 		    break;
 		}
 		case CBN_SELCHANGE: {
 		    SendMessage(GetParent(hDlg), PSM_CHANGED, 0, 0);
-		    if (LOWORD(wParam) == IDC_SCREEN_DEPTH) on_screen_depth_changed(hDlg);
+		    switch (LOWORD(wParam)) {
+		    case IDC_SCREEN_DEPTH: on_screen_depth_changed(hDlg); break;
+		    case IDC_D3D_VSHADER_MODE: on_d3d_vshader_mode_changed(hDlg); break;
+		    }
 		    break;
 		}
 		    
