Zhiyi Zhang (@zhiyi) commented about dlls/win32u/sysparams.c:
if (!(ret = user_driver->pChangeDisplaySettings( displays, hwnd, flags, lparam )))
- {
mode = displays;
LIST_FOR_EACH_ENTRY( adapter, &adapters, struct adapter, entry )
{
if (!write_registry_settings( adapter->config_key, ENUM_CURRENT_SETTINGS, mode ))
WARN( "Failed to write adapter %s current mode.\n", debugstr_w(mode->dmDeviceName) );
mode = NEXT_DEVMODEW(mode);
}
send_message_timeout( HWND_BROADCAST, WM_DISPLAYCHANGE, displays->dmBitsPerPel, MAKELPARAM( displays->dmPelsWidth, displays->dmPelsHeight ), SMTO_ABORTIFHUNG, 2000, FALSE );
- }
- unlock_display_devices();
Right, it's probably best not to hold the display device lock while sending WM_DISPLAYCHANGE. The current behavior also doesn't guarantee WM_DISPLAYCHANGE ordering.