FlashWindowEx is fairly complicated with fake window active states and various timers, but wine currently doesn't simulate any of this.
This patchset makes the message value and return values more sensible and also closer to MSDN documentation:
The message value and return value now reflects the window's active state and not the inverted state or inactive state
This fixes games like Overwatch getting confused about the active window state after calling FlashWindowEx
Regarding the test change: while it's true that a test that used to work is now broken by this change, simply waiting (dwTimeout)ms would have also broken the test due to the behind the scenes timer.
An additional note, nearly all 16 flags combinations will finish their behavior by sending a message with the correct active state, where wine currently sends the inverted state. This change makes it more correct.
I've noticed that a different patch made its way into staging, where the message still has the incorrect inverted value. This is wrong and games like Overwatch still think the window is inactive when it's focused and vice versa.
Please take a look at the newly added tests, they show that the inverted value in the window message is correct. Do you know which flags are exactly used by Overwatch?
Overwatch uses 0xC + 0x2, and I believe 0 for count. My documentation on this function shows that if the window is active, TRUE is returned and NC_ACTIVATE is sent with a 1. Furthermore most of the documented behavior shows after doing whatever pulsing of titlebar/taskbar the last message sent is one of the active state.
Your tests only wait 50ms while the timeout is set to 200ms, they are only acting on the first 0 of a set of 0 and 1 message pulses, hence the false idea that the proper value to send is the inverted one.