summaryrefslogtreecommitdiffstats
path: root/src/widgets/widgets/qwidgettextcontrol.cpp
diff options
context:
space:
mode:
authorRichard Moe Gustavsen <richard.gustavsen@theqtcompany.com>2016-04-29 14:41:08 +0200
committerRichard Moe Gustavsen <richard.gustavsen@theqtcompany.com>2016-04-30 11:26:20 +0000
commit3cdc02d38274d42a0a25a50e3ed9de2c5ad264f0 (patch)
tree4e0f91c6bca359911af37a5fc8cbe53ea88396e4 /src/widgets/widgets/qwidgettextcontrol.cpp
parent392372392c3c9096984a535a975dda163a62a28a (diff)
QWidgetTextControl: only show cursor when having focus
Commit d3dcc6f introduced a regression to QTextEdit, leaving it to always show the cursor regardless of focus. The reason is that QTextArea used to toggle visibilty by setting the cursor blink rate. What it really wanted to do was to set cursor visibility explicit. This patch implements function setCursorVisible, and updates the places that used to call setBlinkingCursorEnabled to instead call setCursorVisible (where it makes sense). Change-Id: I58ea965178d4faaf5b09f6f6a37a37d5e8b99c97 Reviewed-by: Jan Arve Sæther <jan-arve.saether@theqtcompany.com>
Diffstat (limited to 'src/widgets/widgets/qwidgettextcontrol.cpp')
-rw-r--r--src/widgets/widgets/qwidgettextcontrol.cpp22
1 files changed, 16 insertions, 6 deletions
diff --git a/src/widgets/widgets/qwidgettextcontrol.cpp b/src/widgets/widgets/qwidgettextcontrol.cpp
index 571563d29a..52eb4e4078 100644
--- a/src/widgets/widgets/qwidgettextcontrol.cpp
+++ b/src/widgets/widgets/qwidgettextcontrol.cpp
@@ -112,7 +112,7 @@ static QTextLine currentTextLine(const QTextCursor &cursor)
}
QWidgetTextControlPrivate::QWidgetTextControlPrivate()
- : doc(0), cursorOn(false), blinkingEnabled(false), cursorIsFocusIndicator(false),
+ : doc(0), cursorOn(false), blinkingEnabled(true), cursorVisible(false), cursorIsFocusIndicator(false),
#ifndef Q_OS_ANDROID
interactionFlags(Qt::TextEditorInteraction),
#else
@@ -685,6 +685,16 @@ void QWidgetTextControlPrivate::_q_documentLayoutChanged()
}
+void QWidgetTextControlPrivate::setCursorVisible(bool visible)
+{
+ if (cursorVisible == visible)
+ return;
+
+ cursorVisible = visible;
+
+ updateCursorBlinking();
+}
+
void QWidgetTextControlPrivate::setBlinkingCursorEnabled(bool enable)
{
if (blinkingEnabled == enable)
@@ -703,13 +713,13 @@ void QWidgetTextControlPrivate::setBlinkingCursorEnabled(bool enable)
void QWidgetTextControlPrivate::updateCursorBlinking()
{
cursorBlinkTimer.stop();
- if (blinkingEnabled) {
+ if (cursorVisible && blinkingEnabled) {
int flashTime = QGuiApplication::styleHints()->cursorFlashTime();
if (flashTime >= 2)
cursorBlinkTimer.start(flashTime / 2, q_func());
}
- cursorOn = true;
+ cursorOn = cursorVisible;
repaintCursor();
}
@@ -2170,13 +2180,13 @@ void QWidgetTextControlPrivate::focusEvent(QFocusEvent *e)
#endif
cursorOn = (interactionFlags & (Qt::TextSelectableByKeyboard | Qt::TextEditable));
if (interactionFlags & Qt::TextEditable) {
- setBlinkingCursorEnabled(true);
+ setCursorVisible(true);
}
#ifdef QT_KEYPAD_NAVIGATION
}
#endif
} else {
- setBlinkingCursorEnabled(false);
+ setCursorVisible(false);
if (cursorIsFocusIndicator
&& e->reason() != Qt::ActiveWindowFocusReason
@@ -2985,7 +2995,7 @@ void QWidgetTextControl::setTextInteractionFlags(Qt::TextInteractionFlags flags)
d->interactionFlags = flags;
if (d->hasFocus)
- d->setBlinkingCursorEnabled(flags & Qt::TextEditable);
+ d->setCursorVisible(flags & Qt::TextEditable);
}
Qt::TextInteractionFlags QWidgetTextControl::textInteractionFlags() const