diff --git a/include/wx/msw/textentry.h b/include/wx/msw/textentry.h index a5f2305125..434ca9c3b8 100644 --- a/include/wx/msw/textentry.h +++ b/include/wx/msw/textentry.h @@ -100,9 +100,9 @@ private: // be called and the default implementation asserts if this is not the case. virtual void MSWProcessSpecialKey(wxKeyEvent& event); - // Get the auto-complete object creating it if necessary. Returns NULL if - // creating it failed. - wxTextAutoCompleteData *GetOrCreateCompleter(); + // Check that we have auto-complete data, creating it if necessary. Returns + // false if creating it failed. + bool MSWEnsureHasAutoCompleteData(); // Various auto-completion-related stuff, only used if any of AutoComplete() // methods are called. Use the function above to access it. diff --git a/src/msw/textentry.cpp b/src/msw/textentry.cpp index fcdae4beec..771d842d83 100644 --- a/src/msw/textentry.cpp +++ b/src/msw/textentry.cpp @@ -846,27 +846,29 @@ void wxTextEntry::MSWProcessSpecialKey(wxKeyEvent& WXUNUSED(event)) wxFAIL_MSG(wxS("Must be overridden if can be called")); } -wxTextAutoCompleteData *wxTextEntry::GetOrCreateCompleter() +bool wxTextEntry::MSWEnsureHasAutoCompleteData() { if ( !m_autoCompleteData ) { wxTextAutoCompleteData * const ac = new wxTextAutoCompleteData(this); - if ( ac->IsOk() ) - m_autoCompleteData = ac; - else + if ( !ac->IsOk() ) + { delete ac; + return false; + } + + m_autoCompleteData = ac; } - return m_autoCompleteData; + return true; } bool wxTextEntry::DoAutoCompleteStrings(const wxArrayString& choices) { - wxTextAutoCompleteData * const ac = GetOrCreateCompleter(); - if ( !ac ) + if ( !MSWEnsureHasAutoCompleteData() ) return false; - ac->ChangeStrings(choices); + m_autoCompleteData->ChangeStrings(choices); return true; } @@ -882,8 +884,7 @@ bool wxTextEntry::DoAutoCompleteCustom(wxTextCompleter *completer) } else // Have a valid completer. { - wxTextAutoCompleteData * const ac = GetOrCreateCompleter(); - if ( !ac ) + if ( !MSWEnsureHasAutoCompleteData() ) { // Delete the custom completer for consistency with the case when // we succeed to avoid memory leaks in user code. @@ -892,7 +893,7 @@ bool wxTextEntry::DoAutoCompleteCustom(wxTextCompleter *completer) } // This gives ownership of the custom completer to m_autoCompleteData. - if ( !ac->ChangeCustomCompleter(completer) ) + if ( !m_autoCompleteData->ChangeCustomCompleter(completer) ) return false; }