X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/6e9e2d94b4acddfe170008eaa46a835df9e8c2a3..9d7d3b1f9faf5116b2f1d5a95493054e88039775:/src/msw/textctrl.cpp diff --git a/src/msw/textctrl.cpp b/src/msw/textctrl.cpp index a04437dc77..0dd0da0b7b 100644 --- a/src/msw/textctrl.cpp +++ b/src/msw/textctrl.cpp @@ -809,7 +809,10 @@ wxTextCtrl::StreamIn(const wxString& value, (selectionOnly ? SFF_SELECTION : 0), (LPARAM)&eds); - wxASSERT_MSG( ucf.GotUpdate(), _T("EM_STREAMIN didn't send EN_UPDATE?") ); + // It's okay for EN_UPDATE to not be sent if the selection is empty and + // the text is empty, otherwise warn the programmer about it. + wxASSERT_MSG( ucf.GotUpdate() || ( !HasSelection() && value.empty() ), + _T("EM_STREAMIN didn't send EN_UPDATE?") ); if ( eds.dwError ) { @@ -1258,10 +1261,14 @@ void wxTextCtrl::DoSetSelection(long from, long to, bool scrollCaret) // ES_DISABLENOSCROLL // // this is very ugly but I don't see any other way to make this work + long style = 0; if ( GetRichVersion() > 1 ) { if ( !HasFlag(wxTE_NOHIDESEL) ) { + // setting ECO_NOHIDESEL also sets WS_VISIBLE and possibly + // others, remember the style so we can reset it later if needed + style = ::GetWindowLong(GetHwnd(), GWL_STYLE); ::SendMessage(GetHwnd(), EM_SETOPTIONS, ECOOP_OR, ECO_NOHIDESEL); } @@ -1277,6 +1284,8 @@ void wxTextCtrl::DoSetSelection(long from, long to, bool scrollCaret) { ::SendMessage(GetHwnd(), EM_SETOPTIONS, ECOOP_AND, ~ECO_NOHIDESEL); + if ( style != ::GetWindowLong(GetHwnd(), GWL_STYLE) ) + ::SetWindowLong(GetHwnd(), GWL_STYLE, style); } #endif // wxUSE_RICHEDIT } @@ -1960,7 +1969,7 @@ wxSize wxTextCtrl::DoGetBestSize() const int hText = cy; if ( m_windowStyle & wxTE_MULTILINE ) { - hText *= wxMax(wxMin(GetNumberOfLines(), 10), 2); + hText *= wxMax(wxMin(GetNumberOfLines(), 10), 2); } //else: for single line control everything is ok @@ -2521,7 +2530,7 @@ bool wxTextCtrl::GetStyle(long position, wxTextAttr& style) if ( changeSel ) { - DoSetSelection(position, position, false /* don't scroll caret into view */); + DoSetSelection(position, position+1, false /* don't scroll caret into view */); } // get the selection formatting