On Monday 11 July 2005 23:25, gslink wrote: > Mike Hearn wrote: > >> Eventually nobody should have to use winecfg for anything. Let's > > spend our > > >> time fixing the bugs and increasing automation rather than arguing > >> about the best way to represent a list of hacks in the UI :) > > I think the reality is that winecfg is going to hang round for a while. > I only see patches adding to its functionality, and nobody is removing > config options. Having a configurationless Wine is a lofty goal, but > not one that's achieveable in the short term. > > It would be nice to spend a little bit of time to fix up the usability > issues that Felix has pointed out. Opening a new window for app > specific overrides might be hard, but it would make alot more sense. > > Mike > >
Can you try this patch (a stupid hack for now) and say me want do you think about ? (it try to provide a better way to configure app specific options) Regards, Raphael
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<in 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; }
pgpjtDZVenSUf.pgp
Description: PGP signature