using std::system;
#endif
-///
-frontend::Application * theApp = 0;
/// are we using the GUI at all?
/**
string cl_system_support;
string cl_user_support;
+std::string geometryArg;
+
LyX * singleton_ = 0;
void showFileError(string const & error)
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();
}
LyX::LyX()
- : first_start(false), geometryOption_(false)
+ : first_start(false)
{
singleton_ = this;
pimpl_.reset(new Singletons);
+ geometryArg.clear();
}
support::init_package(argv[0], cl_system_support, cl_user_support,
support::top_build_dir_is_one_level_up);
- vector<string> files;
+ vector<FileName> files;
if (!use_gui) {
// FIXME: create a ConsoleApplication
// 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();
support::os::internal_path(package().temp_dir() + "/lyxsocket")));
exit_status = pimpl_->application_->exec();
- // 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();
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();
}
}
-void LyX::quit()
-{
- lyxerr[Debug::INFO] << "Running QuitLyX." << endl;
-
- prepareExit();
-
- if (use_gui) {
- pimpl_->session_->writeFile();
- pimpl_->lyx_server_.reset();
- pimpl_->lyx_socket_.reset();
- pimpl_->application_->exit(0);
- theApp = 0;
- }
-}
-
-
int LyX::loadFiles(int & argc, char * argv[],
- vector<string> & files)
+ vector<FileName> & files)
{
// check for any spurious extra arguments
// other than documents
// 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<string>::const_iterator it = files.begin();
- vector<string>::const_iterator end = files.end();
+ vector<FileName>::const_iterator it = files.begin();
+ vector<FileName>::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())
}
-void LyX::restoreGuiSession(vector<string> const & files)
+void LyX::restoreGuiSession(vector<FileName> const & files)
{
LyXView * view = newLyXView();
// if a file is specified, I assume that user wants to edit *that* file
if (files.empty() && lyxrc.load_session) {
- vector<string> const & lastopened = pimpl_->session_->lastOpened().getfiles();
+ vector<FileName> 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).
unsigned int width = 690;
unsigned int height = 510;
// default icon size, will be overwritten by stored session value
- unsigned int iconSizeXY = 26;
+ unsigned int iconSizeXY = 0;
bool maximize = false;
// first try lyxrc
if (lyxrc.geometry_width != 0 && lyxrc.geometry_height != 0 ) {
posy = convert<int>(val);
}
- if (geometryOption_) {
+ if (!geometryArg.empty())
+ {
width = 0;
height = 0;
}
+
// create the main window
- LyXView * view = &pimpl_->application_->createView(width, height, posx, posy, maximize, iconSizeXY);
+ LyXView * view = &pimpl_->application_->createView(width, height, posx, posy, maximize, iconSizeXY, geometryArg);
return view;
}
pimpl_->buffer_list_.emergencyWriteAll();
if (use_gui) {
- pimpl_->lyx_server_->emergencyCleanup();
+ if (pimpl_->lyx_server_)
+ pimpl_->lyx_server_->emergencyCleanup();
pimpl_->lyx_server_.reset();
pimpl_->lyx_socket_.reset();
}
return 2;
}
+int parse_geometry(string const & arg1, string const &)
+{
+ geometryArg = arg1;
+#if defined(_WIN32) || (defined(__CYGWIN__) && defined(X_DISPLAY_MISSING))
+ // remove also the arg
+ return 1;
+#else
+ // don't remove "-geometry"
+ return -1;
+#endif
+}
+
+
} // namespace anon
cmdmap["--export"] = parse_export;
cmdmap["-i"] = parse_import;
cmdmap["--import"] = parse_import;
+ cmdmap["-geometry"] = parse_geometry;
for (int i = 1; i < argc; ++i) {
std::map<string, cmd_helper>::const_iterator it
= cmdmap.find(argv[i]);
- // check for X11 -geometry option
- if (support::compare(argv[i], "-geometry") == 0)
- geometryOption_ = true;
-
// don't complain if not found - may be parsed later
if (it == cmdmap.end())
continue;
// Now, remove used arguments by shifting
// the following ones remove places down.
- argc -= remove;
- for (int j = i; j < argc; ++j)
- argv[j] = argv[j + remove];
- --i;
+ if (remove > 0) {
+ argc -= remove;
+ for (int j = i; j < argc; ++j)
+ argv[j] = argv[j + remove];
+ --i;
+ }
}
batch_command = batch;