X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/1fc5dc69fdb71cb98af8a76eeea44945e0b46730..5bf3b6fe48580853044132c381d3548535ca7ad1:/src/univ/textctrl.cpp diff --git a/src/univ/textctrl.cpp b/src/univ/textctrl.cpp index d8816f8974..2edc5b0afe 100644 --- a/src/univ/textctrl.cpp +++ b/src/univ/textctrl.cpp @@ -149,16 +149,13 @@ #include "wx/cmdproc.h" -// turn extra wxTextCtrl-specific debugging on/off -#define WXDEBUG_TEXT +#if wxDEBUG_LEVEL >= 2 + // turn extra wxTextCtrl-specific debugging on/off + #define WXDEBUG_TEXT -// turn wxTextCtrl::Replace() debugging on (slows down code a *lot*!) -#define WXDEBUG_TEXT_REPLACE - -#ifndef __WXDEBUG__ - #undef WXDEBUG_TEXT - #undef WXDEBUG_TEXT_REPLACE -#endif + // turn wxTextCtrl::Replace() debugging on (slows down code a *lot*!) + #define WXDEBUG_TEXT_REPLACE +#endif // wxDEBUG_LEVEL >= 2 // wxStringTokenize only needed for debug checks #ifdef WXDEBUG_TEXT_REPLACE @@ -790,21 +787,23 @@ wxTextCtrl::~wxTextCtrl() void wxTextCtrl::DoSetValue(const wxString& value, int flags) { - if ( IsSingleLine() && (value == GetValue()) ) + if ( value != GetValue() ) { - // nothing changed - return; - } + EventsSuppressor noeventsIf(this, !(flags & SetValue_SendEvent)); - Replace(0, GetLastPosition(), value); + Replace(0, GetLastPosition(), value); - if ( IsSingleLine() ) + if ( IsSingleLine() ) + { + SetInsertionPoint(0); + } + } + else // nothing changed { - SetInsertionPoint(0); + // still send event for consistency + if ( flags & SetValue_SendEvent ) + SendTextUpdatedEvent(); } - - if ( flags & SetValue_SendEvent ) - SendTextUpdatedEvent(); } const wxArrayString& wxTextCtrl::GetLines() const @@ -817,7 +816,7 @@ size_t wxTextCtrl::GetLineCount() const return MData().m_lines.GetCount(); } -wxString wxTextCtrl::GetValue() const +wxString wxTextCtrl::DoGetValue() const { // for multiline controls we don't always store the total value but only // recompute it when asked - and to invalidate it we just empty it in @@ -1264,6 +1263,9 @@ void wxTextCtrl::Replace(wxTextPos from, wxTextPos to, const wxString& text) // now call it to do the rest (not related to refreshing) ClearSelection(); + + if ( EventsAllowed() ) + SendTextUpdatedEvent(); } void wxTextCtrl::Remove(wxTextPos from, wxTextPos to) @@ -3615,8 +3617,12 @@ void wxTextCtrl::UpdateScrollbars() if ( scrollRangeXOld ) { - x *= scrollRangeX - m_rectText.width / charWidth; - x /= scrollRangeXOld - m_rectText.width / charWidth; + const int w = m_rectText.width / charWidth; + if ( w != scrollRangeXOld ) + { + x *= scrollRangeX - w; + x /= scrollRangeXOld - w; + } Scroll(x, y); } @@ -4305,7 +4311,7 @@ void wxTextCtrl::CreateCaret() else { // read only controls don't have the caret - caret = (wxCaret *)NULL; + caret = NULL; } // SetCaret() will delete the old caret if any @@ -4424,7 +4430,7 @@ bool wxTextCtrl::PerformAction(const wxControlAction& actionOrig, // the command this action corresponds to or NULL if this action doesn't // change text at all or can't be undone - wxTextCtrlCommand *command = (wxTextCtrlCommand *)NULL; + wxTextCtrlCommand *command = NULL; wxString action; bool del = false, @@ -4756,11 +4762,11 @@ void wxTextCtrl::OnChar(wxKeyEvent& event) } #endif } -#ifdef __WXDEBUG__ +#if wxDEBUG_LEVEL >= 2 // Ctrl-R refreshes the control in debug mode else if ( event.ControlDown() && event.GetKeyCode() == 'r' ) Refresh(); -#endif // __WXDEBUG__ +#endif // wxDEBUG_LEVEL >= 2 event.Skip(); } @@ -4780,7 +4786,7 @@ wxInputHandler *wxTextCtrl::GetStdInputHandler(wxInputHandler *handlerDef) wxStdTextCtrlInputHandler::wxStdTextCtrlInputHandler(wxInputHandler *inphand) : wxStdInputHandler(inphand) { - m_winCapture = (wxTextCtrl *)NULL; + m_winCapture = NULL; } /* static */ @@ -4957,7 +4963,7 @@ bool wxStdTextCtrlInputHandler::HandleMouse(wxInputConsumer *consumer, m_winCapture->ShowCaret(); m_winCapture->ReleaseMouse(); - m_winCapture = (wxTextCtrl *)NULL; + m_winCapture = NULL; } }