Revert "Do not display caret when we're not ready"

This reverts commit e99436b529.

Kornel discovered a regression due to this commit. See:

  https://www.mail-archive.com/search?l=mid&q=20200307121525.56be047b%40admin1-desktop
This commit is contained in:
Scott Kostyshak 2020-03-07 16:47:35 -05:00
parent c32e37b702
commit 2ee5d3c3d5
2 changed files with 26 additions and 20 deletions

View File

@ -439,6 +439,14 @@ void GuiWorkArea::stopBlinkingCaret()
void GuiWorkArea::startBlinkingCaret()
{
// do not show the cursor if the view is busy
if (view().busy())
return;
// Don't start blinking if the cursor isn't on screen.
if (!d->buffer_view_->caretInView())
return;
d->showCaret();
// Avoid blinking when debugging PAINTING, since it creates too much noise
@ -633,29 +641,27 @@ void GuiWorkArea::Private::updateCaretGeometry()
}
void GuiWorkArea::Private::showCaret(bool show)
void GuiWorkArea::Private::showCaret()
{
if (caret_visible_ == show)
return;
caret_visible_ = show;
/**
* Do not trigger the painting machinery if either
* 1. the view is busy (no updates at all)
* 2. The we are not ready because document is being modified (see bug #11763)
* 3. The caret is outside of screen anyway.
*/
if (p->view().busy()
|| buffer_view_->buffer().undo().activeUndoGroup()
|| !buffer_view_->caretInView())
return;
if (caret_visible_)
updateCaretGeometry();
return;
updateCaretGeometry();
p->viewport()->update();
}
void GuiWorkArea::Private::hideCaret()
{
if (!caret_visible_)
return;
caret_visible_ = false;
//if (!qApp->focusWidget())
p->viewport()->update();
}
void GuiWorkArea::Private::updateScrollbar()
{
// Prevent setRange() and setSliderPosition from causing recursive calls via

View File

@ -87,10 +87,10 @@ struct GuiWorkArea::Private
void dispatch(FuncRequest const & cmd0);
/// recompute the shape and position of the caret
void updateCaretGeometry();
/// show the caret if it is not visible. Same as \c hideCaret when \c show is false.
void showCaret(bool show = true);
/// show the caret if it is not visible
void showCaret();
/// hide the caret if it is visible
void hideCaret() { showCaret(false); }
void hideCaret();
/// Set the range and value of the scrollbar and connect to its valueChanged
/// signal.
void updateScrollbar();