Don't move wxTextCtrl insertion point if it doesn't really change

Resetting the insertion point position to 0 after calling
wxTextCtrl::SetValue() or ChangeValue() which didn't really change the
control contents was unexpected, as such calls are supposed to be
"optimized away", and this was indeed the case under wxMSW and wxOSX,
but not in wxGTK.

So change wxGTK to follow the other ports, add a unit test checking for
this behaviour and officially document it.

As a side effect, this ensures that the numeric validator classes don't
reset the insertion point position to 0 on every focus loss under wxGTK,
as happened before.
This commit is contained in:
Vadim Zeitlin
2019-03-20 01:50:06 +01:00
parent 39380847da
commit 8042648c73
3 changed files with 14 additions and 3 deletions

View File

@@ -570,12 +570,16 @@ void wxTextEntry::DoSetValue(const wxString& value, int flags)
EventsSuppressor noevents(this);
WriteText(value);
}
// Changing the value is supposed to reset the insertion point. Note,
// however, that this does not happen if the text doesn't really change.
SetInsertionPoint(0);
}
// OTOH we must send the event even if the text didn't really change for
// consistency.
if ( flags & SetValue_SendEvent )
SendTextUpdatedEvent(GetEditableWindow());
SetInsertionPoint(0);
}
wxString wxTextEntry::DoGetValue() const