diff options
author | Pekka Vuorela <pekka.ta.vuorela@nokia.com> | 2011-11-16 13:43:05 +0200 |
---|---|---|
committer | Qt by Nokia <qt-info@nokia.com> | 2011-12-01 13:30:23 +0100 |
commit | b5f206ecd51c64d9167e019c734b8a54d3ee8c93 (patch) | |
tree | 4a86d8f5a758b6915e30fa6a2cd70ba679a82c84 /src/declarative/items | |
parent | ca00a4a5056fe15929e32b125bcee095671db8d6 (diff) |
Made TextInput mouse events commit preedit
Similar to what was earlier done on QWidgets editors.
Additionally updated tests to check QInputPanel::invokeAction instead
of the obsolete QInputContext mouse handler.
Change-Id: Ia2bd22eebdeed79cff7a4925129b28dd1500b1ad
Reviewed-by: Joona Petrell <joona.t.petrell@nokia.com>
Diffstat (limited to 'src/declarative/items')
-rw-r--r-- | src/declarative/items/qquicktextinput.cpp | 42 |
1 files changed, 29 insertions, 13 deletions
diff --git a/src/declarative/items/qquicktextinput.cpp b/src/declarative/items/qquicktextinput.cpp index c46eba1b9f..f3cdc8835a 100644 --- a/src/declarative/items/qquicktextinput.cpp +++ b/src/declarative/items/qquicktextinput.cpp @@ -1084,9 +1084,9 @@ void QQuickTextInput::inputMethodEvent(QInputMethodEvent *ev) void QQuickTextInput::mouseDoubleClickEvent(QMouseEvent *event) { Q_D(QQuickTextInput); - if (d->sendMouseEventToInputContext(event)) - return; - if (d->selectByMouse) { + + if (d->selectByMouse && event->button() == Qt::LeftButton) { + d->control->commitPreedit(); int cursor = d->xToPos(event->localPos().x()); d->control->selectWordAtPos(cursor); event->setAccepted(true); @@ -1095,6 +1095,8 @@ void QQuickTextInput::mouseDoubleClickEvent(QMouseEvent *event) d->tripleClickTimer.start(); } } else { + if (d->sendMouseEventToInputContext(event)) + return; QQuickImplicitSizeItem::mouseDoubleClickEvent(event); } } @@ -1102,8 +1104,9 @@ void QQuickTextInput::mouseDoubleClickEvent(QMouseEvent *event) void QQuickTextInput::mousePressEvent(QMouseEvent *event) { Q_D(QQuickTextInput); - if (d->sendMouseEventToInputContext(event)) - return; + + d->pressPos = event->localPos(); + if (d->focusOnPress) { bool hadActiveFocus = hasActiveFocus(); forceActiveFocus(); @@ -1114,7 +1117,6 @@ void QQuickTextInput::mousePressEvent(QMouseEvent *event) if (d->selectByMouse) { setKeepMouseGrab(false); d->selectPressed = true; - d->pressPos = event->localPos(); QPoint distanceVector = d->pressPos.toPoint() - d->tripleClickStartPoint; if (d->hasPendingTripleClick() && distanceVector.manhattanLength() < qApp->styleHints()->startDragDistance()) { @@ -1123,6 +1125,10 @@ void QQuickTextInput::mousePressEvent(QMouseEvent *event) return; } } + + if (d->sendMouseEventToInputContext(event)) + return; + bool mark = (event->modifiers() & Qt::ShiftModifier) && d->selectByMouse; int cursor = d->xToPos(event->localPos().x()); d->control->moveCursor(cursor, mark); @@ -1132,12 +1138,20 @@ void QQuickTextInput::mousePressEvent(QMouseEvent *event) void QQuickTextInput::mouseMoveEvent(QMouseEvent *event) { Q_D(QQuickTextInput); - if (d->sendMouseEventToInputContext(event)) - return; + if (d->selectPressed) { if (qAbs(int(event->localPos().x() - d->pressPos.x())) > qApp->styleHints()->startDragDistance()) setKeepMouseGrab(true); - moveCursorSelection(d->xToPos(event->localPos().x()), d->mouseSelectionMode); + + if (d->control->composeMode()) { + // start selection + int startPos = d->xToPos(d->pressPos.x()); + int currentPos = d->xToPos(event->localPos().x()); + if (startPos != currentPos) + d->control->setSelection(startPos, currentPos - startPos); + } else { + moveCursorSelection(d->xToPos(event->localPos().x()), d->mouseSelectionMode); + } event->setAccepted(true); } else { QQuickImplicitSizeItem::mouseMoveEvent(event); @@ -1161,13 +1175,15 @@ void QQuickTextInput::mouseReleaseEvent(QMouseEvent *event) bool QQuickTextInputPrivate::sendMouseEventToInputContext(QMouseEvent *event) { #if !defined QT_NO_IM - if (control->composeMode() && event->type() == QEvent::MouseButtonRelease) { + if (control->composeMode()) { int tmp_cursor = xToPos(event->localPos().x()); int mousePos = tmp_cursor - control->cursor(); - // may be causing reset() in some input methods - qApp->inputPanel()->invokeAction(QInputPanel::Click, mousePos); - if (!control->preeditAreaText().isEmpty()) + if (mousePos >= 0 && mousePos <= control->preeditAreaText().length()) { + if (event->type() == QEvent::MouseButtonRelease) { + qApp->inputPanel()->invokeAction(QInputPanel::Click, mousePos); + } return true; + } } #else Q_UNUSED(event); |