This seems very strange
-----Original Message----- From: ros-diffs-bounces@reactos.org [mailto:ros-diffs-bounces@reactos.org] On Behalf Of spetreolle@svn.reactos.org Sent: 30 May 2009 13:23 To: ros-diffs@reactos.org Subject: [ros-diffs] [spetreolle] 41204: ChangeDisplaySettingsA and ChangeDisplaySettingsW should reset dmDriverExtra to 0.
Author: spetreolle Date: Sat May 30 16:23:20 2009 New Revision: 41204
URL: http://svn.reactos.org/svn/reactos?rev=41204&view=rev Log: ChangeDisplaySettingsA and ChangeDisplaySettingsW should reset dmDriverExtra to 0.
Modified: trunk/reactos/dll/win32/user32/misc/display.c
Modified: trunk/reactos/dll/win32/user32/misc/display.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/user32/misc/displ... ============================================================================== --- trunk/reactos/dll/win32/user32/misc/display.c [iso-8859-1] (original) +++ trunk/reactos/dll/win32/user32/misc/display.c [iso-8859-1] Sat May 30 16:23:20 2009 @@ -493,7 +493,10 @@ LPDEVMODEA lpDevMode, DWORD dwflags) { - return ChangeDisplaySettingsExA ( NULL, lpDevMode, NULL, dwflags, 0 ); + LONG Status = ChangeDisplaySettingsExA ( NULL, lpDevMode, NULL, dwflags, 0 ); + if(lpDevMode) + lpDevMode->dmDriverExtra = 0; + return Status; }
@@ -533,5 +536,8 @@ LPDEVMODEW lpDevMode, DWORD dwflags) { - return ChangeDisplaySettingsExW ( NULL, lpDevMode, NULL, dwflags, 0 ); -} + LONG Status = ChangeDisplaySettingsExW ( NULL, lpDevMode, NULL, dwflags, 0 ); + if(lpDevMode) + lpDevMode->dmDriverExtra = 0; + return Status; +}
Yes it is,,,,, I think to be more correct! The check is done prior to calling ChangeDisplaySettingsEx not after....
On Sat, May 30, 2009 at 7:37 AM, Ged gedmurphy@gmail.com wrote:
This seems very strange
LPDEVMODEA lpDevMode, DWORD dwflags) {
- return ChangeDisplaySettingsExA ( NULL, lpDevMode, NULL, dwflags, 0 );
- LONG Status = ChangeDisplaySettingsExA ( NULL, lpDevMode, NULL, dwflags, 0 );
- if(lpDevMode)
- lpDevMode->dmDriverExtra = 0;
- return Status;
} LPDEVMODEW lpDevMode, DWORD dwflags) {
- return ChangeDisplaySettingsExW ( NULL, lpDevMode, NULL, dwflags, 0 );
-}
- LONG Status = ChangeDisplaySettingsExW ( NULL, lpDevMode, NULL, dwflags, 0 );
- if(lpDevMode)
- lpDevMode->dmDriverExtra = 0;
- return Status;
+}
Hi! Wow! Good job Sylvain!! It works! You don't need to clear out the size "dmDriverExtra" after reseting it from ChangeDisplaySettingsEx. It works now since we do not fully support it yet. I did add a test in our win32k code when building the pdevobj, it looks for it from the driver but does nothing.... Sorry for not pointing this out to you earlier.
This is from wine, it's good example:
/*********************************************************************** * ChangeDisplaySettingsW (USER32.@) */ LONG WINAPI ChangeDisplaySettingsW( LPDEVMODEW devmode, DWORD flags ) { if (devmode) devmode->dmDriverExtra = 0;
return ChangeDisplaySettingsExW(NULL,devmode,NULL,flags,NULL); }
You do not need dmDriverExtra, it will reset during the call..... Wine test must rely on this behavior to pass. If the call to ChangeDisplaySettingsEx fails and it must check to see if dmDriverExtra is zeroed. So ATM it must pass the way you have written it. It is zeroed regardless and we do not support it.
Thanks, James