Make it easier to select words at the start of a line.
authorAndrew den Exter <andrew.den-exter@nokia.com>
Wed, 24 Aug 2011 01:26:29 +0000 (11:26 +1000)
committerQt by Nokia <qt-info@nokia.com>
Mon, 12 Dec 2011 12:19:13 +0000 (13:19 +0100)
QTextControl's word selection will only include a word if the cursor
position is past the mid point of the word. This can make it
difficult to select words near the edges of the screen on touch
devices.  For the TextEdit word selection mode select a word ignore
the relative position within a word.

Task-number: QT-5206
Task-number: QTBUG-20719
Change-Id: I77e71e01d8021d66ada785cf894ba876faccefdf
Reviewed-by: Joona Petrell <joona.t.petrell@nokia.com>
src/widgets/widgets/qwidgettextcontrol.cpp

index a55e001..c63dcf0 100644 (file)
@@ -691,20 +691,30 @@ void QWidgetTextControlPrivate::extendWordwiseSelection(int suggestedNewPosition
     if (!wordSelectionEnabled && (mouseXPosition < wordStartX || mouseXPosition > wordEndX))
         return;
 
-    // keep the already selected word even when moving to the left
-    // (#39164)
-    if (suggestedNewPosition < selectedWordOnDoubleClick.position())
-        cursor.setPosition(selectedWordOnDoubleClick.selectionEnd());
-    else
-        cursor.setPosition(selectedWordOnDoubleClick.selectionStart());
+    if (wordSelectionEnabled) {
+        if (suggestedNewPosition < selectedWordOnDoubleClick.position()) {
+            cursor.setPosition(selectedWordOnDoubleClick.selectionEnd());
+            setCursorPosition(wordStartPos, QTextCursor::KeepAnchor);
+        } else {
+            cursor.setPosition(selectedWordOnDoubleClick.selectionStart());
+            setCursorPosition(wordEndPos, QTextCursor::KeepAnchor);
+        }
+    } else {
+        // keep the already selected word even when moving to the left
+        // (#39164)
+        if (suggestedNewPosition < selectedWordOnDoubleClick.position())
+            cursor.setPosition(selectedWordOnDoubleClick.selectionEnd());
+        else
+            cursor.setPosition(selectedWordOnDoubleClick.selectionStart());
 
-    const qreal differenceToStart = mouseXPosition - wordStartX;
-    const qreal differenceToEnd = wordEndX - mouseXPosition;
+        const qreal differenceToStart = mouseXPosition - wordStartX;
+        const qreal differenceToEnd = wordEndX - mouseXPosition;
 
-    if (differenceToStart < differenceToEnd)
-        setCursorPosition(wordStartPos, QTextCursor::KeepAnchor);
-    else
-        setCursorPosition(wordEndPos, QTextCursor::KeepAnchor);
+        if (differenceToStart < differenceToEnd)
+            setCursorPosition(wordStartPos, QTextCursor::KeepAnchor);
+        else
+            setCursorPosition(wordEndPos, QTextCursor::KeepAnchor);
+    }
 
     if (interactionFlags & Qt::TextSelectableByMouse) {
 #ifndef QT_NO_CLIPBOARD