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/qtquick1 | |
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/qtquick1')
-rw-r--r-- | src/qtquick1/graphicsitems/qdeclarativetextinput.cpp | 55 |
1 files changed, 25 insertions, 30 deletions
diff --git a/src/qtquick1/graphicsitems/qdeclarativetextinput.cpp b/src/qtquick1/graphicsitems/qdeclarativetextinput.cpp index 04aa06d7c8..d2760d116d 100644 --- a/src/qtquick1/graphicsitems/qdeclarativetextinput.cpp +++ b/src/qtquick1/graphicsitems/qdeclarativetextinput.cpp @@ -1124,13 +1124,13 @@ Handles the given mouse \a event. void QDeclarative1TextInput::mouseDoubleClickEvent(QGraphicsSceneMouseEvent *event) { Q_D(QDeclarative1TextInput); - if (d->sendMouseEventToInputContext(event, QEvent::MouseButtonDblClick)) - return; - if (d->selectByMouse) { + if (d->selectByMouse && event->button() == Qt::LeftButton) { int cursor = d->xToPos(event->pos().x()); d->control->selectWordAtPos(cursor); event->setAccepted(true); } else { + if (d->sendMouseEventToInputContext(event, QEvent::MouseButtonDblClick)) + return; QDeclarative1PaintedItem::mouseDoubleClickEvent(event); } } @@ -1138,8 +1138,9 @@ void QDeclarative1TextInput::mouseDoubleClickEvent(QGraphicsSceneMouseEvent *eve void QDeclarative1TextInput::mousePressEvent(QGraphicsSceneMouseEvent *event) { Q_D(QDeclarative1TextInput); - if (d->sendMouseEventToInputContext(event, QEvent::MouseButtonPress)) - return; + + d->pressPos = event->pos(); + if(d->focusOnPress){ bool hadActiveFocus = hasActiveFocus(); forceActiveFocus(); @@ -1157,8 +1158,10 @@ void QDeclarative1TextInput::mousePressEvent(QGraphicsSceneMouseEvent *event) if (d->selectByMouse) { setKeepMouseGrab(false); d->selectPressed = true; - d->pressPos = event->pos(); } + if (d->sendMouseEventToInputContext(event, QEvent::MouseButtonPress)) + return; + bool mark = (event->modifiers() & Qt::ShiftModifier) && d->selectByMouse; int cursor = d->xToPos(event->pos().x()); d->control->moveCursor(cursor, mark); @@ -1168,12 +1171,20 @@ void QDeclarative1TextInput::mousePressEvent(QGraphicsSceneMouseEvent *event) void QDeclarative1TextInput::mouseMoveEvent(QGraphicsSceneMouseEvent *event) { Q_D(QDeclarative1TextInput); - if (d->sendMouseEventToInputContext(event, QEvent::MouseMove)) - return; + if (d->selectPressed) { if (qAbs(int(event->pos().x() - d->pressPos.x())) > QApplication::startDragDistance()) setKeepMouseGrab(true); - moveCursorSelection(d->xToPos(event->pos().x()), d->mouseSelectionMode); + + if (d->control->composeMode()) { + // start selection + int startPos = d->xToPos(d->pressPos.x()); + int currentPos = d->xToPos(event->pos().x()); + if (startPos != currentPos) + d->control->setSelection(startPos, currentPos - startPos); + } else { + moveCursorSelection(d->xToPos(event->pos().x()), d->mouseSelectionMode); + } event->setAccepted(true); } else { QDeclarative1PaintedItem::mouseMoveEvent(event); @@ -1215,28 +1226,12 @@ bool QDeclarative1TextInputPrivate::sendMouseEventToInputContext( if (event->widget() && control->composeMode()) { int tmp_cursor = xToPos(event->pos().x()); int mousePos = tmp_cursor - control->cursor(); - if (mousePos < 0 || mousePos > control->preeditAreaText().length()) { - mousePos = -1; - // don't send move events outside the preedit area - if (eventType == QEvent::MouseMove) - return true; - } - - QInputContext *qic = event->widget()->inputContext(); - if (qic) { - QMouseEvent mouseEvent( - eventType, - event->widget()->mapFromGlobal(event->screenPos()), - event->screenPos(), - event->button(), - event->buttons(), - event->modifiers()); - // may be causing reset() in some input methods - qic->mouseHandler(mousePos, &mouseEvent); - event->setAccepted(mouseEvent.isAccepted()); - } - if (!control->preeditAreaText().isEmpty()) + if (mousePos >= 0 && mousePos <= control->preeditAreaText().length()) { + if (eventType == QEvent::MouseButtonRelease) { + qApp->inputPanel()->invokeAction(QInputPanel::Click, mousePos); + } return true; + } } #else Q_UNUSED(event); |