diff options
Diffstat (limited to 'src/quick/items')
-rw-r--r-- | src/quick/items/qquicktextcontrol.cpp | 3 | ||||
-rw-r--r-- | src/quick/items/qquicktextedit.cpp | 1 | ||||
-rw-r--r-- | src/quick/items/qquicktextedit_p_p.h | 2 | ||||
-rw-r--r-- | src/quick/items/qquicktextinput.cpp | 25 | ||||
-rw-r--r-- | src/quick/items/qquicktextinput_p.h | 5 | ||||
-rw-r--r-- | src/quick/items/qquicktextinput_p_p.h | 2 |
6 files changed, 35 insertions, 3 deletions
diff --git a/src/quick/items/qquicktextcontrol.cpp b/src/quick/items/qquicktextcontrol.cpp index 3d4244c9fd..06ab5c3fc2 100644 --- a/src/quick/items/qquicktextcontrol.cpp +++ b/src/quick/items/qquicktextcontrol.cpp @@ -1547,6 +1547,7 @@ void QQuickTextControlPrivate::focusEvent(QFocusEvent *e) { Q_Q(QQuickTextControl); emit q->updateRequest(q->selectionRect()); + hasFocus = e->gotFocus(); if (e->gotFocus()) { setBlinkingCursorEnabled(interactionFlags & (Qt::TextEditable | Qt::TextSelectableByKeyboard)); } else { @@ -1558,9 +1559,9 @@ void QQuickTextControlPrivate::focusEvent(QFocusEvent *e) && e->reason() != Qt::PopupFocusReason && cursor.hasSelection()) { cursor.clearSelection(); + emit q->selectionChanged(); } } - hasFocus = e->gotFocus(); } QString QQuickTextControlPrivate::anchorForCursor(const QTextCursor &anchorCursor) const diff --git a/src/quick/items/qquicktextedit.cpp b/src/quick/items/qquicktextedit.cpp index f544226b2a..4d5776df56 100644 --- a/src/quick/items/qquicktextedit.cpp +++ b/src/quick/items/qquicktextedit.cpp @@ -1806,6 +1806,7 @@ void QQuickTextEditPrivate::init() control->setView(q); control->setTextInteractionFlags(Qt::LinksAccessibleByMouse | Qt::TextSelectableByKeyboard | Qt::TextEditable); control->setAcceptRichText(false); + control->setCursorIsFocusIndicator(true); // QQuickTextControl follows the default text color // defined by the platform, declarative text diff --git a/src/quick/items/qquicktextedit_p_p.h b/src/quick/items/qquicktextedit_p_p.h index 6a4cd9f1df..41b64cc567 100644 --- a/src/quick/items/qquicktextedit_p_p.h +++ b/src/quick/items/qquicktextedit_p_p.h @@ -72,7 +72,7 @@ public: QQuickTextEditPrivate() : color("black"), hAlign(QQuickTextEdit::AlignLeft), vAlign(QQuickTextEdit::AlignTop), documentDirty(true), dirty(false), richText(false), cursorVisible(false), focusOnPress(true), - persistentSelection(true), requireImplicitWidth(false), selectByMouse(false), canPaste(false), + persistentSelection(false), requireImplicitWidth(false), selectByMouse(false), canPaste(false), canPasteValid(false), hAlignImplicit(true), rightToLeftText(false), useImageFallback(false), textCached(false), textMargin(0.0), lastSelectionStart(0), lastSelectionEnd(0), cursorComponent(0), cursor(0), diff --git a/src/quick/items/qquicktextinput.cpp b/src/quick/items/qquicktextinput.cpp index 3007ce18b4..5311b2dc04 100644 --- a/src/quick/items/qquicktextinput.cpp +++ b/src/quick/items/qquicktextinput.cpp @@ -2185,6 +2185,28 @@ void QQuickTextInput::setMouseSelectionMode(SelectionMode mode) } /*! + \qmlproperty bool QtQuick2::TextInput::persistentSelection + + Whether the TextInput should keep its selection when it loses active focus to another + item in the scene. By default this is set to false; +*/ + +bool QQuickTextInput::persistentSelection() const +{ + Q_D(const QQuickTextInput); + return d->persistentSelection; +} + +void QQuickTextInput::setPersistentSelection(bool on) +{ + Q_D(QQuickTextInput); + if (d->persistentSelection == on) + return; + d->persistentSelection = on; + emit persistentSelectionChanged(); +} + +/*! \qmlproperty bool QtQuick2::TextInput::canPaste Returns true if the TextInput is writable and the content of the clipboard is @@ -2438,7 +2460,8 @@ void QQuickTextInput::itemChange(ItemChange change, const ItemChangeData &value) if (!hasFocus) { d->commitPreedit(); - d->deselect(); + if (!d->persistentSelection) + d->deselect(); disconnect(qApp->inputPanel(), SIGNAL(inputDirectionChanged(Qt::LayoutDirection)), this, SLOT(q_updateAlignment())); } else { diff --git a/src/quick/items/qquicktextinput_p.h b/src/quick/items/qquicktextinput_p.h index 3f3e926415..70a2f0a9a5 100644 --- a/src/quick/items/qquicktextinput_p.h +++ b/src/quick/items/qquicktextinput_p.h @@ -98,6 +98,7 @@ class Q_AUTOTEST_EXPORT QQuickTextInput : public QQuickImplicitSizeItem Q_PROPERTY(bool autoScroll READ autoScroll WRITE setAutoScroll NOTIFY autoScrollChanged) Q_PROPERTY(bool selectByMouse READ selectByMouse WRITE setSelectByMouse NOTIFY selectByMouseChanged) Q_PROPERTY(SelectionMode mouseSelectionMode READ mouseSelectionMode WRITE setMouseSelectionMode NOTIFY mouseSelectionModeChanged) + Q_PROPERTY(bool persistentSelection READ persistentSelection WRITE setPersistentSelection NOTIFY persistentSelectionChanged) Q_PROPERTY(bool canPaste READ canPaste NOTIFY canPasteChanged) Q_PROPERTY(bool canUndo READ canUndo NOTIFY canUndoChanged) Q_PROPERTY(bool canRedo READ canRedo NOTIFY canRedoChanged) @@ -233,6 +234,9 @@ public: SelectionMode mouseSelectionMode() const; void setMouseSelectionMode(SelectionMode mode); + bool persistentSelection() const; + void setPersistentSelection(bool persist); + bool hasAcceptableInput() const; QVariant inputMethodQuery(Qt::InputMethodQuery property) const; @@ -279,6 +283,7 @@ Q_SIGNALS: void autoScrollChanged(bool autoScroll); void selectByMouseChanged(bool selectByMouse); void mouseSelectionModeChanged(SelectionMode mode); + void persistentSelectionChanged(); void canPasteChanged(); void canUndoChanged(); void canRedoChanged(); diff --git a/src/quick/items/qquicktextinput_p_p.h b/src/quick/items/qquicktextinput_p_p.h index 40cba8de55..a124dbbdad 100644 --- a/src/quick/items/qquicktextinput_p_p.h +++ b/src/quick/items/qquicktextinput_p_p.h @@ -117,6 +117,7 @@ public: , hAlignImplicit(true) , selectPressed(false) , textLayoutDirty(true) + , persistentSelection(false) , m_hideCursor(false) , m_separator(0) , m_readOnly(0) @@ -244,6 +245,7 @@ public: bool hAlignImplicit:1; bool selectPressed:1; bool textLayoutDirty:1; + bool persistentSelection:1; uint m_hideCursor : 1; // used to hide the m_cursor inside preedit areas uint m_separator : 1; |