X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/a40c9444bbdea1954bbf28d5a529035d377baf36..dab73021272104a5997f43658831658d8a783474:/src/msw/textctrl.cpp?ds=inline diff --git a/src/msw/textctrl.cpp b/src/msw/textctrl.cpp index 77ad90c6d3..288f674d42 100644 --- a/src/msw/textctrl.cpp +++ b/src/msw/textctrl.cpp @@ -5,8 +5,8 @@ // Modified by: // Created: 04/01/98 // RCS-ID: $Id$ -// Copyright: (c) Julian Smart and Markus Holzem -// Licence: wxWindows license +// Copyright: (c) Julian Smart +// Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// // ============================================================================ @@ -413,6 +413,7 @@ WXDWORD wxTextCtrl::MSWGetStyle(long style, WXDWORD *exstyle) const // always adjust the vertical scrollbar automatically if we have it msStyle |= WS_VSCROLL | ES_AUTOVSCROLL; +#if wxUSE_RICHEDIT // we have to use this style for the rich edit controls because // without it the vertical scrollbar never appears at all in // richedit 3.0 because of our ECO_NOHIDESEL hack (search for it) @@ -420,6 +421,7 @@ WXDWORD wxTextCtrl::MSWGetStyle(long style, WXDWORD *exstyle) const { msStyle |= ES_DISABLENOSCROLL; } +#endif // wxUSE_RICHEDIT } style |= wxTE_PROCESS_ENTER; @@ -568,14 +570,16 @@ void wxTextCtrl::SetValue(const wxString& value) if ( (value.length() > 0x400) || (value != GetValue()) ) { DoWriteText(value, FALSE /* not selection only */); + } - // mark the control as being not dirty - we changed its text, not the - // user - DiscardEdits(); + // we should reset the modified flag even if the value didn't really change - // for compatibility, don't move the cursor when doing SetValue() - SetInsertionPoint(0); - } + // mark the control as being not dirty - we changed its text, not the + // user + DiscardEdits(); + + // for compatibility, don't move the cursor when doing SetValue() + SetInsertionPoint(0); } #if wxUSE_RICHEDIT && (!wxUSE_UNICODE || wxUSE_UNICODE_MSLU) @@ -657,11 +661,13 @@ bool wxTextCtrl::StreamIn(const wxString& value, m_suppressNextUpdate = TRUE; } - if ( !::SendMessage(GetHwnd(), EM_STREAMIN, - SF_TEXT | - SF_UNICODE | - (selectionOnly ? SFF_SELECTION : 0), - (LPARAM)&eds) || eds.dwError ) + ::SendMessage(GetHwnd(), EM_STREAMIN, + SF_TEXT | + SF_UNICODE | + (selectionOnly ? SFF_SELECTION : 0), + (LPARAM)&eds); + + if ( eds.dwError ) { wxLogLastError(_T("EM_STREAMIN")); } @@ -912,6 +918,14 @@ void wxTextCtrl::SetInsertionPoint(long pos) void wxTextCtrl::SetInsertionPointEnd() { + // we must not do anything if the caret is already there because calling + // SetInsertionPoint() thaws the controls if Freeze() had been called even + // if it doesn't actually move the caret anywhere and so the simple fact of + // doing it results in horrible flicker when appending big amounts of text + // to the control in a few chunks (see DoAddText() test in the text sample) + if ( GetInsertionPoint() == GetLastPosition() ) + return; + long pos; #if wxUSE_RICHEDIT