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;
 		}
 		    
