X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2FLyX.cpp;h=db9e92033a41066a4a7b805bf39b8f37636d3239;hb=8c6ac457ecc69f57ab54cd8c9b8b7893607c65d6;hp=f90e09ce5bfe8cefbb0f20d34f6c83922f0baeaf;hpb=1b147f12b0271fc6372ffc146e8046cd3436222b;p=lyx.git diff --git a/src/LyX.cpp b/src/LyX.cpp index f90e09ce5b..db9e92033a 100644 --- a/src/LyX.cpp +++ b/src/LyX.cpp @@ -17,44 +17,43 @@ #include "LyX.h" -#include "Color.h" -#include "ConverterCache.h" -#include "Buffer.h" #include "buffer_funcs.h" +#include "Buffer.h" #include "BufferList.h" +#include "CmdDef.h" +#include "Color.h" +#include "ConverterCache.h" #include "Converter.h" #include "CutAndPaste.h" -#include "debug.h" #include "Encoding.h" #include "ErrorList.h" #include "Format.h" -#include "gettext.h" #include "KeyMap.h" -#include "CmdDef.h" #include "Language.h" -#include "Session.h" +#include "Lexer.h" #include "LyXAction.h" #include "LyXFunc.h" -#include "Lexer.h" #include "LyXRC.h" +#include "MenuBackend.h" #include "ModuleList.h" +#include "Mover.h" #include "Server.h" #include "ServerSocket.h" +#include "Session.h" #include "TextClassList.h" -#include "MenuBackend.h" -#include "Messages.h" -#include "Mover.h" #include "ToolbarBackend.h" #include "frontends/alert.h" #include "frontends/Application.h" -#include "frontends/LyXView.h" +#include "support/debug.h" #include "support/environment.h" +#include "support/ExceptionMessage.h" #include "support/filetools.h" +#include "support/gettext.h" #include "support/lstrings.h" #include "support/lyxlib.h" -#include "support/ExceptionMessage.h" +#include "support/Messages.h" #include "support/os.h" #include "support/Package.h" #include "support/Path.h" @@ -99,7 +98,6 @@ using support::package; using support::prependEnvPath; using support::rtrim; using support::Systemcall; -using frontend::LyXView; namespace Alert = frontend::Alert; namespace os = support::os; @@ -161,9 +159,9 @@ struct LyX::Impl /// BufferList buffer_list_; /// - boost::scoped_ptr toplevel_keymap_; + KeyMap toplevel_keymap_; /// - boost::scoped_ptr toplevel_cmddef_; + CmdDef toplevel_cmddef_; /// boost::scoped_ptr lyx_server_; /// @@ -316,15 +314,13 @@ frontend::Application const & LyX::application() const KeyMap & LyX::topLevelKeymap() { - BOOST_ASSERT(pimpl_->toplevel_keymap_.get()); - return *pimpl_->toplevel_keymap_.get(); + return pimpl_->toplevel_keymap_; } CmdDef & LyX::topLevelCmdDef() { - BOOST_ASSERT(pimpl_->toplevel_cmddef_.get()); - return *pimpl_->toplevel_cmddef_.get(); + return pimpl_->toplevel_cmddef_; } @@ -342,8 +338,7 @@ Converters & LyX::systemConverters() KeyMap const & LyX::topLevelKeymap() const { - BOOST_ASSERT(pimpl_->toplevel_keymap_.get()); - return *pimpl_->toplevel_keymap_.get(); + return pimpl_->toplevel_keymap_; } @@ -476,6 +471,15 @@ void LyX::prepareExit() // close buffers first pimpl_->buffer_list_.closeAll(); + // register session changes and shutdown server and socket + if (use_gui) { + if (pimpl_->session_) + pimpl_->session_->writeFile(); + pimpl_->session_.reset(); + pimpl_->lyx_server_.reset(); + pimpl_->lyx_socket_.reset(); + } + // do any other cleanup procedures now if (package().temp_dir() != package().system_temp_dir()) { LYXERR(Debug::INFO, "Deleting tmp dir " @@ -489,14 +493,6 @@ void LyX::prepareExit() } } - if (use_gui) { - if (pimpl_->session_) - pimpl_->session_->writeFile(); - pimpl_->session_.reset(); - pimpl_->lyx_server_.reset(); - pimpl_->lyx_socket_.reset(); - } - // Kill the application object before exiting. This avoids crashes // when exiting on Linux. if (pimpl_->application_) @@ -627,7 +623,8 @@ void LyX::execBatchCommands() void LyX::restoreGuiSession() { - LyXView * view = newLyXView(); + // create the main window + pimpl_->lyxfunc_.dispatch(FuncRequest(LFUN_WINDOW_NEW, geometryArg)); // if there is no valid class list, do not load any file. if (textclasslist.empty()) @@ -638,7 +635,7 @@ void LyX::restoreGuiSession() if (!pimpl_->files_to_load_.empty()) { for_each(pimpl_->files_to_load_.begin(), pimpl_->files_to_load_.end(), - bind(&LyXView::loadLyXFile, view, _1, true)); + bind(&LyXFunc::loadAndViewFile, pimpl_->lyxfunc_, _1, true)); // clear this list to save a few bytes of RAM pimpl_->files_to_load_.clear(); pimpl_->session_->lastOpened().clear(); @@ -649,7 +646,7 @@ void LyX::restoreGuiSession() // last session, and should be already there (regular files), or should // not be added at all (help files). for_each(lastopened.begin(), lastopened.end(), - bind(&LyXView::loadLyXFile, view, _1, false)); + bind(&LyXFunc::loadAndViewFile, pimpl_->lyxfunc_, _1, false)); // clear this list to save a few bytes of RAM pimpl_->session_->lastOpened().clear(); @@ -663,24 +660,6 @@ void LyX::restoreGuiSession() continue; updateLabels(*buf); } - - // FIXME: Switch to the last loaded Buffer. This must not be the first one - // because the Buffer won't be connected in this case. The correct solution - // would be to avoid the manual connection of the current Buffer in LyXView. - if (!pimpl_->buffer_list_.empty()) - view->setBuffer(pimpl_->buffer_list_.last()); -} - - -LyXView * LyX::newLyXView() -{ - if (!lyx::use_gui) - return 0; - - // create the main window - LyXView * view = &pimpl_->application_->createView(geometryArg); - - return view; } /* @@ -804,6 +783,10 @@ bool LyX::init() lyxrc.tempdir_path = package().temp_dir().absFilename(); lyxrc.document_path = package().document_dir().absFilename(); + if (lyxrc.example_path.empty()) { + lyxrc.example_path = addPath(package().system_support().absFilename(), + "examples"); + } if (lyxrc.template_path.empty()) { lyxrc.template_path = addPath(package().system_support().absFilename(), "templates"); @@ -879,17 +862,15 @@ bool LyX::init() //setGuiLanguage(lyxrc.gui_language); // Set up command definitions - pimpl_->toplevel_cmddef_.reset(new CmdDef); - pimpl_->toplevel_cmddef_->read(lyxrc.def_file); + pimpl_->toplevel_cmddef_.read(lyxrc.def_file); // Set up bindings - pimpl_->toplevel_keymap_.reset(new KeyMap); - pimpl_->toplevel_keymap_->read("site"); - pimpl_->toplevel_keymap_->read(lyxrc.bind_file); + pimpl_->toplevel_keymap_.read("site"); + pimpl_->toplevel_keymap_.read(lyxrc.bind_file); // load user bind file user.bind - pimpl_->toplevel_keymap_->read("user"); + pimpl_->toplevel_keymap_.read("user"); - pimpl_->lyxfunc_.initKeySequences(pimpl_->toplevel_keymap_.get()); + pimpl_->lyxfunc_.initKeySequences(&pimpl_->toplevel_keymap_); // Read menus if (!readUIFile(lyxrc.ui_file))