updateCurrentView(cmd, dr);
// the buffer may have been closed by one action
- if (theBufferList().isLoaded(buffer))
+ if (theBufferList().isLoaded(buffer) || theBufferList().isInternal(buffer))
buffer->undo().endUndoGroup();
d->dispatch_result_ = dr;
dispatch(func);
}
// the buffer may have been closed by one action
- if (theBufferList().isLoaded(buffer))
+ if (theBufferList().isLoaded(buffer) || theBufferList().isInternal(buffer))
buffer->undo().endUndoGroup();
break;
}
void GuiApplication::processFuncRequestQueue()
{
while (!d->func_request_queue_.empty()) {
- processFuncRequest(d->func_request_queue_.front());
+ // take the item from the stack _before_ processing the
+ // request in order to avoid race conditions from nested
+ // or parallel requests (see #10406)
+ FuncRequest const fr(d->func_request_queue_.front());
d->func_request_queue_.pop();
+ processFuncRequest(fr);
}
}
#endif
// In release mode, try to exit gracefully.
this->exit(1);
-
+ // FIXME: GCC 7 thinks we can fall through here. Can we?
+ // fall through
case BufferException: {
if (!current_view_ || !current_view_->documentBufferView())
return false;