X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2FLyXFunc.cpp;h=ee89ed58a651fb9c8bb8b831d72849e60e77a660;hb=a3315920a2816111293b0112b689148bd6635e1e;hp=7d369bfd701c4c30a7bc48d14d8b0863be712c55;hpb=09df753df4c24470617c64d25eae6df2db85dfed;p=lyx.git diff --git a/src/LyXFunc.cpp b/src/LyXFunc.cpp index 7d369bfd70..ee89ed58a6 100644 --- a/src/LyXFunc.cpp +++ b/src/LyXFunc.cpp @@ -74,21 +74,18 @@ #include "insets/InsetVSpace.h" #include "insets/InsetWrap.h" -#include "frontends/Application.h" #include "frontends/alert.h" -#include "frontends/Dialogs.h" +#include "frontends/Application.h" #include "frontends/FileDialog.h" #include "frontends/FontLoader.h" -#include "frontends/Gui.h" #include "frontends/KeySymbol.h" #include "frontends/LyXView.h" #include "frontends/Selection.h" -#include "frontends/WorkArea.h" #include "support/environment.h" #include "support/FileFilterList.h" +#include "support/FileName.h" #include "support/filetools.h" -#include "support/fs_extras.h" #include "support/lstrings.h" #include "support/Path.h" #include "support/Package.h" @@ -97,7 +94,6 @@ #include "support/os.h" #include -#include #include @@ -110,8 +106,6 @@ using std::ostringstream; using std::find; using std::vector; -namespace fs = boost::filesystem; - namespace lyx { using frontend::LyXView; @@ -142,6 +136,7 @@ using support::prefixIs; namespace Alert = frontend::Alert; extern bool quitting; +extern bool use_gui; namespace { @@ -182,7 +177,7 @@ bool import(LyXView * lv, FileName const & filename, if (loader_format == "lyx") { - Buffer * buf = lv->loadLyXFile(lyxfile); + Buffer * buf = theLyXFunc().loadAndViewFile(lyxfile); if (!buf) { // we are done lv->message(_("file not imported!")); @@ -190,7 +185,7 @@ bool import(LyXView * lv, FileName const & filename, } updateLabels(*buf); lv->setBuffer(buf); - lv->showErrorList("Parse"); + lv->errors("Parse"); } else { Buffer * const b = newFile(lyxfile.absFilename(), string(), true); if (b) @@ -220,7 +215,7 @@ void reconfigure(LyXView & lv, string const & option) lv.message(_("Running configure...")); // Run configure in user lyx directory - support::Path p(package().user_support()); + support::PathChanger p(package().user_support()); string configure_command = package().configure_command(); configure_command += option; Systemcall one; @@ -388,32 +383,20 @@ void LyXFunc::gotoBookmark(unsigned int idx, bool openFile, bool switchToBuffer) } -namespace { -void restartCursor(LyXView * lv) -{ - /* When we move around, or type, it's nice to be able to see - * the cursor immediately after the keypress. - */ - if (lv && lv->currentWorkArea()) - lv->currentWorkArea()->startBlinkingCursor(); -} -} - void LyXFunc::processKeySym(KeySymbol const & keysym, KeyModifier state) { - LYXERR(Debug::KEY) << "KeySym is " << keysym.getSymbolName() << endl; + LYXERR(Debug::KEY, "KeySym is " << keysym.getSymbolName()); // Do nothing if we have nothing (JMarc) if (!keysym.isOK()) { - LYXERR(Debug::KEY) << "Empty kbd action (probably composing)" - << endl; - restartCursor(lyx_view_); + LYXERR(Debug::KEY, "Empty kbd action (probably composing)"); + lyx_view_->restartCursor(); return; } if (keysym.isModifier()) { - LYXERR(Debug::KEY) << "isModifier true" << endl; - restartCursor(lyx_view_); + LYXERR(Debug::KEY, "isModifier true"); + lyx_view_->restartCursor(); return; } @@ -428,9 +411,8 @@ void LyXFunc::processKeySym(KeySymbol const & keysym, KeyModifier state) cancel_meta_seq.reset(); FuncRequest func = cancel_meta_seq.addkey(keysym, state); - LYXERR(Debug::KEY) << BOOST_CURRENT_FUNCTION - << " action first set to [" << func.action << ']' - << endl; + LYXERR(Debug::KEY, BOOST_CURRENT_FUNCTION + << " action first set to [" << func.action << ']'); // When not cancel or meta-fake, do the normal lookup. // Note how the meta_fake Mod1 bit is OR-ed in and reset afterwards. @@ -438,9 +420,8 @@ void LyXFunc::processKeySym(KeySymbol const & keysym, KeyModifier state) if ((func.action != LFUN_CANCEL) && (func.action != LFUN_META_PREFIX)) { // remove Caps Lock and Mod2 as a modifiers func = keyseq.addkey(keysym, (state | meta_fake_bit)); - LYXERR(Debug::KEY) << BOOST_CURRENT_FUNCTION - << "action now set to [" - << func.action << ']' << endl; + LYXERR(Debug::KEY, BOOST_CURRENT_FUNCTION + << "action now set to [" << func.action << ']'); } // Dont remove this unless you know what you are doing. @@ -450,11 +431,9 @@ void LyXFunc::processKeySym(KeySymbol const & keysym, KeyModifier state) if (func.action == LFUN_NOACTION) func = FuncRequest(LFUN_COMMAND_PREFIX); - LYXERR(Debug::KEY) << BOOST_CURRENT_FUNCTION - << " Key [action=" - << func.action << "][" - << to_utf8(keyseq.print(KeySequence::Portable)) << ']' - << endl; + LYXERR(Debug::KEY, BOOST_CURRENT_FUNCTION + << " Key [action=" << func.action << "][" + << to_utf8(keyseq.print(KeySequence::Portable)) << ']'); // already here we know if it any point in going further // why not return already here if action == -1 and @@ -467,9 +446,9 @@ void LyXFunc::processKeySym(KeySymbol const & keysym, KeyModifier state) // Maybe user can only reach the key via holding down shift. // Let's see. But only if shift is the only modifier if (func.action == LFUN_UNKNOWN_ACTION && state == ShiftModifier) { - LYXERR(Debug::KEY) << "Trying without shift" << endl; + LYXERR(Debug::KEY, "Trying without shift"); func = keyseq.addkey(keysym, NoModifier); - LYXERR(Debug::KEY) << "Action now " << func.action << endl; + LYXERR(Debug::KEY, "Action now " << func.action); } if (func.action == LFUN_UNKNOWN_ACTION) { @@ -477,13 +456,13 @@ void LyXFunc::processKeySym(KeySymbol const & keysym, KeyModifier state) // if it's normal insertable text not already covered // by a binding if (keysym.isText() && keyseq.length() == 1) { - LYXERR(Debug::KEY) << "isText() is true, inserting." << endl; + LYXERR(Debug::KEY, "isText() is true, inserting."); func = FuncRequest(LFUN_SELF_INSERT, FuncRequest::KEYBOARD); } else { - LYXERR(Debug::KEY) << "Unknown, !isText() - giving up" << endl; + LYXERR(Debug::KEY, "Unknown, !isText() - giving up"); lyx_view_->message(_("Unknown function.")); - restartCursor(lyx_view_); + lyx_view_->restartCursor(); return; } } @@ -493,14 +472,13 @@ void LyXFunc::processKeySym(KeySymbol const & keysym, KeyModifier state) docstring const arg(1, encoded_last_key); dispatch(FuncRequest(LFUN_SELF_INSERT, arg, FuncRequest::KEYBOARD)); - LYXERR(Debug::KEY) - << "SelfInsert arg[`" << to_utf8(arg) << "']" << endl; + LYXERR(Debug::KEY, "SelfInsert arg[`" << to_utf8(arg) << "']"); } } else { dispatch(func); } - restartCursor(lyx_view_); + lyx_view_->restartCursor(); } @@ -509,17 +487,7 @@ FuncStatus LyXFunc::getStatus(FuncRequest const & cmd) const //lyxerr << "LyXFunc::getStatus: cmd: " << cmd << endl; FuncStatus flag; - /* In LyX/Mac, when a dialog is open, the menus of the - application can still be accessed without giving focus to - the main window. In this case, we want to disable the menu - entries that are buffer-related. - - Note that this code is not perfect, as bug 1941 attests: - http://bugzilla.lyx.org/show_bug.cgi?id=1941#c4 - */ Buffer * buf = lyx_view_? lyx_view_->buffer() : 0; - if (lyx_view_ && cmd.origin == FuncRequest::MENU && !lyx_view_->hasFocus()) - buf = 0; if (cmd.action == LFUN_NOACTION) { flag.message(from_utf8(N_("Nothing to do"))); @@ -566,6 +534,16 @@ FuncStatus LyXFunc::getStatus(FuncRequest const & cmd) const // to handle (Andre') bool enable = true; switch (cmd.action) { + + case LFUN_DIALOG_TOGGLE: + case LFUN_DIALOG_SHOW: + case LFUN_DIALOG_UPDATE: + case LFUN_TOOLBAR_TOGGLE: + if (lyx_view_) + return lyx_view_->getStatus(cmd); + enable = false; + break; + case LFUN_BUFFER_TOGGLE_READ_ONLY: flag.setOnOff(buf->isReadonly()); break; @@ -604,7 +582,7 @@ FuncStatus LyXFunc::getStatus(FuncRequest const & cmd) const enable = buf->lyxvc().inUse(); break; case LFUN_BUFFER_RELOAD: - enable = !buf->isUnnamed() && fs::exists(buf->absFileName()) + enable = !buf->isUnnamed() && buf->fileName().exists() && (!buf->isClean() || buf->isExternallyModified(Buffer::timestamp_method)); break; @@ -614,7 +592,7 @@ FuncStatus LyXFunc::getStatus(FuncRequest const & cmd) const break; } string const name = cmd.getArg(0); - Inset * inset = lyx_view_->getDialogs().getOpenInset(name); + Inset * inset = lyx_view_->getOpenInset(name); if (inset) { FuncRequest fr(LFUN_INSET_MODIFY, cmd.argument()); FuncStatus fs; @@ -631,47 +609,6 @@ FuncStatus LyXFunc::getStatus(FuncRequest const & cmd) const break; } - case LFUN_DIALOG_TOGGLE: - flag.setOnOff(lyx_view_->getDialogs().visible(cmd.getArg(0))); - // fall through to set "enable" - case LFUN_DIALOG_SHOW: { - string const name = cmd.getArg(0); - if (!buf) - enable = name == "aboutlyx" - || name == "file" //FIXME: should be removed. - || name == "prefs" - || name == "texinfo"; - else if (name == "print") - enable = buf->isExportable("dvi") - && lyxrc.print_command != "none"; - else if (name == "character") { - if (!view()) - enable = false; - else { - InsetCode ic = view()->cursor().inset().lyxCode(); - enable = ic != ERT_CODE && ic != LISTINGS_CODE; - } - } - else if (name == "latexlog") - enable = FileName(buf->logName()).isFileReadable(); - else if (name == "spellchecker") -#if defined (USE_ASPELL) || defined (USE_ISPELL) || defined (USE_PSPELL) - enable = !buf->isReadonly(); -#else - enable = false; -#endif - else if (name == "vclog") - enable = buf->lyxvc().inUse(); - break; - } - - case LFUN_DIALOG_UPDATE: { - string const name = cmd.getArg(0); - if (!buf) - enable = name == "prefs"; - break; - } - case LFUN_CITATION_INSERT: { FuncRequest fr(LFUN_INSET_INSERT, "citation"); enable = getStatus(fr).enabled(); @@ -717,15 +654,9 @@ FuncStatus LyXFunc::getStatus(FuncRequest const & cmd) const enable = LyX::ref().session().bookmarks().size() > 0; break; - case LFUN_TOOLBAR_TOGGLE: { - bool const current = lyx_view_->isToolbarVisible(cmd.getArg(0)); - flag.setOnOff(current); - break; - } - case LFUN_WINDOW_CLOSE: { - enable = (theApp()->gui().viewIds().size() > 1); + case LFUN_WINDOW_CLOSE: + enable = theApp()->viewCount() > 0; break; - } // this one is difficult to get right. As a half-baked // solution, we consider only the first action of the sequence @@ -740,7 +671,7 @@ FuncStatus LyXFunc::getStatus(FuncRequest const & cmd) const case LFUN_CALL: { FuncRequest func; - std::string name(to_utf8(cmd.argument())); + std::string name = to_utf8(cmd.argument()); if (LyX::ref().topLevelCmdDef().lock(name, func)) { func.origin = cmd.origin; flag = getStatus(func); @@ -856,7 +787,7 @@ bool LyXFunc::ensureBufferClean(BufferView * bv) if (buf.isClean()) return true; - docstring const file = makeDisplayPath(buf.absFileName(), 30); + docstring const file = buf.fileName().displayName(30); docstring text = bformat(_("The document %1$s has unsaved " "changes.\n\nDo you want to save " "the document?"), file); @@ -915,7 +846,7 @@ void LyXFunc::dispatch(FuncRequest const & cmd) string const argument = to_utf8(cmd.argument()); kb_action const action = cmd.action; - LYXERR(Debug::ACTION) << endl << "LyXFunc::dispatch: cmd: " << cmd << endl; + LYXERR(Debug::ACTION, "\nLyXFunc::dispatch: cmd: " << cmd); //lyxerr << "LyXFunc::dispatch: cmd: " << cmd << endl; // we have not done anything wrong yet. @@ -929,13 +860,25 @@ void LyXFunc::dispatch(FuncRequest const & cmd) FuncStatus const flag = getStatus(cmd); if (!flag.enabled()) { // We cannot use this function here - LYXERR(Debug::ACTION) << "LyXFunc::dispatch: " + LYXERR(Debug::ACTION, "LyXFunc::dispatch: " << lyxaction.getActionName(action) - << " [" << action << "] is disabled at this location" - << endl; + << " [" << action << "] is disabled at this location"); setErrorMessage(flag.message()); } else { switch (action) { + // Let lyx_view_ dispatch its own actions. + case LFUN_COMMAND_EXECUTE: + case LFUN_DROP_LAYOUTS_CHOICE: + case LFUN_MENU_OPEN: + case LFUN_TOOLBAR_TOGGLE: + case LFUN_DIALOG_UPDATE: + case LFUN_DIALOG_TOGGLE: + case LFUN_DIALOG_DISCONNECT_INSET: + case LFUN_DIALOG_HIDE: + case LFUN_DIALOG_SHOW: + BOOST_ASSERT(lyx_view_); + lyx_view_->dispatch(cmd); + break; case LFUN_WORD_FIND_FORWARD: case LFUN_WORD_FIND_BACKWARD: { @@ -965,11 +908,6 @@ void LyXFunc::dispatch(FuncRequest const & cmd) lyx_view_->message(keyseq.printOptions(true)); break; - case LFUN_COMMAND_EXECUTE: - BOOST_ASSERT(lyx_view_); - lyx_view_->showMiniBuffer(true); - break; - case LFUN_CANCEL: BOOST_ASSERT(lyx_view_ && lyx_view_->view()); keyseq.reset(); @@ -1101,7 +1039,7 @@ void LyXFunc::dispatch(FuncRequest const & cmd) case LFUN_BUFFER_EXPORT: BOOST_ASSERT(lyx_view_ && lyx_view_->buffer()); if (argument == "custom") - lyx_view_->getDialogs().show("sendto"); + dispatch(FuncRequest(LFUN_DIALOG_SHOW, "sendto")); else lyx_view_->buffer()->doExport(argument, false); break; @@ -1180,7 +1118,7 @@ void LyXFunc::dispatch(FuncRequest const & cmd) string const path = buffer->temppath(); // Prevent the compiler from optimizing away p FileName pp(path); - support::Path p(pp); + support::PathChanger p(pp); // there are three cases here: // 1. we print to a file @@ -1264,7 +1202,7 @@ void LyXFunc::dispatch(FuncRequest const & cmd) // (leaving the event loop). lyx_view_->message(from_utf8(N_("Exiting."))); if (theBufferList().quitWriteAll()) - theApp()->gui().closeAllViews(); + theApp()->closeAllViews(); break; case LFUN_BUFFER_AUTO_SAVE: @@ -1292,11 +1230,11 @@ void LyXFunc::dispatch(FuncRequest const & cmd) } lyx_view_->message(bformat(_("Opening help file %1$s..."), makeDisplayPath(fname.absFilename()))); - Buffer * buf = lyx_view_->loadLyXFile(fname, false); + Buffer * buf = loadAndViewFile(fname, false); if (buf) { updateLabels(*buf); lyx_view_->setBuffer(buf); - lyx_view_->showErrorList("Parse"); + lyx_view_->errors("Parse"); } updateFlags = Update::None; break; @@ -1384,23 +1322,12 @@ void LyXFunc::dispatch(FuncRequest const & cmd) updateFlags = Update::None; break; - case LFUN_DROP_LAYOUTS_CHOICE: - BOOST_ASSERT(lyx_view_); - lyx_view_->openLayoutList(); - break; - - case LFUN_MENU_OPEN: - BOOST_ASSERT(lyx_view_); - lyx_view_->openMenu(from_utf8(argument)); - break; - // --- lyxserver commands ---------------------------- case LFUN_SERVER_GET_NAME: BOOST_ASSERT(lyx_view_ && lyx_view_->buffer()); setMessage(from_utf8(lyx_view_->buffer()->absFileName())); - LYXERR(Debug::INFO) << "FNAME[" - << lyx_view_->buffer()->absFileName() - << "] " << endl; + LYXERR(Debug::INFO, "FNAME[" + << lyx_view_->buffer()->absFileName() << ']'); break; case LFUN_SERVER_NOTIFY: @@ -1428,7 +1355,7 @@ void LyXFunc::dispatch(FuncRequest const & cmd) if (theBufferList().exists(s.absFilename())) buf = theBufferList().getBuffer(s.absFilename()); else { - buf = lyx_view_->loadLyXFile(s); + buf = loadAndViewFile(s); loaded = true; } } @@ -1442,41 +1369,11 @@ void LyXFunc::dispatch(FuncRequest const & cmd) lyx_view_->setBuffer(buf); view()->setCursorFromRow(row); if (loaded) - lyx_view_->showErrorList("Parse"); + lyx_view_->errors("Parse"); updateFlags = Update::FitCursor; break; } - case LFUN_DIALOG_SHOW: { - BOOST_ASSERT(lyx_view_); - string const name = cmd.getArg(0); - string data = trim(to_utf8(cmd.argument()).substr(name.size())); - - if (name == "character") { - data = freefont2string(); - if (!data.empty()) - lyx_view_->getDialogs().show("character", data); - } else if (name == "latexlog") { - Buffer::LogType type; - string const logfile = lyx_view_->buffer()->logName(&type); - switch (type) { - case Buffer::latexlog: - data = "latex "; - break; - case Buffer::buildlog: - data = "literate "; - break; - } - data += Lexer::quoteString(logfile); - lyx_view_->getDialogs().show("log", data); - } else if (name == "vclog") { - string const data = "vc " + - Lexer::quoteString(lyx_view_->buffer()->lyxvc().getLogFile()); - lyx_view_->getDialogs().show("log", data); - } else - lyx_view_->getDialogs().show(name, data); - break; - } case LFUN_DIALOG_SHOW_NEW_INSET: { BOOST_ASSERT(lyx_view_); @@ -1571,45 +1468,10 @@ void LyXFunc::dispatch(FuncRequest const & cmd) break; } // end switch(code) if (insetCodeOK) - lyx_view_->getDialogs().show(name, data, 0); + dispatch(FuncRequest(LFUN_DIALOG_SHOW, name + " " + data)); break; } - case LFUN_DIALOG_UPDATE: { - BOOST_ASSERT(lyx_view_); - string const & name = argument; - // Can only update a dialog connected to an existing inset - Inset * inset = lyx_view_->getDialogs().getOpenInset(name); - if (inset) { - FuncRequest fr(LFUN_INSET_DIALOG_UPDATE, cmd.argument()); - inset->dispatch(view()->cursor(), fr); - } else if (name == "paragraph") { - dispatch(FuncRequest(LFUN_PARAGRAPH_UPDATE)); - } else if (name == "prefs") { - lyx_view_->getDialogs().update(name, string()); - } - break; - } - - case LFUN_DIALOG_HIDE: - LyX::cref().hideDialogs(argument, 0); - break; - - case LFUN_DIALOG_TOGGLE: { - BOOST_ASSERT(lyx_view_); - if (lyx_view_->getDialogs().visible(cmd.getArg(0))) - dispatch(FuncRequest(LFUN_DIALOG_HIDE, argument)); - else - dispatch(FuncRequest(LFUN_DIALOG_SHOW, argument)); - break; - } - - case LFUN_DIALOG_DISCONNECT_INSET: - BOOST_ASSERT(lyx_view_); - lyx_view_->getDialogs().disconnect(argument); - break; - - case LFUN_CITATION_INSERT: { BOOST_ASSERT(lyx_view_); if (!argument.empty()) { @@ -1647,7 +1509,7 @@ void LyXFunc::dispatch(FuncRequest const & cmd) } else { setMessage(bformat(_("Opening child document %1$s..."), makeDisplayPath(filename.absFilename()))); - child = lyx_view_->loadLyXFile(filename, true); + child = loadAndViewFile(filename, true); parsed = true; } if (child) { @@ -1658,7 +1520,7 @@ void LyXFunc::dispatch(FuncRequest const & cmd) updateLabels(*child->masterBuffer()); lyx_view_->setBuffer(child); if (parsed) - lyx_view_->showErrorList("Parse"); + lyx_view_->errors("Parse"); } // If a screen update is required (in case where auto_open is false), @@ -1813,7 +1675,7 @@ void LyXFunc::dispatch(FuncRequest const & cmd) case LFUN_INSET_APPLY: { BOOST_ASSERT(lyx_view_); string const name = cmd.getArg(0); - Inset * inset = lyx_view_->getDialogs().getOpenInset(name); + Inset * inset = lyx_view_->getOpenInset(name); if (inset) { FuncRequest fr(LFUN_INSET_MODIFY, argument); inset->dispatch(view()->cursor(), fr); @@ -1844,7 +1706,7 @@ void LyXFunc::dispatch(FuncRequest const & cmd) && (inset_code == NO_CODE || inset_code == it->lyxCode())) { Cursor tmpcur = cur; - tmpcur.pushLeft(*it); + tmpcur.pushBackward(*it); it->dispatch(tmpcur, fr); } } @@ -2017,6 +1879,8 @@ void LyXFunc::dispatch(FuncRequest const & cmd) actOnUpdatedPrefs(lyxrc_orig, lyxrc); + theApp()->resetGui(); + /// We force the redraw in any case because there might be /// some screen font changes. /// FIXME: only the current view will be updated. the Gui @@ -2050,30 +1914,6 @@ void LyXFunc::dispatch(FuncRequest const & cmd) LyX::ref().session().bookmarks().clear(); break; - case LFUN_TOOLBAR_TOGGLE: { - BOOST_ASSERT(lyx_view_); - string const name = cmd.getArg(0); - bool const allowauto = cmd.getArg(1) == "allowauto"; - lyx_view_->toggleToolbarState(name, allowauto); - ToolbarInfo * tbi = lyx_view_->getToolbarInfo(name); - if (!tbi) { - setMessage(bformat(_("Unknown toolbar \"%1$s\""), - from_utf8(name))); - break; - } - docstring state; - if (tbi->flags & ToolbarInfo::ON) - state = _("on"); - else if (tbi->flags & ToolbarInfo::OFF) - state = _("off"); - else if (tbi->flags & ToolbarInfo::AUTO) - state = _("auto"); - - setMessage(bformat(_("Toolbar \"%1$s\" state set to %2$s"), - _(tbi->gui_name), state)); - break; - } - default: { BOOST_ASSERT(lyx_view_); view()->cursor().dispatch(cmd); @@ -2090,7 +1930,6 @@ void LyXFunc::dispatch(FuncRequest const & cmd) // (at least partially) visible top-level paragraphs. // We will redraw the screen only if needed. view()->processUpdateFlags(updateFlags); - lyx_view_->updateStatusBar(); // if we executed a mutating lfun, mark the buffer as dirty if (flag.enabled() @@ -2102,12 +1941,10 @@ void LyXFunc::dispatch(FuncRequest const & cmd) theSelection().haveSelection(view()->cursor().selection()); if (view()->cursor().inTexted()) { - lyx_view_->updateLayoutChoice(); } } } if (!quitting && lyx_view_) { - lyx_view_->updateToolbars(); // Some messages may already be translated, so we cannot use _() sendDispatchMessage(translateIfPossible(getMessage()), cmd); } @@ -2121,7 +1958,7 @@ void LyXFunc::sendDispatchMessage(docstring const & msg, FuncRequest const & cmd || cmd.origin == FuncRequest::COMMANDBUFFER); if (cmd.action == LFUN_SELF_INSERT || !verbose) { - LYXERR(Debug::ACTION) << "dispatch msg is " << to_utf8(msg) << endl; + LYXERR(Debug::ACTION, "dispatch msg is " << to_utf8(msg)); if (!msg.empty()) lyx_view_->message(msg); return; @@ -2154,8 +1991,7 @@ void LyXFunc::sendDispatchMessage(docstring const & msg, FuncRequest const & cmd dispatch_msg += '(' + rtrim(comname) + ')'; } - LYXERR(Debug::ACTION) << "verbose dispatch msg " - << to_utf8(dispatch_msg) << endl; + LYXERR(Debug::ACTION, "verbose dispatch msg " << to_utf8(dispatch_msg)); if (!dispatch_msg.empty()) lyx_view_->message(dispatch_msg); } @@ -2213,6 +2049,35 @@ void LyXFunc::menuNew(string const & name, bool fromTemplate) } +Buffer * LyXFunc::loadAndViewFile(FileName const & filename, bool tolastfiles) +{ + lyx_view_->setBusy(true); + + Buffer * newBuffer = checkAndLoadLyXFile(filename); + + if (!newBuffer) { + lyx_view_->message(_("Document not loaded.")); + lyx_view_->setBusy(false); + return 0; + } + + lyx_view_->setBuffer(newBuffer); + + // scroll to the position when the file was last closed + if (lyxrc.use_lastfilepos) { + LastFilePosSection::FilePos filepos = + LyX::ref().session().lastFilePos().load(filename); + lyx_view_->view()->moveToPosition(filepos.pit, filepos.pos, 0, 0); + } + + if (tolastfiles) + LyX::ref().session().lastFiles().add(filename); + + lyx_view_->setBusy(false); + return newBuffer; +} + + void LyXFunc::open(string const & fname) { string initpath = lyxrc.document_path; @@ -2269,11 +2134,11 @@ void LyXFunc::open(string const & fname) lyx_view_->message(bformat(_("Opening document %1$s..."), disp_fn)); docstring str2; - Buffer * buf = lyx_view_->loadLyXFile(fullname); + Buffer * buf = loadAndViewFile(fullname); if (buf) { updateLabels(*buf); lyx_view_->setBuffer(buf); - lyx_view_->showErrorList("Parse"); + lyx_view_->errors("Parse"); str2 = bformat(_("Document %1$s opened."), disp_fn); } else { str2 = bformat(_("Could not open document %1$s"), disp_fn); @@ -2287,8 +2152,8 @@ void LyXFunc::doImport(string const & argument) string format; string filename = split(argument, format, ' '); - LYXERR(Debug::INFO) << "LyXFunc::doImport: " << format - << " file: " << filename << endl; + LYXERR(Debug::INFO, "LyXFunc::doImport: " << format + << " file: " << filename); // need user interaction if (filename.empty()) { @@ -2384,11 +2249,11 @@ void LyXFunc::reloadBuffer() docstring const disp_fn = makeDisplayPath(filename.absFilename()); docstring str; closeBuffer(); - Buffer * buf = lyx_view_->loadLyXFile(filename); + Buffer * buf = loadAndViewFile(filename); if (buf) { updateLabels(*buf); lyx_view_->setBuffer(buf); - lyx_view_->showErrorList("Parse"); + lyx_view_->errors("Parse"); str = bformat(_("Document %1$s reloaded."), disp_fn); } else { str = bformat(_("Could not reload document %1$s"), disp_fn); @@ -2500,6 +2365,7 @@ void actOnUpdatedPrefs(LyXRC const & lyxrc_orig, LyXRC const & lyxrc_new) case LyXRC::RC_DATE_INSERT_FORMAT: case LyXRC::RC_DEFAULT_LANGUAGE: case LyXRC::RC_DEFAULT_PAPERSIZE: + case LyXRC::RC_DEFFILE: case LyXRC::RC_DIALOGS_ICONIFY_WITH_MAIN: case LyXRC::RC_DISPLAY_GRAPHICS: case LyXRC::RC_DOCUMENTPATH: @@ -2564,9 +2430,7 @@ void actOnUpdatedPrefs(LyXRC const & lyxrc_orig, LyXRC const & lyxrc_new) case LyXRC::RC_SCREEN_FONT_SIZES: case LyXRC::RC_SCREEN_FONT_TYPEWRITER: case LyXRC::RC_SCREEN_FONT_TYPEWRITER_FOUNDRY: - case LyXRC::RC_SCREEN_GEOMETRY_HEIGHT: - case LyXRC::RC_SCREEN_GEOMETRY_WIDTH: - case LyXRC::RC_SCREEN_GEOMETRY_XYSAVED: + case LyXRC::RC_GEOMETRY_SESSION: case LyXRC::RC_SCREEN_ZOOM: case LyXRC::RC_SERVERPIPE: case LyXRC::RC_SET_COLOR: @@ -2588,8 +2452,10 @@ void actOnUpdatedPrefs(LyXRC const & lyxrc_orig, LyXRC const & lyxrc_new) case LyXRC::RC_USE_ESC_CHARS: case LyXRC::RC_USE_INP_ENC: case LyXRC::RC_USE_PERS_DICT: + case LyXRC::RC_USE_PIXMAP_CACHE: case LyXRC::RC_USE_SPELL_LIB: case LyXRC::RC_VIEWDVI_PAPEROPTION: + case LyXRC::RC_SORT_LAYOUTS: case LyXRC::RC_VIEWER: case LyXRC::RC_LAST: break;