Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(486)

Unified Diff: third_party/WebKit/Source/core/editing/FrameCaret.cpp

Issue 2723003002: Editing: Fix caret blinking after a typing. (Closed)
Patch Set: Apply review comments Created 3 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: third_party/WebKit/Source/core/editing/FrameCaret.cpp
diff --git a/third_party/WebKit/Source/core/editing/FrameCaret.cpp b/third_party/WebKit/Source/core/editing/FrameCaret.cpp
index f45bead89376b6cec0fd112fff8c2285135a8d5b..0024a45b4226861398741ce2e980dcb1b0a3417d 100644
--- a/third_party/WebKit/Source/core/editing/FrameCaret.cpp
+++ b/third_party/WebKit/Source/core/editing/FrameCaret.cpp
@@ -28,9 +28,7 @@
#include "core/dom/TaskRunnerHelper.h"
#include "core/editing/CaretDisplayItemClient.h"
#include "core/editing/EditingUtilities.h"
-#include "core/editing/Editor.h"
#include "core/editing/SelectionEditor.h"
-#include "core/editing/commands/CompositeEditCommand.h"
#include "core/frame/FrameView.h"
#include "core/frame/LocalFrame.h"
#include "core/frame/Settings.h"
@@ -49,9 +47,10 @@ FrameCaret::FrameCaret(LocalFrame& frame,
m_frame(frame),
m_displayItemClient(new CaretDisplayItemClient()),
m_caretVisibility(CaretVisibility::Hidden),
- m_caretBlinkTimer(TaskRunnerHelper::get(TaskType::UnspecedTimer, &frame),
- this,
- &FrameCaret::caretBlinkTimerFired),
+ m_caretBlinkTimer(new TaskRunnerTimer<FrameCaret>(
+ TaskRunnerHelper::get(TaskType::UnspecedTimer, &frame),
+ this,
+ &FrameCaret::caretBlinkTimerFired)),
m_shouldPaintCaret(true),
m_isCaretBlinkingSuspended(false),
m_shouldShowBlockCursor(false) {}
@@ -75,11 +74,6 @@ const PositionWithAffinity FrameCaret::caretPosition() const {
return PositionWithAffinity(selection.start(), selection.affinity());
}
-inline static bool shouldStopBlinkingDueToTypingCommand(LocalFrame* frame) {
- return frame->editor().lastEditCommand() &&
- frame->editor().lastEditCommand()->shouldStopCaretBlinking();
-}
-
void FrameCaret::updateAppearance() {
DCHECK_GE(m_frame->document()->lifecycle().state(),
DocumentLifecycle::LayoutClean);
@@ -91,33 +85,30 @@ void FrameCaret::updateAppearance() {
!isLogicalEndOfLine(createVisiblePosition(caretPosition()));
bool shouldBlink = !paintBlockCursor && shouldBlinkCaret();
-
- // If the caret moved, stop the blink timer so we can restart with a
- // black caret in the new location.
- if (!shouldBlink || shouldStopBlinkingDueToTypingCommand(m_frame))
+ if (!shouldBlink) {
stopCaretBlinkTimer();
-
+ return;
+ }
// Start blinking with a black caret. Be sure not to restart if we're
// already blinking in the right location.
- if (shouldBlink)
- startBlinkCaret();
+ startBlinkCaret();
}
void FrameCaret::stopCaretBlinkTimer() {
- if (m_caretBlinkTimer.isActive() || m_shouldPaintCaret)
+ if (m_caretBlinkTimer->isActive() || m_shouldPaintCaret)
scheduleVisualUpdateForPaintInvalidationIfNeeded();
m_shouldPaintCaret = false;
- m_caretBlinkTimer.stop();
+ m_caretBlinkTimer->stop();
}
void FrameCaret::startBlinkCaret() {
// Start blinking with a black caret. Be sure not to restart if we're
// already blinking in the right location.
- if (m_caretBlinkTimer.isActive())
+ if (m_caretBlinkTimer->isActive())
return;
if (double blinkInterval = LayoutTheme::theme().caretBlinkInterval())
- m_caretBlinkTimer.startRepeating(blinkInterval, BLINK_FROM_HERE);
+ m_caretBlinkTimer->startRepeating(blinkInterval, BLINK_FROM_HERE);
m_shouldPaintCaret = true;
scheduleVisualUpdateForPaintInvalidationIfNeeded();
@@ -238,4 +229,10 @@ void FrameCaret::scheduleVisualUpdateForPaintInvalidationIfNeeded() {
frameView->scheduleVisualUpdateForPaintInvalidationIfNeeded();
}
+void FrameCaret::recreateCaretBlinkTimerForTesting(
+ RefPtr<WebTaskRunner> taskRunner) {
+ m_caretBlinkTimer.reset(new TaskRunnerTimer<FrameCaret>(
+ std::move(taskRunner), this, &FrameCaret::caretBlinkTimerFired));
+}
+
} // namespace blink
« no previous file with comments | « third_party/WebKit/Source/core/editing/FrameCaret.h ('k') | third_party/WebKit/Source/core/editing/FrameCaretTest.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698