UI: Check current affinity before calling SetWindowDisplayAffinity

For some reason, SetWindowDisplayAffinity can make windows visible even
when it sets the same value for affinity that GetWindowDisplayAffinity
reports. Possibly an API bug as this is probably not a widely used API
yet?

Fixes a weird window with no size appearing when browsing for files on
Windows.
This commit is contained in:
Richard Stanway 2022-01-27 02:37:32 +01:00
parent 54ca895537
commit 5ed45d06da
No known key found for this signature in database
GPG key ID: 4F96FCA24BCE7BA1

View file

@ -9964,10 +9964,14 @@ void OBSBasic::SetDisplayAffinity(QWindow *window)
#ifdef _WIN32
HWND hwnd = (HWND)window->winId();
if (hideFromCapture)
SetWindowDisplayAffinity(hwnd, WDA_EXCLUDEFROMCAPTURE);
else
SetWindowDisplayAffinity(hwnd, WDA_NONE);
DWORD curAffinity;
if (GetWindowDisplayAffinity(hwnd, &curAffinity)) {
if (hideFromCapture && curAffinity != WDA_EXCLUDEFROMCAPTURE)
SetWindowDisplayAffinity(hwnd, WDA_EXCLUDEFROMCAPTURE);
else if (curAffinity != WDA_NONE)
SetWindowDisplayAffinity(hwnd, WDA_NONE);
}
#else
// TODO: Implement for other platforms if possible. Don't forget to
// implement SetDisplayAffinitySupported too!