}
if (length > 0) {
- if (start == m_selstart && start + length == m_selend)
+ if (start == m_selstart && start + length == m_selend && m_cursor == m_selend)
return;
m_selstart = start;
m_selend = qMin(start + length, (int)m_text.length());
m_cursor = m_selend;
} else if (length < 0){
- if (start == m_selend && start + length == m_selstart)
+ if (start == m_selend && start + length == m_selstart && m_cursor == m_selstart)
return;
m_selstart = qMax(start + length, 0);
m_selend = start;
|| event->preeditString() != preeditAreaText()
|| event->replacementLength() > 0;
bool cursorPositionChanged = false;
+ bool selectionChange = false;
if (isGettingInput) {
// If any text is being input, remove selected text.
if (m_selend < m_selstart) {
qSwap(m_selstart, m_selend);
}
+ selectionChange = true;
} else {
m_selstart = m_selend = 0;
}
emit updateMicroFocus();
if (isGettingInput)
finishChange(priorState);
+
+ if (selectionChange)
+ emit selectionChanged();
}
/*!
bool QLineControl::finishChange(int validateFromState, bool update, bool edited)
{
Q_UNUSED(update)
- bool lineDirty = m_selDirty;
+
if (m_textDirty) {
// do validation
bool wasValidInput = m_validInput;
m_textDirty = false;
}
updateDisplayText();
- lineDirty |= m_textDirty;
+
if (m_textDirty) {
m_textDirty = false;
QString actualText = text();