m_index = 0;
}
+ void ChangeStrings(const wxArrayString& strings)
+ {
+ m_strings = strings;
+ Reset();
+ }
+
DECLARE_IUNKNOWN_METHODS;
virtual HRESULT STDMETHODCALLTYPE Next(ULONG celt,
virtual ~wxIEnumString() { }
- const wxArrayString m_strings;
+ wxArrayString m_strings;
unsigned m_index;
wxDECLARE_NO_COPY_CLASS(wxIEnumString);
::SendMessage(GetEditHwnd(), EM_REPLACESEL, 0, (LPARAM)text.wx_str());
}
-wxString wxTextEntry::GetValue() const
+wxString wxTextEntry::DoGetValue() const
{
return wxGetWindowText(GetEditHWND());
}
static wxDynamicLibrary s_dllShlwapi;
if ( s_pfnSHAutoComplete == (SHAutoComplete_t)-1 )
{
- if ( !s_dllShlwapi.Load(_T("shlwapi.dll"), wxDL_VERBATIM | wxDL_QUIET) )
+ if ( !s_dllShlwapi.Load(wxT("shlwapi.dll"), wxDL_VERBATIM | wxDL_QUIET) )
{
s_pfnSHAutoComplete = NULL;
}
HRESULT hr = (*s_pfnSHAutoComplete)(GetEditHwnd(), SHACF_FILESYS_ONLY);
if ( FAILED(hr) )
{
- wxLogApiError(_T("SHAutoComplete()"), hr);
+ wxLogApiError(wxT("SHAutoComplete()"), hr);
return false;
}
bool wxTextEntry::AutoComplete(const wxArrayString& choices)
{
#ifdef HAS_AUTOCOMPLETE
+ // if we had an old enumerator we must reuse it as IAutoComplete doesn't
+ // free it if we call Init() again (see #10968) -- and it's also simpler
+ if ( m_enumStrings )
+ {
+ m_enumStrings->ChangeStrings(choices);
+ return true;
+ }
+
// create an object exposing IAutoComplete interface (don't go for
// IAutoComplete2 immediately as, presumably, it might be not available on
// older systems as otherwise why do we have both -- although in practice I
);
if ( FAILED(hr) )
{
- wxLogApiError(_T("CoCreateInstance(CLSID_AutoComplete)"), hr);
+ wxLogApiError(wxT("CoCreateInstance(CLSID_AutoComplete)"), hr);
return false;
}
// associate it with our strings
- wxIEnumString *pEnumString = new wxIEnumString(choices);
- pEnumString->AddRef();
- hr = pAutoComplete->Init(GetEditHwnd(), pEnumString, NULL, NULL);
- pEnumString->Release();
+ m_enumStrings = new wxIEnumString(choices);
+ m_enumStrings->AddRef();
+ hr = pAutoComplete->Init(GetEditHwnd(), m_enumStrings, NULL, NULL);
+ m_enumStrings->Release();
if ( FAILED(hr) )
{
- wxLogApiError(_T("IAutoComplete::Init"), hr);
+ wxLogApiError(wxT("IAutoComplete::Init"), hr);
return false;
}
wchar_t buf[256];
if ( ::SendMessage(GetEditHwnd(), EM_GETCUEBANNER,
(WPARAM)buf, WXSIZEOF(buf)) )
- return buf;
+ return wxString(buf);
}
return wxTextEntryBase::GetHint();