Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
W
wine-winehq
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
wine
wine-winehq
Commits
6d504174
Commit
6d504174
authored
Sep 16, 2022
by
Rémi Bernon
Committed by
Alexandre Julliard
Sep 23, 2022
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
user32/tests: Cleanup sysparams WM_DISPLAYCHANGE tests.
parent
37748118
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
67 additions
and
59 deletions
+67
-59
sysparams.c
dlls/user32/tests/sysparams.c
+67
-59
No files found.
dlls/user32/tests/sysparams.c
View file @
6d504174
...
...
@@ -30,7 +30,6 @@
#include "winuser.h"
#include "winnls.h"
static
LONG
(
WINAPI
*
pChangeDisplaySettingsExA
)(
LPCSTR
,
LPDEVMODEA
,
HWND
,
DWORD
,
LPVOID
);
static
BOOL
(
WINAPI
*
pIsProcessDPIAware
)(
void
);
static
BOOL
(
WINAPI
*
pSetProcessDPIAware
)(
void
);
static
BOOL
(
WINAPI
*
pSetProcessDpiAwarenessContext
)(
DPI_AWARENESS_CONTEXT
);
...
...
@@ -2447,78 +2446,88 @@ static void test_SPI_SETWALLPAPER( void ) /* 115 */
static
void
test_WM_DISPLAYCHANGE
(
void
)
{
DEVMODEA
mode
,
startmode
;
int
start_bpp
,
last_set_bpp
=
0
;
int
test_bpps
[]
=
{
8
,
16
,
24
,
32
},
i
;
LONG
change_ret
;
DWORD
wait_ret
;
if
(
!
pChangeDisplaySettingsExA
)
{
win_skip
(
"ChangeDisplaySettingsExA is not available
\n
"
);
return
;
}
UINT
test_bpps
[]
=
{
8
,
16
,
24
},
default_bpp
,
i
;
DEVMODEW
settings
;
DWORD
res
;
BOOL
ret
;
displaychange_test_active
=
TRUE
;
displaychange_sem
=
CreateSemaphoreW
(
NULL
,
0
,
1
,
NULL
);
memset
(
&
startmode
,
0
,
sizeof
(
startmode
)
);
s
tartmode
.
dmSize
=
sizeof
(
startmode
);
EnumDisplaySettingsA
(
NULL
,
ENUM_CURRENT_SETTINGS
,
&
startmode
);
start_bpp
=
startmode
.
dmBitsPerPel
;
memset
(
&
settings
,
0
,
sizeof
(
DEVMODEW
)
);
s
ettings
.
dmSize
=
sizeof
(
DEVMODEW
);
ret
=
EnumDisplaySettingsW
(
NULL
,
ENUM_CURRENT_SETTINGS
,
&
settings
);
ok
(
ret
,
"EnumDisplaySettingsW failed, error %#lx
\n
"
,
GetLastError
()
)
;
displaychange_sem
=
CreateSemaphoreW
(
NULL
,
0
,
1
,
NULL
);
ok
(
settings
.
dmFields
&
DM_BITSPERPEL
,
"got dmFields %#lx
\n
"
,
settings
.
dmFields
);
ok
(
settings
.
dmBitsPerPel
==
32
,
"got dmBitsPerPel %lu
\n
"
,
settings
.
dmBitsPerPel
);
default_bpp
=
settings
.
dmBitsPerPel
;
for
(
i
=
0
;
i
<
ARRAY_SIZE
(
test_bpps
);
i
++
)
{
last_bpp
=
-
1
;
/* setting the default mode here sends a WM_DISPLAYCHANGE */
last_bpp
=
-
1
;
change_counter
=
0
;
displaychange_ok
=
TRUE
;
res
=
ChangeDisplaySettingsExW
(
NULL
,
&
settings
,
NULL
,
0
,
NULL
);
ok
(
!
res
,
"ChangeDisplaySettingsExW returned %ld
\n
"
,
res
);
res
=
WaitForSingleObject
(
displaychange_sem
,
10000
);
ok
(
!
res
,
"WaitForSingleObject returned %#lx
\n
"
,
res
);
ok
(
last_bpp
==
default_bpp
,
"got WM_DISPLAYCHANGE bpp %u
\n
"
,
last_bpp
);
displaychange_ok
=
FALSE
;
for
(
i
=
0
;
i
<
ARRAY_SIZE
(
test_bpps
);
i
++
)
{
UINT
bpp
=
test_bpps
[
i
];
memset
(
&
mode
,
0
,
sizeof
(
mode
));
mode
.
dmSize
=
sizeof
(
mode
);
mode
.
dmFields
=
DM_BITSPERPEL
|
DM_PELSWIDTH
|
DM_PELSHEIGHT
;
mode
.
dmBitsPerPel
=
test_bpps
[
i
];
mode
.
dmPelsWidth
=
GetSystemMetrics
(
SM_CXSCREEN
);
mode
.
dmPelsHeight
=
GetSystemMetrics
(
SM_CYSCREEN
);
winetest_push_context
(
"bpp %u"
,
bpp
);
change_counter
=
0
;
/* This sends a SETTINGSCHANGE message as well in which we aren't interested */
settings
.
dmBitsPerPel
=
bpp
;
settings
.
dmFields
|=
DM_BITSPERPEL
;
last_bpp
=
-
1
;
change_counter
=
0
;
displaychange_ok
=
TRUE
;
change_ret
=
pChangeDisplaySettingsExA
(
NULL
,
&
mode
,
NULL
,
0
,
NULL
);
/* Wait quite long for the message, screen setting changes can take some time */
if
(
change_ret
==
DISP_CHANGE_SUCCESSFUL
)
{
wait_ret
=
WaitForSingleObject
(
displaychange_sem
,
10000
);
/* we may not get a notification if nothing changed */
if
(
wait_ret
==
WAIT_TIMEOUT
&&
!
last_set_bpp
&&
start_bpp
==
test_bpps
[
i
])
continue
;
ok
(
wait_ret
==
WAIT_OBJECT_0
,
"Waiting for the WM_DISPLAYCHANGE message timed out
\n
"
);
res
=
ChangeDisplaySettingsExW
(
NULL
,
&
settings
,
NULL
,
0
,
NULL
);
if
(
!
res
)
{
/* Wait quite long for the message, screen setting changes can take some time */
res
=
WaitForSingleObject
(
displaychange_sem
,
10000
);
ok
(
!
res
,
"WaitForSingleObject returned %#lx
\n
"
,
res
);
todo_wine
ok
(
last_bpp
==
bpp
,
"got WM_DISPLAYCHANGE bpp %u
\n
"
,
last_bpp
);
}
displaychange_ok
=
FALSE
;
if
(
change_ret
!=
DISP_CHANGE_SUCCESSFUL
)
{
skip
(
"Setting depth %d failed(ret = %ld)
\n
"
,
test_bpps
[
i
],
change_ret
);
ok
(
last_bpp
==
-
1
,
"WM_DISPLAYCHANGE was sent with wParam %d despite mode change failure
\n
"
,
last_bpp
);
continue
;
else
{
todo_wine
win_skip
(
"ChangeDisplaySettingsExW returned %ld
\n
"
,
res
);
ok
(
res
==
DISP_CHANGE_BADMODE
||
broken
(
DISP_CHANGE_FAILED
&&
bpp
==
8
),
"ChangeDisplaySettingsExW returned %ld
\n
"
,
res
);
ok
(
last_bpp
==
-
1
,
"got WM_DISPLAYCHANGE bpp %u
\n
"
,
last_bpp
);
}
displaychange_ok
=
FALSE
;
todo_wine_if
(
start_bpp
!=
test_bpps
[
i
])
{
ok
(
last_bpp
==
test_bpps
[
i
],
"Set bpp %d, but WM_DISPLAYCHANGE reported bpp %d
\n
"
,
test_bpps
[
i
],
last_bpp
);
}
last_set_bpp
=
test_bpps
[
i
];
winetest_pop_context
();
}
if
(
start_bpp
!=
last_set_bpp
&&
last_set_bpp
!=
0
)
{
memset
(
&
mode
,
0
,
sizeof
(
mode
));
mode
.
dmSize
=
sizeof
(
mode
);
mode
.
dmFields
=
DM_BITSPERPEL
|
DM_PELSWIDTH
|
DM_PELSHEIGHT
;
mode
.
dmBitsPerPel
=
start_bpp
;
mode
.
dmPelsWidth
=
GetSystemMetrics
(
SM_CXSCREEN
);
mode
.
dmPelsHeight
=
GetSystemMetrics
(
SM_CYSCREEN
);
/* restoring default mode most of the time doesn't send WM_DISPLAYCHANGE */
displaychange_ok
=
TRUE
;
change_ret
=
pChangeDisplaySettingsExA
(
NULL
,
&
mode
,
NULL
,
0
,
NULL
);
WaitForSingleObject
(
displaychange_sem
,
10000
);
displaychange_ok
=
FALSE
;
CloseHandle
(
displaychange_sem
);
displaychange_sem
=
0
;
}
settings
.
dmBitsPerPel
=
default_bpp
;
settings
.
dmFields
|=
DM_BITSPERPEL
;
last_bpp
=
-
1
;
change_counter
=
0
;
displaychange_ok
=
TRUE
;
res
=
ChangeDisplaySettingsExW
(
NULL
,
&
settings
,
NULL
,
0
,
NULL
);
ok
(
!
res
,
"ChangeDisplaySettingsExW returned %ld
\n
"
,
res
);
res
=
WaitForSingleObject
(
displaychange_sem
,
1000
);
todo_wine
ok
(
res
==
WAIT_TIMEOUT
||
broken
(
!
res
),
"WaitForSingleObject returned %#lx
\n
"
,
res
);
todo_wine
ok
(
last_bpp
==
-
1
||
broken
(
last_bpp
==
default_bpp
),
"got WM_DISPLAYCHANGE bpp %u
\n
"
,
last_bpp
);
displaychange_ok
=
FALSE
;
CloseHandle
(
displaychange_sem
);
displaychange_sem
=
0
;
displaychange_test_active
=
FALSE
;
}
...
...
@@ -4136,7 +4145,6 @@ START_TEST(sysparams)
HANDLE
hInstance
,
hdll
;
hdll
=
GetModuleHandleA
(
"user32.dll"
);
pChangeDisplaySettingsExA
=
(
void
*
)
GetProcAddress
(
hdll
,
"ChangeDisplaySettingsExA"
);
pIsProcessDPIAware
=
(
void
*
)
GetProcAddress
(
hdll
,
"IsProcessDPIAware"
);
pSetProcessDPIAware
=
(
void
*
)
GetProcAddress
(
hdll
,
"SetProcessDPIAware"
);
pGetDpiForSystem
=
(
void
*
)
GetProcAddress
(
hdll
,
"GetDpiForSystem"
);
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment