X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2FLyX.cpp;h=9b637570d5f9adb4d5071b822ee92bd129b14ed7;hb=da67bde61af6dfecef7a237b72b878fe30638a81;hp=f0fc71cfe955654c8ec4b00b1d96403382f11b8b;hpb=50060053e36b3e9dfe03bc33ed3abac1eacc54b0;p=lyx.git diff --git a/src/LyX.cpp b/src/LyX.cpp index f0fc71cfe9..9b637570d5 100644 --- a/src/LyX.cpp +++ b/src/LyX.cpp @@ -141,7 +141,7 @@ string cl_user_support; string geometryArg; -LyX * singleton_ = 0; +LyX * singleton_ = nullptr; void showFileError(string const & error) { @@ -150,12 +150,14 @@ void showFileError(string const & error) "Please check your installation."), from_utf8(error))); } -} // namespace anon +} // namespace /// The main application class private implementation. struct LyX::Impl { Impl() - : latexfonts_(0), spell_checker_(0), apple_spell_checker_(0), aspell_checker_(0), enchant_checker_(0), hunspell_checker_(0) + : latexfonts_(nullptr), spell_checker_(nullptr), + apple_spell_checker_(nullptr), aspell_checker_(nullptr), + enchant_checker_(nullptr), hunspell_checker_(nullptr) {} ~Impl() @@ -192,7 +194,7 @@ struct LyX::Impl { Converters converters_; /// The system converters after reading lyxrc.defaults. Converters system_converters_; - + /// Global format information Formats formats_; /// The system formats after reading lyxrc.defaults. @@ -250,14 +252,14 @@ frontend::Application * theApp() if (singleton_) return singleton_->pimpl_->application_.get(); else - return 0; + return nullptr; } LyX::~LyX() { delete pimpl_; - singleton_ = 0; + singleton_ = nullptr; } @@ -394,14 +396,12 @@ 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(); - vector::const_iterator end = pimpl_->files_to_load_.end(); lyxerr << _("The following files could not be loaded:") << endl; - for (; it != end; ++it) - lyxerr << *it << endl; + for (auto const & f : pimpl_->files_to_load_) + lyxerr << f << endl; } prepareExit(); @@ -419,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) { @@ -434,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))); } } } @@ -496,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; @@ -512,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; @@ -771,7 +774,7 @@ namespace { return std::string(line, nameLen); } } -} +} // namespace void cleanDuplicateEnvVars() { @@ -865,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(), @@ -906,6 +909,25 @@ bool LyX::init() if (package().build_support().empty()) prependEnvPath("PATH", package().binary_dir().absFileName()); #endif + { + // Add the directory containing the dt2dv and dv2dt executables to the path + FileName dtldir; + if (!package().build_support().empty()) { + // dtl executables should be in the same dir ar tex2lyx + dtldir = package().binary_dir(); + } + else { + dtldir = FileName(addName(package().system_support().absFileName(), "extratools")); + } +#if defined(_WIN32) + string dtlexe = "dt2dv.exe"; +#else + string dtlexe = "dt2dv"; +#endif + FileName const dt2dv = FileName(addName(dtldir.absFileName(), dtlexe)); + if (dt2dv.exists()) + prependEnvPath("PATH", dtldir.absFileName()); + } if (!lyxrc.path_prefix.empty()) prependEnvPath("PATH", replaceEnvironmentPath(lyxrc.path_prefix)); @@ -986,7 +1008,7 @@ bool LyX::init() pimpl_->toplevel_keymap_.read("site"); pimpl_->toplevel_keymap_.read(lyxrc.bind_file); // load user bind file user.bind - pimpl_->toplevel_keymap_.read("user", 0, KeyMap::MissingOK); + pimpl_->toplevel_keymap_.read("user", nullptr, KeyMap::MissingOK); if (lyxerr.debugging(Debug::LYXRC)) lyxrc.print(); @@ -1057,7 +1079,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; @@ -1379,7 +1402,7 @@ int parse_force(string const & arg, string const &, string &) } -} // namespace anon +} // namespace void LyX::easyParse(int & argc, char * argv[]) @@ -1616,7 +1639,7 @@ void setSpellChecker() singleton_->pimpl_->apple_spell_checker_ = new AppleSpellChecker; singleton_->pimpl_->spell_checker_ = singleton_->pimpl_->apple_spell_checker_; #else - singleton_->pimpl_->spell_checker_ = 0; + singleton_->pimpl_->spell_checker_ = nullptr; #endif } else if (lyxrc.spellchecker == "aspell") { #if defined(USE_ASPELL) @@ -1624,7 +1647,7 @@ void setSpellChecker() singleton_->pimpl_->aspell_checker_ = new AspellChecker; singleton_->pimpl_->spell_checker_ = singleton_->pimpl_->aspell_checker_; #else - singleton_->pimpl_->spell_checker_ = 0; + singleton_->pimpl_->spell_checker_ = nullptr; #endif } else if (lyxrc.spellchecker == "enchant") { #if defined(USE_ENCHANT) @@ -1632,7 +1655,7 @@ void setSpellChecker() singleton_->pimpl_->enchant_checker_ = new EnchantChecker; singleton_->pimpl_->spell_checker_ = singleton_->pimpl_->enchant_checker_; #else - singleton_->pimpl_->spell_checker_ = 0; + singleton_->pimpl_->spell_checker_ = nullptr; #endif } else if (lyxrc.spellchecker == "hunspell") { #if defined(USE_HUNSPELL) @@ -1640,10 +1663,10 @@ void setSpellChecker() singleton_->pimpl_->hunspell_checker_ = new HunspellChecker; singleton_->pimpl_->spell_checker_ = singleton_->pimpl_->hunspell_checker_; #else - singleton_->pimpl_->spell_checker_ = 0; + singleton_->pimpl_->spell_checker_ = nullptr; #endif } else { - singleton_->pimpl_->spell_checker_ = 0; + singleton_->pimpl_->spell_checker_ = nullptr; } if (singleton_->pimpl_->spell_checker_) { singleton_->pimpl_->spell_checker_->changeNumber(speller_change_number);