]> git.lyx.org Git - lyx.git/blobdiff - src/LyX.cpp
Fix duplicate, disabled "Separated Frame Below"
[lyx.git] / src / LyX.cpp
index 17094dab31dfa18907a0af29939a6146723979fd..0e1b19faf664f849a37f6add26f620fbad54e2d8 100644 (file)
@@ -74,6 +74,8 @@
 #include <string>
 #include <vector>
 
+#include <qglobal.h> // For QT_VERSION
+
 using namespace std;
 using namespace lyx::support;
 
@@ -148,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 {
@@ -188,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_;
        ///
@@ -387,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<string>::const_iterator it = pimpl_->files_to_load_.begin();
@@ -412,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) {
@@ -460,39 +471,45 @@ void LyX::earlyExit(int status)
 
 int LyX::init(int & argc, char * argv[])
 {
-       // check for any spurious extra arguments
-       // other than documents
-       for (int argi = 1; argi < argc ; ++argi) {
-               if (argv[argi][0] == '-') {
-                       lyxerr << to_utf8(
-                               bformat(_("Wrong command line option `%1$s'. Exiting."),
-                               from_utf8(os::utf8_argv(argi)))) << endl;
+       try {
+               // check for any spurious extra arguments
+               // other than documents
+               for (int argi = 1; argi < argc ; ++argi) {
+                       if (argv[argi][0] == '-') {
+                               lyxerr << to_utf8(
+                                       bformat(_("Wrong command line option `%1$s'. Exiting."),
+                                                       from_utf8(os::utf8_argv(argi)))) << endl;
+                               return EXIT_FAILURE;
+                       }
+               }
+
+               // Initialization of LyX (reads lyxrc and more)
+               LYXERR(Debug::INIT, "Initializing LyX::init...");
+               bool success = init();
+               LYXERR(Debug::INIT, "Initializing LyX::init...done");
+               if (!success)
+                       return EXIT_FAILURE;
+               // Remaining arguments are assumed to be files to load.
+               for (int argi = 1; argi < argc; ++argi)
+                       pimpl_->files_to_load_.push_back(os::utf8_argv(argi));
+
+               if (!use_gui && pimpl_->files_to_load_.empty()) {
+                       lyxerr << to_utf8(_("Missing filename for this operation.")) << endl;
                        return EXIT_FAILURE;
                }
-       }
 
-       // Initialization of LyX (reads lyxrc and more)
-       LYXERR(Debug::INIT, "Initializing LyX::init...");
-       bool success = init();
-       LYXERR(Debug::INIT, "Initializing LyX::init...done");
-       if (!success)
-               return EXIT_FAILURE;
+               if (first_start) {
+                       pimpl_->files_to_load_.push_back(
+                               i18nLibFileSearch("examples", "splash.lyx").absFileName());
+               }
 
-       // Remaining arguments are assumed to be files to load.
-       for (int argi = 1; argi < argc; ++argi)
-               pimpl_->files_to_load_.push_back(os::utf8_argv(argi));
+               return EXIT_SUCCESS;
 
-       if (!use_gui && pimpl_->files_to_load_.empty()) {
-               lyxerr << to_utf8(_("Missing filename for this operation.")) << endl;
+       } catch (exception const &e) {
+               // This can happen _in_theory_ in replaceEnvironmentPath
+               lyxerr << "Caught exception `" << e.what() << "'." << endl;
                return EXIT_FAILURE;
        }
-
-       if (first_start) {
-               pimpl_->files_to_load_.push_back(
-                       i18nLibFileSearch("examples", "splash.lyx").absFileName());
-       }
-
-       return EXIT_SUCCESS;
 }
 
 
@@ -505,7 +522,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<Buffer *> command_line_buffers;
@@ -764,7 +781,7 @@ namespace {
                        return std::string(line, nameLen);
                }
        }
-}
+} // namespace
 
 void cleanDuplicateEnvVars()
 {
@@ -858,7 +875,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(),
@@ -936,13 +953,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;
@@ -1050,7 +1067,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;
@@ -1179,7 +1197,8 @@ int parse_help(string const &, string const &, string &)
                  "                  where fmt is the export format of choice. Look in\n"
                  "                  Tools->Preferences->File Handling->File Formats->Short Name\n"
                  "                  to see which parameter (which differs from the format name\n"
-                 "                  in the File->Export menu) should be passed.\n"
+                 "                  in the File->Export menu) should be passed. To export to\n"
+                 "                  the document's default output format, use 'default'.\n"
                  "                  Note that the order of -e and -x switches matters.\n"
                  "\t-E [--export-to] fmt filename\n"
                  "                  where fmt is the export format of choice (see --export),\n"
@@ -1371,7 +1390,7 @@ int parse_force(string const & arg, string const &, string &)
 }
 
 
-} // namespace anon
+} // namespace
 
 
 void LyX::easyParse(int & argc, char * argv[])
@@ -1496,17 +1515,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_;
 }