1
0
Fork 0
mirror of https://github.com/juce-framework/JUCE.git synced 2026-01-10 23:44:24 +00:00

VirtualDesktopManager: Avoid caching COM object which might be invalidated if COM is uninitialised and reinitialised

This commit is contained in:
reuk 2024-05-01 18:21:14 +01:00
parent aeeb06ccb9
commit c0d0c1f9c6
No known key found for this signature in database
GPG key ID: FCB43929F012EE5C

View file

@ -5520,25 +5520,19 @@ bool juce::detail::WindowingHelpers::isWindowOnCurrentVirtualDesktop (void* x)
if (x == nullptr)
return false;
static auto* desktopManager = []
{
JuceIVirtualDesktopManager* result = nullptr;
ComSmartPtr<JuceIVirtualDesktopManager> manager;
JUCE_BEGIN_IGNORE_WARNINGS_GCC_LIKE ("-Wlanguage-extension-token")
JUCE_BEGIN_IGNORE_WARNINGS_GCC_LIKE ("-Wlanguage-extension-token")
manager.CoCreateInstance (__uuidof (JuceVirtualDesktopManager), CLSCTX_ALL);
JUCE_END_IGNORE_WARNINGS_GCC_LIKE
if (SUCCEEDED (CoCreateInstance (__uuidof (JuceVirtualDesktopManager), nullptr, CLSCTX_ALL, IID_PPV_ARGS (&result))))
return result;
JUCE_END_IGNORE_WARNINGS_GCC_LIKE
return static_cast<JuceIVirtualDesktopManager*> (nullptr);
}();
if (manager == nullptr)
return true;
BOOL current = false;
if (auto* dm = desktopManager)
if (SUCCEEDED (dm->IsWindowOnCurrentVirtualDesktop (static_cast<HWND> (x), &current)))
return current != false;
if (FAILED (manager->IsWindowOnCurrentVirtualDesktop (static_cast<HWND> (x), &current)))
return true;
return true;
return current != false;
}