From 547dc7712cb3a102c56c0dc362fe1808df750835 Mon Sep 17 00:00:00 2001 From: ed Date: Thu, 22 Apr 2021 16:13:36 +0100 Subject: [PATCH] Fixed a potential crash in DropShadower when the component is deleted before the shadower --- modules/juce_gui_basics/misc/juce_DropShadower.cpp | 11 ++++------- modules/juce_gui_basics/misc/juce_DropShadower.h | 4 ++-- 2 files changed, 6 insertions(+), 9 deletions(-) diff --git a/modules/juce_gui_basics/misc/juce_DropShadower.cpp b/modules/juce_gui_basics/misc/juce_DropShadower.cpp index c8bfe62950..41f2d6f9f9 100644 --- a/modules/juce_gui_basics/misc/juce_DropShadower.cpp +++ b/modules/juce_gui_basics/misc/juce_DropShadower.cpp @@ -76,10 +76,7 @@ private: //============================================================================== -DropShadower::DropShadower (const DropShadow& ds) - : owner (nullptr), shadow (ds), reentrant (false) -{ -} +DropShadower::DropShadower (const DropShadow& ds) : shadow (ds) {} DropShadower::~DropShadower() { @@ -91,7 +88,7 @@ DropShadower::~DropShadower() updateParent(); - reentrant = true; + const ScopedValueSetter setter (reentrant, true); shadowWindows.clear(); } @@ -163,7 +160,7 @@ void DropShadower::updateShadows() if (reentrant) return; - const ScopedValueSetter setter (reentrant, true, false); + const ScopedValueSetter setter (reentrant, true); if (owner == nullptr) { @@ -209,7 +206,7 @@ void DropShadower::updateShadows() if (sw == nullptr) return; - sw->toBehind (i == 3 ? owner : shadowWindows.getUnchecked (i + 1)); + sw->toBehind (i == 3 ? owner.get() : shadowWindows.getUnchecked (i + 1)); } } } diff --git a/modules/juce_gui_basics/misc/juce_DropShadower.h b/modules/juce_gui_basics/misc/juce_DropShadower.h index f28b5f2d4d..172dd9f0ea 100644 --- a/modules/juce_gui_basics/misc/juce_DropShadower.h +++ b/modules/juce_gui_basics/misc/juce_DropShadower.h @@ -60,10 +60,10 @@ private: //============================================================================== class ShadowWindow; - Component* owner; + WeakReference owner; OwnedArray shadowWindows; DropShadow shadow; - bool reentrant; + bool reentrant = false; WeakReference lastParentComp; void componentMovedOrResized (Component&, bool, bool) override;