diff options
| -rw-r--r-- | indra/llui/llfocusmgr.cpp | 18 | 
1 files changed, 14 insertions, 4 deletions
| diff --git a/indra/llui/llfocusmgr.cpp b/indra/llui/llfocusmgr.cpp index c635d24f51..0d7c98294f 100644 --- a/indra/llui/llfocusmgr.cpp +++ b/indra/llui/llfocusmgr.cpp @@ -73,10 +73,20 @@ bool LLFocusableElement::wantsReturnKey() const  // virtual  LLFocusableElement::~LLFocusableElement()  { -    delete mFocusLostCallback; -    delete mFocusReceivedCallback; -    delete mFocusChangedCallback; -    delete mTopLostCallback; +    auto free_signal = [&](focus_signal_t*& signal) +        { +            if (signal) +            { +                signal->disconnect_all_slots(); +                delete signal; +                signal = nullptr; +            } +        }; + +    free_signal(mFocusLostCallback); +    free_signal(mFocusReceivedCallback); +    free_signal(mFocusChangedCallback); +    free_signal(mTopLostCallback);  }  void LLFocusableElement::onFocusReceived() | 
