void LyXFunc::setLyXView(LyXView * lv)
{
- if (lyx_view_ && lyx_view_ != lv)
+ if (!quitting && lyx_view_ && lyx_view_ != lv)
// save current selection to the selection buffer to allow
// middle-button paste in another window
cap::saveSelection(lyx_view_->view()->cursor());
enable = buf->lyxvc().inUse();
break;
case LFUN_BUFFER_RELOAD:
- enable = !buf->isUnnamed() && !buf->isClean();
+ enable = !buf->isUnnamed() && fs::exists(buf->fileName())
+ && (!buf->isClean() || buf->isExternallyModified(Buffer::timestamp_method));
break;
case LFUN_INSET_SETTINGS: {
break;
}
+
+ case LFUN_BUFFER_WRITE_ALL: {
+ // We enable the command only if there are some modified buffers
+ Buffer * first = theBufferList().first();
+ bool modified = false;
+ if (first) {
+ Buffer * b = first;
+
+ // We cannot use a for loop as the buffer list is a cycle.
+ do {
+ if (!b->isClean()) {
+ modified = true;
+ break;
+ }
+ b = theBufferList().next(b);
+ } while (b != first);
+ }
+
+ enable = modified;
+
+ break;
+ }
+
case LFUN_BOOKMARK_GOTO: {
const unsigned int num = convert<unsigned int>(to_utf8(cmd.argument()));
enable = LyX::ref().session().bookmarks().isValid(num);
updateFlags = Update::None;
break;
+ case LFUN_BUFFER_WRITE_ALL: {
+ Buffer * first = theBufferList().first();
+ if (first) {
+ Buffer * b = first;
+ lyx_view_->message(_("Saving all documents..."));
+
+ // We cannot use a for loop as the buffer list cycles.
+ do {
+ if (!b->isClean()) {
+ if (!b->isUnnamed()) {
+ menuWrite(b);
+ lyxerr[Debug::ACTION] << "Saved " << b->fileName() << endl;
+ } else
+ writeAs(b);
+ }
+ b = theBufferList().next(b);
+ } while (b != first);
+ lyx_view_->message(_("All documents saved."));
+ }
+
+ updateFlags = Update::None;
+ break;
+ }
+
case LFUN_BUFFER_RELOAD: {
BOOST_ASSERT(lyx_view_ && lyx_view_->buffer());
docstring const file = makeDisplayPath(view()->buffer()->fileName(), 20);
case LFUN_BUFFER_SWITCH:
BOOST_ASSERT(lyx_view_);
lyx_view_->setBuffer(theBufferList().getBuffer(argument));
+ updateFlags = Update::Force;
break;
case LFUN_BUFFER_NEXT:
BOOST_ASSERT(lyx_view_);
lyx_view_->setBuffer(theBufferList().next(view()->buffer()));
+ updateFlags = Update::Force;
break;
case LFUN_BUFFER_PREVIOUS:
BOOST_ASSERT(lyx_view_);
lyx_view_->setBuffer(theBufferList().previous(view()->buffer()));
+ updateFlags = Update::Force;
break;
case LFUN_FILE_NEW:
theApp()->updateColor(lcolor.getFromLyXName(lyx_name));
if (graphicsbg_changed) {
-#ifdef WITH_WARNINGS
-#warning FIXME!! The graphics cache no longer has a changeDisplay method.
-#endif
+ // FIXME: The graphics cache no longer has a changeDisplay method.
#if 0
graphics::GCache::get().changeDisplay(true);
#endif