]> git.lyx.org Git - lyx.git/blobdiff - src/lyx_main.C
src/support/unlink.C: Fix an #include error
[lyx.git] / src / lyx_main.C
index ec5d8ad1b1f1ff053903603eb82e0e63fe041473..add424f8b0f2f7f353b269b0a99fb78dcd4553ba 100644 (file)
@@ -49,7 +49,6 @@
 #include "frontends/LyXView.h"
 
 #include "support/environment.h"
-#include "support/filename.h"
 #include "support/filetools.h"
 #include "support/fontutils.h"
 #include "support/lyxlib.h"
@@ -333,8 +332,9 @@ int LyX::exec(int & argc, char * argv[])
        // we need to parse for "-dbg" and "-help"
        easyParse(argc, argv);
 
-       support::init_package(argv[0], cl_system_support, cl_user_support,
-                                  support::top_build_dir_is_one_level_up);
+       support::init_package(to_utf8(from_local8bit(argv[0])),
+                             cl_system_support, cl_user_support,
+                             support::top_build_dir_is_one_level_up);
 
        if (!use_gui) {
                // FIXME: create a ConsoleApplication
@@ -373,17 +373,6 @@ int LyX::exec(int & argc, char * argv[])
 
        initGuiFont();
 
-       // FIXME
-       /* Create a CoreApplication class that will provide the main event loop
-       * and the socket callback registering. With Qt4, only QtCore
-       * library would be needed.
-       * When this is done, a server_mode could be created and the following two
-       * line would be moved out from here.
-       */
-       pimpl_->lyx_server_.reset(new LyXServer(&pimpl_->lyxfunc_, lyxrc.lyxpipes));
-       pimpl_->lyx_socket_.reset(new LyXServerSocket(&pimpl_->lyxfunc_, 
-               support::os::internal_path(package().temp_dir() + "/lyxsocket")));
-
        // Parse and remove all known arguments in the LyX singleton
        // Give an error for all remaining ones.
        int exit_status = init(argc, argv);
@@ -395,6 +384,19 @@ int LyX::exec(int & argc, char * argv[])
                return exit_status;
        }
 
+       // FIXME
+       /* Create a CoreApplication class that will provide the main event loop
+       * and the socket callback registering. With Qt4, only QtCore
+       * library would be needed.
+       * When this is done, a server_mode could be created and the following two
+       * line would be moved out from here.
+       */
+       // Note: socket callback must be registered after init(argc, argv)
+       // such that package().temp_dir() is properly initialized.
+       pimpl_->lyx_server_.reset(new LyXServer(&pimpl_->lyxfunc_, lyxrc.lyxpipes));
+       pimpl_->lyx_socket_.reset(new LyXServerSocket(&pimpl_->lyxfunc_, 
+               support::os::internal_path(package().temp_dir() + "/lyxsocket")));
+
        // Start the real execution loop.
        exit_status = pimpl_->application_->exec();
        
@@ -417,21 +419,16 @@ void LyX::prepareExit()
        pimpl_->buffer_list_.closeAll();
 
        // do any other cleanup procedures now
