git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@73258
c3d73ce0-8a6f-49c7-b76d-
6d57e0e08775
wxRichTextParagraphLayoutBox* container = GetFocusObject();
int hitTestFlags = wxRICHTEXT_HITTEST_NO_NESTED_OBJECTS|wxRICHTEXT_HITTEST_NO_FLOATING_OBJECTS|wxRICHTEXT_HITTEST_HONOUR_ATOMIC;
wxRichTextParagraphLayoutBox* container = GetFocusObject();
int hitTestFlags = wxRICHTEXT_HITTEST_NO_NESTED_OBJECTS|wxRICHTEXT_HITTEST_NO_FLOATING_OBJECTS|wxRICHTEXT_HITTEST_HONOUR_ATOMIC;
+ bool lineIsEmpty = false;
if (notInThisObject)
{
// If we know we're navigating out of the current object,
if (notInThisObject)
{
// If we know we're navigating out of the current object,
{
wxRichTextLine* lineObj = GetFocusObject()->GetLineForVisibleLineNumber(newLine);
if (lineObj)
{
wxRichTextLine* lineObj = GetFocusObject()->GetLineForVisibleLineNumber(newLine);
if (lineObj)
pt.y = lineObj->GetAbsolutePosition().y + 2;
pt.y = lineObj->GetAbsolutePosition().y + 2;
+ if (lineObj->GetRange().GetStart() == lineObj->GetRange().GetEnd())
+ lineIsEmpty = true;
+ }
}
bool caretLineStart = true;
}
bool caretLineStart = true;
+
+ // If the line is empty, there is only one possible position for the caret,
+ // so force the 'before' state so FindCaretPositionForCharacterPosition doesn't
+ // just return the same position.
+ if (lineIsEmpty)
+ {
+ hitTest &= ~wxRICHTEXT_HITTEST_AFTER;
+ hitTest |= wxRICHTEXT_HITTEST_BEFORE;
+ }
long caretPosition = FindCaretPositionForCharacterPosition(newPos, hitTest, container, caretLineStart);
long newSelEnd = caretPosition;
bool extendSel;
long caretPosition = FindCaretPositionForCharacterPosition(newPos, hitTest, container, caretLineStart);
long newSelEnd = caretPosition;
bool extendSel;