X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Flyx_main.C;h=caa2a2b6897730040b8fa97abcefda1667b6cf0a;hb=c4320d24cd2d29c2e77958b4a8fd44f2bd587ca7;hp=6c0e575f64b901b5a6be9f4f731864cc36e19172;hpb=9feb262948c91bad850f2d98b0f97ebf22eb8752;p=lyx.git diff --git a/src/lyx_main.C b/src/lyx_main.C index 6c0e575f64..caa2a2b689 100644 --- a/src/lyx_main.C +++ b/src/lyx_main.C @@ -99,8 +99,6 @@ using std::signal; using std::system; #endif -/// -frontend::Application * theApp = 0; /// are we using the GUI at all? /** @@ -167,16 +165,18 @@ struct LyX::Singletons IconvProcessor iconv; }; +/// +frontend::Application * theApp() +{ + if (singleton_) + return &singleton_->application(); + else + return 0; +} + LyX::~LyX() { - // Static data are not treated in the same way at all on the Mac (and - // the LyX singleton has static methods). This is the reason why the - // exit command on the Mac bypasses our dispatch machinery altogether. - // On Linux and Windows we won't pass a second time through quit() - // because quitting will already be set to true. - if (!quitting) - quit(); } @@ -331,7 +331,7 @@ int LyX::exec(int & argc, char * argv[]) support::init_package(argv[0], cl_system_support, cl_user_support, support::top_build_dir_is_one_level_up); - vector files; + vector files; if (!use_gui) { // FIXME: create a ConsoleApplication @@ -365,8 +365,6 @@ int LyX::exec(int & argc, char * argv[]) // Let the frontend parse and remove all arguments that it knows pimpl_->application_.reset(createApplication(argc, argv)); - // FIXME: this global pointer should probably go. - theApp = pimpl_->application_.get(); initGuiFont(); @@ -397,12 +395,7 @@ int LyX::exec(int & argc, char * argv[]) exit_status = pimpl_->application_->exec(); - // FIXME: Do we still need this reset? - // I assume it is the reason for strange Mac crashs - // Test by reverting rev 16110 (Peter) - // Kill the application object before exiting. This avoid crash - // on exit on Linux. - pimpl_->application_.reset(); + prepareExit(); // Restore original font resources after Application is destroyed. support::restoreFontResources(); @@ -437,6 +430,19 @@ void LyX::prepareExit() from_utf8(package().temp_dir())); Alert::warning(_("Unable to remove temporary directory"), msg); } + + 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_) + pimpl_->application_.reset(); } @@ -450,25 +456,8 @@ void LyX::earlyExit(int status) } -void LyX::quit() -{ - lyxerr[Debug::INFO] << "Running QuitLyX." << endl; - - prepareExit(); - if (use_gui) { - if (pimpl_->session_) - pimpl_->session_->writeFile(); - pimpl_->lyx_server_.reset(); - pimpl_->lyx_socket_.reset(); - if (pimpl_->application_) - pimpl_->application_->exit(0); - theApp = 0; - } -} - - int LyX::loadFiles(int & argc, char * argv[], - vector & files) + vector & files) { // check for any spurious extra arguments // other than documents @@ -494,28 +483,27 @@ int LyX::loadFiles(int & argc, char * argv[], // frontend. if (argv[argi][0] == '-') continue; - files.push_back(os::internal_path(argv[argi])); + // get absolute path of file and add ".lyx" to + // the filename if necessary + files.push_back(fileSearch(string(), os::internal_path(argv[argi]), "lyx")); } if (first_start) - files.push_back(i18nLibFileSearch("examples", "splash.lyx").absFilename()); + files.push_back(i18nLibFileSearch("examples", "splash.lyx")); Buffer * last_loaded = 0; - vector::const_iterator it = files.begin(); - vector::const_iterator end = files.end(); + vector::const_iterator it = files.begin(); + vector::const_iterator end = files.end(); for (; it != end; ++it) { - // get absolute path of file and add ".lyx" to - // the filename if necessary - string s = fileSearch(string(), *it, "lyx").absFilename(); - if (s.empty()) { - Buffer * const b = newFile(*it, string(), true); + if (it->empty()) { + Buffer * const b = newFile(it->absFilename(), string(), true); if (b) last_loaded = b; } else { - Buffer * buf = pimpl_->buffer_list_.newBuffer(s, false); - if (loadLyXFile(buf, s)) { + Buffer * buf = pimpl_->buffer_list_.newBuffer(it->absFilename(), false); + if (loadLyXFile(buf, *it)) { last_loaded = buf; ErrorList const & el = buf->errorList("Parse"); if (!el.empty()) @@ -546,7 +534,7 @@ void LyX::execBatchCommands() } -void LyX::restoreGuiSession(vector const & files) +void LyX::restoreGuiSession(vector const & files) { LyXView * view = newLyXView(); @@ -556,7 +544,7 @@ void LyX::restoreGuiSession(vector const & files) // if a file is specified, I assume that user wants to edit *that* file if (files.empty() && lyxrc.load_session) { - vector const & lastopened = pimpl_->session_->lastOpened().getfiles(); + vector const & lastopened = pimpl_->session_->lastOpened().getfiles(); // do not add to the lastfile list since these files are restored from // last seesion, and should be already there (regular files), or should // not be added at all (help files).