void GuiWorkArea::paintEvent(QPaintEvent * ev)
{
// Do not trigger the painting machinery if we are not ready (see
- // bug #10989). However, since macOS has turned the screen black at
- // this point, our backing store has to be copied to screen.
- if (view().busy()) {
- // this is a no-op except on macOS.
+ // bug #10989). The second test triggers when in the middle of a
+ // dispatch operation.
+ if (view().busy() || d->buffer_view_->buffer().undo().activeUndoGroup()) {
+ // Since macOS has turned the screen black at this point, our
+ // backing store has to be copied to screen (this is a no-op
+ // except on macOS).
d->updateScreen(ev->rect());
ev->accept();
return;
// insert the processed text in the document (handles undo)
if (!e->commitString().isEmpty()) {
- d->buffer_view_->cursor().beginUndoGroup();
- d->buffer_view_->cursor().insert(qstring_to_ucs4(e->commitString()));
+ FuncRequest cmd(LFUN_SELF_INSERT,
+ qstring_to_ucs4(e->commitString()),
+ FuncRequest::KEYBOARD);
+ dispatch(cmd);
+ // FIXME: this is supposed to remove traces from preedit
+ // string. Can we avoid calling it explicitely?
d->buffer_view_->updateMetrics();
- d->buffer_view_->cursor().endUndoGroup();
- d->updateCaretGeometry();
- viewport()->update();
}
// Hide the caret during the test transformation.