<< ", singlepar = " << (flags & Update::SinglePar)
<< "] buffer: " << &buffer_);
+ // FIXME Does this really need doing here? It's done in updateBuffer, and
+ // if the Buffer doesn't need updating, then do the macros?
buffer_.updateMacros();
// Now do the first drawing step if needed. This consists on updating
setCursor(backcur.asDocIterator(&buffer_));
buffer_.errors("Class Switch");
- buffer_.updateBuffer();
}
/** Return the change status at cursor position, taking in account the
// FIXME: This is a bit problematic because we don't check if this is
// a document BufferView or not for these LFUNs. We probably have to
// dispatch both to currentBufferView() and, if that fails,
- // to documentBufferView(); same as we do know for current Buffer and
- // document Buffer. Ideally those LFUN should go to Buffer as they*
+ // to documentBufferView(); same as we do now for current Buffer and
+ // document Buffer. Ideally those LFUN should go to Buffer as they
// operate on the full Buffer and the cursor is only needed either for
// an Undo record or to restore a cursor position. But we don't know
// how to do that inside Buffer of course.
break;
case LFUN_UNDO:
- flag.setEnabled(buffer_.undo().hasUndoStack());
+ // We do not use the LyXAction flag for readonly because Undo sets the
+ // buffer clean/dirty status by itself.
+ flag.setEnabled(!buffer_.isReadonly() && buffer_.undo().hasUndoStack());
break;
case LFUN_REDO:
- flag.setEnabled(buffer_.undo().hasRedoStack());
+ // We do not use the LyXAction flag for readonly because Redo sets the
+ // buffer clean/dirty status by itself.
+ flag.setEnabled(!buffer_.isReadonly() && buffer_.undo().hasRedoStack());
break;
case LFUN_FILE_INSERT:
case LFUN_FILE_INSERT_PLAINTEXT_PARA:
// It is then better to make sure that all dialogs are in sync with
// current document settings.
dr.update(Update::Force | Update::FitCursor);
+ dr.forceBufferUpdate();
break;
}
buffer_.params().makeDocumentClass();
updateDocumentClass(oldClass);
dr.update(Update::Force | Update::FitCursor);
+ dr.forceBufferUpdate();
break;
}
buffer_.params().makeDocumentClass();
updateDocumentClass(oldClass);
dr.update(Update::Force | Update::FitCursor);
+ dr.forceBufferUpdate();
break;
}
case LFUN_TEXTCLASS_APPLY: {
- if (!LayoutFileList::get().load(argument, buffer_.temppath()) &&
- !LayoutFileList::get().load(argument, buffer_.filePath()))
+ // since this shortcircuits, the second call is made only if
+ // the first fails
+ bool const success =
+ LayoutFileList::get().load(argument, buffer_.temppath()) ||
+ LayoutFileList::get().load(argument, buffer_.filePath());
+ if (!success) {
+ docstring s = bformat(_("The document class `%1$s' "
+ "could not be loaded."), from_utf8(argument));
+ frontend::Alert::error(_("Could not load class"), s);
break;
+ }
LayoutFile const * old_layout = buffer_.params().baseClass();
LayoutFile const * new_layout = &(LayoutFileList::get()[argument]);
// nothing to do
break;
- //Save the old, possibly modular, layout for use in conversion.
+ // Save the old, possibly modular, layout for use in conversion.
DocumentClass const * const oldDocClass =
buffer_.params().documentClassPtr();
cur.recordUndoFullDocument();
buffer_.params().makeDocumentClass();
updateDocumentClass(oldDocClass);
dr.update(Update::Force | Update::FitCursor);
+ dr.forceBufferUpdate();
break;
}
- case LFUN_TEXTCLASS_LOAD:
- LayoutFileList::get().load(argument, buffer_.temppath()) ||
- LayoutFileList::get().load(argument, buffer_.filePath());
+ case LFUN_TEXTCLASS_LOAD: {
+ // since this shortcircuits, the second call is made only if
+ // the first fails
+ bool const success =
+ LayoutFileList::get().load(argument, buffer_.temppath()) ||
+ LayoutFileList::get().load(argument, buffer_.filePath());
+ if (!success) {
+ docstring s = bformat(_("The document class `%1$s' "
+ "could not be loaded."), from_utf8(argument));
+ frontend::Alert::error(_("Could not load class"), s);
+ }
break;
+ }
case LFUN_LAYOUT_RELOAD: {
DocumentClass const * const oldClass = buffer_.params().documentClassPtr();
buffer_.params().makeDocumentClass();
updateDocumentClass(oldClass);
dr.update(Update::Force | Update::FitCursor);
+ dr.forceBufferUpdate();
break;
}
dr.setMessage(_("No further undo information"));
else
dr.update(Update::Force | Update::FitCursor);
+ dr.forceBufferUpdate();
break;
case LFUN_REDO:
dr.setMessage(_("No further redo information"));
else
dr.update(Update::Force | Update::FitCursor);
+ dr.forceBufferUpdate();
break;
case LFUN_FONT_STATE:
saveBookmark(0);
}
}
- if (!label.empty())
+ if (!label.empty())
gotoLabel(label);
break;
}
case LFUN_CHANGES_MERGE:
if (findNextChange(this) || findPreviousChange(this)) {
dr.update(Update::Force | Update::FitCursor);
+ dr.forceBufferUpdate();
showDialog("changes");
}
break;
buffer_.text().acceptOrRejectChanges(cur, Text::ACCEPT);
// FIXME: Move this LFUN to Buffer so that we don't have to do this:
dr.update(Update::Force | Update::FitCursor);
+ dr.forceBufferUpdate();
break;
case LFUN_ALL_CHANGES_REJECT:
buffer_.text().acceptOrRejectChanges(cur, Text::REJECT);
// FIXME: Move this LFUN to Buffer so that we don't have to do this:
dr.update(Update::Force | Update::FitCursor);
+ dr.forceBufferUpdate();
break;
case LFUN_WORD_FIND_FORWARD:
}
}
replace(this, cmd, has_deleted);
+ dr.forceBufferUpdate();
break;
}
InsetBibtex * inset = getInsetByCode<InsetBibtex>(tmpcur,
BIBTEX_CODE);
if (inset) {
- if (inset->addDatabase(cmd.argument()))
- buffer_.updateBibfilesCache();
+ if (inset->addDatabase(cmd.argument())) {
+ buffer_.invalidateBibfileCache();
+ dr.forceBufferUpdate();
+ }
}
break;
}
InsetBibtex * inset = getInsetByCode<InsetBibtex>(tmpcur,
BIBTEX_CODE);
if (inset) {
- if (inset->delDatabase(cmd.argument()))
- buffer_.updateBibfilesCache();
+ if (inset->delDatabase(cmd.argument())) {
+ buffer_.invalidateBibfileCache();
+ dr.forceBufferUpdate();
+ }
}
break;
}
//FIXME: what to do with cur.x_target()?
bool update = in_texted && cur.bv().checkDepm(cur, old);
cur.finishUndo();
- if (update)
+ if (update) {
dr.update(Update::Force | Update::FitCursor);
+ dr.forceBufferUpdate();
+ }
break;
}
case LFUN_SCROLL:
lfunScroll(cmd);
+ dr.forceBufferUpdate();
break;
case LFUN_SCREEN_UP_SELECT: {
cur = savecur;
cur.fixIfBroken();
dr.update(Update::Force);
+ dr.forceBufferUpdate();
if (iterations >= max_iter) {
dr.setError(true);
FuncRequest fr(LFUN_INSET_MODIFY, cmd.argument());
inset->dispatch(cur, fr);
dr.update(Update::SinglePar | Update::FitCursor);
+ dr.forceBufferUpdate();
break;
}
void BufferView::gotoLabel(docstring const & label)
{
- std::vector<Buffer const *> bufs = buffer().allRelatives();
- std::vector<Buffer const *>::iterator it = bufs.begin();
+ ListOfBuffers bufs = buffer().allRelatives();
+ ListOfBuffers::iterator it = bufs.begin();
for (; it != bufs.end(); ++it) {
Buffer const * buf = *it;
d->cursor_ = cur;
- buffer_.updateBuffer();
+ cur.forceBufferUpdate();
buffer_.changed(true);
return true;
}
d->cursor_.finishUndo();
d->cursor_.setCurrentFont();
+ if (update)
+ cur.forceBufferUpdate();
return update;
}