From ca4bdb6b3a266d473df5acf1d3a68c03a916de48 Mon Sep 17 00:00:00 2001 From: reuk Date: Wed, 17 Nov 2021 17:11:50 +0000 Subject: [PATCH] Component: Avoid calling member functions on objects destroyed when exiting modal state --- modules/juce_gui_basics/components/juce_Component.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/modules/juce_gui_basics/components/juce_Component.cpp b/modules/juce_gui_basics/components/juce_Component.cpp index 390792e337..5ee474f9ea 100644 --- a/modules/juce_gui_basics/components/juce_Component.cpp +++ b/modules/juce_gui_basics/components/juce_Component.cpp @@ -1761,6 +1761,8 @@ void Component::enterModalState (bool shouldTakeKeyboardFocus, void Component::exitModalState (int returnValue) { + WeakReference deletionChecker (this); + if (isCurrentlyModal (false)) { if (MessageManager::getInstance()->isThisTheMessageThread()) @@ -1772,7 +1774,8 @@ void Component::exitModalState (int returnValue) // While this component is in modal state it may block other components from receiving // mouseEnter events. To keep mouseEnter and mouseExit calls balanced on these components, // we must manually force the mouse to "enter" blocked components. - ComponentHelpers::sendMouseEventToComponentsThatAreBlockedByModal (*this, &Component::internalMouseEnter); + if (deletionChecker != nullptr) + ComponentHelpers::sendMouseEventToComponentsThatAreBlockedByModal (*deletionChecker, &Component::internalMouseEnter); } else {