Skip to content

Commit

Permalink
VirtualDesktopManager: Avoid caching COM object which might be invali…
Browse files Browse the repository at this point in the history
…dated if COM is uninitialised and reinitialised
  • Loading branch information
reuk committed May 20, 2024
1 parent aeeb06c commit c0d0c1f
Showing 1 changed file with 9 additions and 15 deletions.
24 changes: 9 additions & 15 deletions modules/juce_gui_basics/native/juce_Windowing_windows.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -5520,25 +5520,19 @@ bool juce::detail::WindowingHelpers::isWindowOnCurrentVirtualDesktop (void* x)
if (x == nullptr)
return false;

static auto* desktopManager = []
{
JuceIVirtualDesktopManager* result = nullptr;

JUCE_BEGIN_IGNORE_WARNINGS_GCC_LIKE ("-Wlanguage-extension-token")

if (SUCCEEDED (CoCreateInstance (__uuidof (JuceVirtualDesktopManager), nullptr, CLSCTX_ALL, IID_PPV_ARGS (&result))))
return result;
ComSmartPtr<JuceIVirtualDesktopManager> manager;

JUCE_END_IGNORE_WARNINGS_GCC_LIKE
JUCE_BEGIN_IGNORE_WARNINGS_GCC_LIKE ("-Wlanguage-extension-token")
manager.CoCreateInstance (__uuidof (JuceVirtualDesktopManager), CLSCTX_ALL);
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;
}

0 comments on commit c0d0c1f

Please sign in to comment.