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,
{
wxRichTextLine* lineObj = GetFocusObject()->GetLineForVisibleLineNumber(newLine);
if (lineObj)
+ {
pt.y = lineObj->GetAbsolutePosition().y + 2;
+ if (lineObj->GetRange().GetStart() == lineObj->GetRange().GetEnd())
+ lineIsEmpty = true;
+ }
else
return false;
}
}
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;