Browse Source

Fix crash occurring in VirtualDesktopWatcher during desktop scaling changes

v7.0.9
attila 2 years ago
parent
commit
e4c87b766b
1 changed files with 18 additions and 8 deletions
  1. +18
    -8
      modules/juce_gui_basics/misc/juce_DropShadower.cpp

+ 18
- 8
modules/juce_gui_basics/misc/juce_DropShadower.cpp View File

@@ -131,17 +131,25 @@ private:
//==============================================================================
void update()
{
const auto newHasReasonToHide = [this]()
bool newHasReasonToHide = false;
if (! component.wasObjectDeleted() && isWindows && component->isOnDesktop())
{
if (! component.wasObjectDeleted() && isWindows && component->isOnDesktop())
{
startTimerHz (5);
return ! detail::WindowingHelpers::isWindowOnCurrentVirtualDesktop (component->getWindowHandle());
}
startTimerHz (5);
WeakReference<VirtualDesktopWatcher> weakThis (this);
// During scaling changes this call can trigger a call to HWNDComponentPeer::handleDPIChanging()
// which deletes this VirtualDesktopWatcher.
newHasReasonToHide = ! detail::WindowingHelpers::isWindowOnCurrentVirtualDesktop (component->getWindowHandle());
if (weakThis == nullptr)
return;
}
else
{
stopTimer();
return false;
}();
}
if (std::exchange (hasReasonToHide, newHasReasonToHide) != newHasReasonToHide)
for (auto& l : listeners)
@@ -158,6 +166,8 @@ private:
const bool isWindows = (SystemStats::getOperatingSystemType() & SystemStats::Windows) != 0;
bool hasReasonToHide = false;
std::map<void*, std::function<void()>> listeners;
JUCE_DECLARE_WEAK_REFERENCEABLE (VirtualDesktopWatcher)
};
class DropShadower::ParentVisibilityChangedListener : public ComponentListener


Loading…
Cancel
Save