X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2FLyX.cpp;h=20c5e83b01de8af67b0296a4ef802dae1d8f0e0a;hb=38a46b43c764eb7724936fca92678c3563156cd1;hp=c88e205919b79e62481088751ca54095961959d1;hpb=3dec5826dae76e89a80ea9a0404467f8200fa783;p=lyx.git diff --git a/src/LyX.cpp b/src/LyX.cpp index c88e205919..20c5e83b01 100644 --- a/src/LyX.cpp +++ b/src/LyX.cpp @@ -150,7 +150,7 @@ void showFileError(string const & error) "Please check your installation."), from_utf8(error))); } -} // namespace anon +} // namespace /// The main application class private implementation. struct LyX::Impl { @@ -190,10 +190,15 @@ struct LyX::Impl { /// The file converters. Converters converters_; - - // The system converters copy after reading lyxrc.defaults. + /// The system converters after reading lyxrc.defaults. Converters system_converters_; + /// Global format information + Formats formats_; + /// The system formats after reading lyxrc.defaults. + Formats system_formats_; + + /// Movers movers_; /// @@ -389,7 +394,7 @@ int LyX::exec(int & argc, char * argv[]) FileName(package().temp_dir().absFileName() + "/lyxsocket"))); // Start the real execution loop. - if (!theServer().deferredLoadingToOtherInstance()) + if (!pimpl_->lyx_server_->deferredLoadingToOtherInstance()) exit_status = pimpl_->application_->exec(); else if (!pimpl_->files_to_load_.empty()) { vector::const_iterator it = pimpl_->files_to_load_.begin(); @@ -414,8 +419,12 @@ void LyX::prepareExit() // Write the index file of the converter cache ConverterCache::get().writeIndex(); - // close buffers first - pimpl_->buffer_list_.closeAll(); + // closing buffer may throw exceptions, but we ignore them since we + // are quitting. + try { + // close buffers first + pimpl_->buffer_list_.closeAll(); + } catch (ExceptionMessage const &) {} // register session changes and shutdown server and socket if (use_gui) { @@ -429,17 +438,16 @@ void LyX::prepareExit() // do any other cleanup procedures now if (package().temp_dir() != package().system_temp_dir()) { string const abs_tmpdir = package().temp_dir().absFileName(); - if (!contains(package().temp_dir().absFileName(), "lyx_tmpdir")) { + if (!contains(abs_tmpdir, "lyx_tmpdir")) { docstring const msg = bformat(_("%1$s does not appear like a LyX created temporary directory."), from_utf8(abs_tmpdir)); Alert::warning(_("Cannot remove temporary directory"), msg); } else { - LYXERR(Debug::INFO, "Deleting tmp dir " - << package().temp_dir().absFileName()); + LYXERR(Debug::INFO, "Deleting tmp dir " << abs_tmpdir); if (!package().temp_dir().destroyDirectory()) { LYXERR0(bformat(_("Unable to remove the temporary directory %1$s"), - from_utf8(package().temp_dir().absFileName()))); + from_utf8(abs_tmpdir))); } } } @@ -491,7 +499,7 @@ int LyX::init(int & argc, char * argv[]) if (first_start) { pimpl_->files_to_load_.push_back( - i18nLibFileSearch("examples", "splash.lyx").absFileName()); + i18nLibFileSearch("examples", "Welcome.lyx").absFileName()); } return EXIT_SUCCESS; @@ -507,7 +515,7 @@ int LyX::execWithoutGui(int & argc, char * argv[]) } // Used to keep track of which buffers were explicitly loaded by user request. - // This is necessary because master and child document buffers are loaded, even + // This is necessary because master and child document buffers are loaded, even // if they were not named on the command line. We do not want to dispatch to // those. vector command_line_buffers; @@ -766,7 +774,7 @@ namespace { return std::string(line, nameLen); } } -} +} // namespace void cleanDuplicateEnvVars() { @@ -860,7 +868,7 @@ bool LyX::init() #endif lyxrc.tempdir_path = package().temp_dir().absFileName(); - lyxrc.document_path = "."; + lyxrc.document_path = package().document_dir().absFileName(); if (lyxrc.example_path.empty()) { lyxrc.example_path = addPath(package().system_support().absFileName(), @@ -938,13 +946,13 @@ bool LyX::init() return false; // Query the OS to know what formats are viewed natively - formats.setAutoOpen(); + theFormats().setAutoOpen(); // Read lyxrc.dist again to be able to override viewer auto-detection. readRcFile("lyxrc.dist"); system_lyxrc = lyxrc; - system_formats = formats; + theSystemFormats() = theFormats(); pimpl_->system_converters_ = pimpl_->converters_; pimpl_->system_movers_ = pimpl_->movers_; system_lcolor = lcolor; @@ -1052,7 +1060,8 @@ bool LyX::queryUserLyXDir(bool explicit_userdir) || configFileNeedsUpdate("lyxmodules.lst") || configFileNeedsUpdate("textclass.lst") || configFileNeedsUpdate("packages.lst") - || configFileNeedsUpdate("lyxciteengines.lst"); + || configFileNeedsUpdate("lyxciteengines.lst") + || configFileNeedsUpdate("xtemplates.lst"); } first_start = !explicit_userdir; @@ -1374,7 +1383,7 @@ int parse_force(string const & arg, string const &, string &) } -} // namespace anon +} // namespace void LyX::easyParse(int & argc, char * argv[]) @@ -1499,17 +1508,31 @@ KeyMap & theTopLevelKeymap() } +Formats & theFormats() +{ + LAPPERR(singleton_); + return singleton_->pimpl_->formats_; +} + + +Formats & theSystemFormats() +{ + LAPPERR(singleton_); + return singleton_->pimpl_->system_formats_; +} + + Converters & theConverters() { LAPPERR(singleton_); - return singleton_->pimpl_->converters_; + return singleton_->pimpl_->converters_; } Converters & theSystemConverters() { LAPPERR(singleton_); - return singleton_->pimpl_->system_converters_; + return singleton_->pimpl_->system_converters_; }