From 3cdc02d38274d42a0a25a50e3ed9de2c5ad264f0 Mon Sep 17 00:00:00 2001 From: Richard Moe Gustavsen Date: Fri, 29 Apr 2016 14:41:08 +0200 Subject: QWidgetTextControl: only show cursor when having focus MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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 --- src/widgets/widgets/qwidgettextcontrol.cpp | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) (limited to 'src/widgets/widgets/qwidgettextcontrol.cpp') 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 -- cgit v1.2.3