From d3dcc6f610b97be7cbfbb0a65988e5940568c825 Mon Sep 17 00:00:00 2001 From: Richard Moe Gustavsen Date: Tue, 19 Apr 2016 12:50:47 +0200 Subject: QWidgetTextControl: respect run-time changes to cursorFlashTime MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit cursorFlashTime will now change dynamically from QPA while platform controlled text selection (on mobile) is ongoing. This patch will therefore update QWidgetTextControl so that it listens to the cursorFlashTimeChanged signal and changes the blinking rate when triggered. Change-Id: I89bdfaab0e93d1d055baba6b132a7911d2ae84f6 Reviewed-by: Jan Arve Sæther --- src/widgets/widgets/qwidgettextcontrol.cpp | 26 ++++++++++++++++++++------ src/widgets/widgets/qwidgettextcontrol_p_p.h | 2 ++ 2 files changed, 22 insertions(+), 6 deletions(-) (limited to 'src/widgets/widgets') diff --git a/src/widgets/widgets/qwidgettextcontrol.cpp b/src/widgets/widgets/qwidgettextcontrol.cpp index cc1726c362..571563d29a 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), cursorIsFocusIndicator(false), + : doc(0), cursorOn(false), blinkingEnabled(false), cursorIsFocusIndicator(false), #ifndef Q_OS_ANDROID interactionFlags(Qt::TextEditorInteraction), #else @@ -687,15 +687,29 @@ void QWidgetTextControlPrivate::_q_documentLayoutChanged() void QWidgetTextControlPrivate::setBlinkingCursorEnabled(bool enable) { - Q_Q(QWidgetTextControl); + if (blinkingEnabled == enable) + return; - if (enable && QApplication::cursorFlashTime() > 0) - cursorBlinkTimer.start(QApplication::cursorFlashTime() / 2, q); + blinkingEnabled = enable; + + if (enable) + connect(qApp->styleHints(), &QStyleHints::cursorFlashTimeChanged, this, &QWidgetTextControlPrivate::updateCursorBlinking); else - cursorBlinkTimer.stop(); + disconnect(qApp->styleHints(), &QStyleHints::cursorFlashTimeChanged, this, &QWidgetTextControlPrivate::updateCursorBlinking); + + updateCursorBlinking(); +} - cursorOn = enable; +void QWidgetTextControlPrivate::updateCursorBlinking() +{ + cursorBlinkTimer.stop(); + if (blinkingEnabled) { + int flashTime = QGuiApplication::styleHints()->cursorFlashTime(); + if (flashTime >= 2) + cursorBlinkTimer.start(flashTime / 2, q_func()); + } + cursorOn = true; repaintCursor(); } diff --git a/src/widgets/widgets/qwidgettextcontrol_p_p.h b/src/widgets/widgets/qwidgettextcontrol_p_p.h index 4feebdd9ef..16a3a153cc 100644 --- a/src/widgets/widgets/qwidgettextcontrol_p_p.h +++ b/src/widgets/widgets/qwidgettextcontrol_p_p.h @@ -112,6 +112,7 @@ public: void _q_contentsChanged(int from, int charsRemoved, int charsAdded); void setBlinkingCursorEnabled(bool enable); + void updateCursorBlinking(); void extendWordwiseSelection(int suggestedNewPosition, qreal mouseXPosition); void extendBlockwiseSelection(int suggestedNewPosition); @@ -175,6 +176,7 @@ public: QTextDocument *doc; bool cursorOn; + bool blinkingEnabled; QTextCursor cursor; bool cursorIsFocusIndicator; QTextCharFormat lastCharFormat; -- cgit v1.2.3