Do not compute caret geometry when we are not ready to do so.

This avoid crashes with invalid cache.

Fixes bug #11763.
This commit is contained in:
Jean-Marc Lasgouttes 2020-04-04 18:02:04 +02:00
parent 1264934898
commit b7f6b979d0
2 changed files with 17 additions and 6 deletions

View File

@ -443,12 +443,16 @@ void GuiWorkArea::startBlinkingCaret()
if (view().busy())
return;
Point p;
int h = 0;
d->buffer_view_->caretPosAndHeight(p, h);
// Don't start blinking if the cursor isn't on screen.
if (!d->buffer_view_->cursorInView(p, h))
return;
// we cannot update geometry if not ready and we do not need to if
// caret is not in view.
if (!d->buffer_view_->buffer().undo().activeUndoGroup()) {
Point p;
int h = 0;
d->buffer_view_->caretPosAndHeight(p, h);
// Don't start blinking if the cursor isn't on screen.
if (!d->buffer_view_->cursorInView(p, h))
return;
}
d->showCaret();
@ -611,6 +615,11 @@ void GuiWorkArea::Private::resizeBufferView()
void GuiWorkArea::Private::updateCaretGeometry()
{
// we cannot update geometry if not ready and we do not need to if
// caret is not in view.
if (buffer_view_->buffer().undo().activeUndoGroup())
return;
Point point;
int h = 0;
buffer_view_->caretPosAndHeight(point, h);

View File

@ -98,6 +98,8 @@ What's new
- Preserve paragarph spacing when breaking a paragraph at the start
(bug 11817).
- Avoid crash in some cases where a dialog is shown during operation
(bug 11763).
* INTERNALS