aboutsummaryrefslogtreecommitdiffstats
path: root/src/declarative/items
diff options
context:
space:
mode:
authorPekka Vuorela <pekka.ta.vuorela@nokia.com>2011-11-16 13:43:05 +0200
committerQt by Nokia <qt-info@nokia.com>2011-12-01 13:30:23 +0100
commitb5f206ecd51c64d9167e019c734b8a54d3ee8c93 (patch)
tree4a86d8f5a758b6915e30fa6a2cd70ba679a82c84 /src/declarative/items
parentca00a4a5056fe15929e32b125bcee095671db8d6 (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.cpp42
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);