X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/ae3b14872bca4ee65d1adf3c6d75ef66c5438aac..7185918d695b5a3bb662ac4c71dd943dca9a2afc:/src/msw/combobox.cpp diff --git a/src/msw/combobox.cpp b/src/msw/combobox.cpp index 5faed26cb5..7ae8dfc956 100644 --- a/src/msw/combobox.cpp +++ b/src/msw/combobox.cpp @@ -39,8 +39,13 @@ #endif #include "wx/clipbrd.h" +#include "wx/wupdlock.h" #include "wx/msw/private.h" +#if wxUSE_UXTHEME + #include "wx/msw/uxtheme.h" +#endif + #if wxUSE_TOOLTIPS #include "wx/tooltip.h" #endif // wxUSE_TOOLTIPS @@ -233,8 +238,23 @@ WXLRESULT wxComboBox::MSWWindowProc(WXUINT nMsg, WXWPARAM wParam, WXLPARAM lPara long fromOld, toOld; GetSelection(&fromOld, &toOld); + + // if an editable combobox has a not empty text not from the + // list, it tries to autocomplete it from the list when it is + // resized, but we don't want this to happen as it doesn't seem + // to make any sense, so we forcefully restore the old text + wxString textOld; + if ( !HasFlag(wxCB_READONLY) && GetCurrentSelection() == -1 ) + textOld = GetValue(); + + // eliminate flickering during following hacks + wxWindowUpdateLocker lock(this); + WXLRESULT result = wxChoice::MSWWindowProc(nMsg, wParam, lParam); + if ( !textOld.empty() && GetValue() != textOld ) + SetLabel(textOld); + long fromNew, toNew; GetSelection(&fromNew, &toNew); @@ -429,6 +449,14 @@ WXHWND wxComboBox::GetEditHWND() const return hWndEdit; } +wxWindow *wxComboBox::GetEditableWindow() +{ + wxASSERT_MSG( !HasFlag(wxCB_READONLY), + _T("read-only combobox doesn't have any edit control") ); + + return this; +} + // ---------------------------------------------------------------------------- // wxComboBox creation // ---------------------------------------------------------------------------- @@ -649,4 +677,22 @@ void wxComboBox::DoSetToolTip(wxToolTip *tip) #endif // wxUSE_TOOLTIPS +#if wxUSE_UXTHEME + +bool wxComboBox::SetHint(const wxString& hintOrig) +{ + wxString hint(hintOrig); + if ( wxUxThemeEngine::GetIfActive() ) + { + // under XP (but not Vista) there is a bug in cue banners + // implementation for combobox edit control: the first character is + // partially chopped off, so prepend a space to make it fully visible + hint.insert(0, " "); + } + + return wxTextEntry::SetHint(hint); +} + +#endif // wxUSE_UXTHEME + #endif // wxUSE_COMBOBOX