Fix QLineControl work properly with input method selection event
Same as what 1189ebff32 did for
QWidgetLineControl.
Change-Id: I0991c2a2af126cfd7203829adc33bb4e6d45a7f2
Reviewed-by: Joona Petrell <joona.t.petrell@nokia.com>
Reviewed-by: Lars Knoll <lars.knoll@nokia.com>
bb10
parent
47304c2c04
commit
9eba201a48
|
|
@ -249,13 +249,13 @@ void QLineControl::setSelection(int start, int length)
|
|||
}
|
||||
|
||||
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;
|
||||
|
|
@ -419,6 +419,7 @@ void QLineControl::processInputMethodEvent(QInputMethodEvent *event)
|
|||
|| event->preeditString() != preeditAreaText()
|
||||
|| event->replacementLength() > 0;
|
||||
bool cursorPositionChanged = false;
|
||||
bool selectionChange = false;
|
||||
|
||||
if (isGettingInput) {
|
||||
// If any text is being input, remove selected text.
|
||||
|
|
@ -462,6 +463,7 @@ void QLineControl::processInputMethodEvent(QInputMethodEvent *event)
|
|||
if (m_selend < m_selstart) {
|
||||
qSwap(m_selstart, m_selend);
|
||||
}
|
||||
selectionChange = true;
|
||||
} else {
|
||||
m_selstart = m_selend = 0;
|
||||
}
|
||||
|
|
@ -499,6 +501,9 @@ void QLineControl::processInputMethodEvent(QInputMethodEvent *event)
|
|||
emit updateMicroFocus();
|
||||
if (isGettingInput)
|
||||
finishChange(priorState);
|
||||
|
||||
if (selectionChange)
|
||||
emit selectionChanged();
|
||||
}
|
||||
|
||||
/*!
|
||||
|
|
@ -586,7 +591,7 @@ void QLineControl::selectWordAtPos(int cursor)
|
|||
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;
|
||||
|
|
@ -617,7 +622,7 @@ bool QLineControl::finishChange(int validateFromState, bool update, bool edited)
|
|||
m_textDirty = false;
|
||||
}
|
||||
updateDisplayText();
|
||||
lineDirty |= m_textDirty;
|
||||
|
||||
if (m_textDirty) {
|
||||
m_textDirty = false;
|
||||
QString actualText = text();
|
||||
|
|
|
|||
Loading…
Reference in New Issue