-       lyxerr[Debug::INFO] << "Deleting tmp dir " << package().temp_dir() << endl;
-
-       // Prevent the deletion of /tmp if LyX was called with invalid
-       // arguments. Does not work on windows.
-       // FIXME: Fix the real bug instead.
-       if (package().temp_dir() == "/tmp") {
-               lyxerr << "Not deleting /tmp." << endl;
-               return;
-       }
-
-       if (!destroyDir(package().temp_dir())) {
-               docstring const msg =
-                       bformat(_("Unable to remove the temporary directory %1$s"),
-                       from_utf8(package().temp_dir()));
-               Alert::warning(_("Unable to remove temporary directory"), msg);
+       if (package().temp_dir() != package().system_temp_dir()) {
+               lyxerr[Debug::INFO] << "Deleting tmp dir "
+                                   << package().temp_dir() << endl;
+
+               if (!destroyDir(FileName(package().temp_dir()))) {
+                       docstring const msg =
+                               bformat(_("Unable to remove the temporary directory %1$s"),
+                               from_utf8(package().temp_dir()));
+                       Alert::warning(_("Unable to remove temporary directory"), msg);
+               }
        }
 
        if (use_gui) {
@@ -480,14 +477,11 @@ int LyX::init(int & argc, char * argv[])
                return EXIT_FAILURE;
 
        for (int argi = argc - 1; argi >= 1; --argi) {
-               // check for any remaining extra arguments other than
-               // document file names. These will be passed out to the
-               // frontend.
-               if (argv[argi][0] == '-')
-                       continue;
                // get absolute path of file and add ".lyx" to
                // the filename if necessary
-               pimpl_->files_to_load_.push_back(fileSearch(string(), os::internal_path(argv[argi]), "lyx"));
+               pimpl_->files_to_load_.push_back(fileSearch(string(),
+                       os::internal_path(to_utf8(from_local8bit(argv[argi]))),
+                       "lyx", support::allow_unreadable));
        }
 
        if (first_start)
@@ -506,7 +500,6 @@ void LyX::loadFiles()
                if (it->empty())
                        continue;
 
-               Buffer * const b = newFile(it->absFilename(), string(), true);
                Buffer * buf = pimpl_->buffer_list_.newBuffer(it->absFilename(), false);
                if (loadLyXFile(buf, *it)) {
                        ErrorList const & el = buf->errorList("Parse");
@@ -842,8 +835,9 @@ bool LyX::init()
        if (!lyxrc.path_prefix.empty())
                prependEnvPath("PATH", lyxrc.path_prefix);
 
-       if (fs::exists(lyxrc.document_path) &&
-           fs::is_directory(lyxrc.document_path))
+       FileName const document_path(lyxrc.document_path);
+       if (fs::exists(document_path.toFilesystemEncoding()) &&
+           fs::is_directory(document_path.toFilesystemEncoding()))
                package().document_dir() = lyxrc.document_path;
 
        package().temp_dir() = createLyXTmpDir(FileName(lyxrc.tempdir_path)).absFilename();
@@ -976,11 +970,19 @@ namespace {
 // return true if file does not exist or is older than configure.py.
 bool needsUpdate(string const & file)
 {
-       static string const configure_script =
-               addName(package().system_support(), "configure.py");
-       string const absfile =
-               addName(package().user_support(), file);
+       // We cannot initialize configure_script directly because the package
+       // is not initialized yet when  static objects are constructed.
+       static string configure_script;
+       static bool firstrun = true;
+       if (firstrun) {
+               configure_script = FileName(addName(
+                               package().system_support(),
+                               "configure.py")).toFilesystemEncoding();
+               firstrun = false;
+       }
 
+       string const absfile = FileName(addName(
+               package().user_support(), file)).toFilesystemEncoding();
        return (! fs::exists(absfile))
                || (fs::last_write_time(configure_script)
                    > fs::last_write_time(absfile));
@@ -992,8 +994,9 @@ bool needsUpdate(string const & file)
 bool LyX::queryUserLyXDir(bool explicit_userdir)
 {
        // Does user directory exist?
-       if (fs::exists(package().user_support()) &&
-           fs::is_directory(package().user_support())) {
+       string const user_support =
+               FileName(package().user_support()).toFilesystemEncoding();
+       if (fs::exists(user_support) && fs::is_directory(user_support)) {
                first_start = false;
 
                return needsUpdate("lyxrc.defaults")
@@ -1329,8 +1332,8 @@ void LyX::easyParse(int & argc, char * argv[])
                if (it == cmdmap.end())
                        continue;
 
-               string arg((i + 1 < argc) ? argv[i + 1] : "");
-               string arg2((i + 2 < argc) ? argv[i + 2] : "");
+               string const arg((i + 1 < argc) ? to_utf8(from_local8bit(argv[i + 1])) : string());
+               string const arg2((i + 2 < argc) ? to_utf8(from_local8bit(argv[i + 2])) : string());
 
                int const remove = 1 + it->second(arg, arg2);