From ed99f752f9b4ce52cf55cac2a94658fb087c7383 Mon Sep 17 00:00:00 2001 From: Georg Baum Date: Sat, 2 Dec 2006 16:07:15 +0000 Subject: [PATCH] more unicode filenames git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@16133 a592a061-630c-0410-9148-cb99ea01b6c8 --- src/BufferView.C | 44 ++++++++++++----------------- src/BufferView.h | 4 ++- src/LaTeX.C | 4 +-- src/MenuBackend.C | 7 +++-- src/buffer_funcs.C | 41 ++++++++++++++------------- src/buffer_funcs.h | 3 +- src/bufferlist.C | 2 +- src/frontends/LyXView.C | 12 ++++---- src/frontends/LyXView.h | 4 ++- src/importer.C | 18 ++++++------ src/importer.h | 4 ++- src/insets/insetinclude.C | 5 ++-- src/lyx_cb.C | 2 +- src/lyx_main.C | 29 ++++++++++--------- src/lyx_main.h | 6 ++-- src/lyxfunc.C | 53 ++++++++++++++++++----------------- src/lyxvc.C | 22 +++++++-------- src/lyxvc.h | 5 ++-- src/session.C | 59 +++++++++++++++++++++++++-------------- src/session.h | 25 +++++++++-------- src/vc-backend.C | 54 +++++++++++++++++------------------ src/vc-backend.h | 22 ++++++++------- 22 files changed, 225 insertions(+), 200 deletions(-) diff --git a/src/BufferView.C b/src/BufferView.C index 7ef433cd14..fa53dd8ccc 100644 --- a/src/BufferView.C +++ b/src/BufferView.C @@ -83,8 +83,10 @@ namespace lyx { using support::addPath; using support::bformat; using support::FileFilterList; +using support::FileName; using support::fileSearch; using support::isDirWriteable; +using support::isFileReadable; using support::makeDisplayPath; using support::makeAbsPath; using support::package; @@ -153,7 +155,7 @@ void BufferView::setBuffer(Buffer * b) buffer_->saveCursor(cursor_.selectionBegin(), cursor_.selectionEnd()); // current buffer is going to be switched-off, save cursor pos - LyX::ref().session().lastFilePos().save(buffer_->fileName(), + LyX::ref().session().lastFilePos().save(FileName(buffer_->fileName()), boost::tie(cursor_.pit(), cursor_.pos()) ); } @@ -205,20 +207,11 @@ void BufferView::setBuffer(Buffer * b) } -bool BufferView::loadLyXFile(string const & filename, bool tolastfiles) +bool BufferView::loadLyXFile(FileName const & filename, bool tolastfiles) { - // Get absolute path of file and add ".lyx" - // to the filename if necessary - string s = fileSearch(string(), filename, "lyx").absFilename(); - - bool const found = !s.empty(); - - if (!found) - s = filename; - // File already open? - if (theBufferList().exists(s)) { - docstring const file = makeDisplayPath(s, 20); + if (theBufferList().exists(filename.absFilename())) { + docstring const file = makeDisplayPath(filename.absFilename(), 20); docstring text = bformat(_("The document %1$s is already " "loaded.\n\nDo you want to revert " "to the saved version?"), file); @@ -226,11 +219,11 @@ bool BufferView::loadLyXFile(string const & filename, bool tolastfiles) text, 0, 1, _("&Revert"), _("&Switch to document")); if (ret != 0) { - setBuffer(theBufferList().getBuffer(s)); + setBuffer(theBufferList().getBuffer(filename.absFilename())); return true; } // FIXME: should be LFUN_REVERT - if (!theBufferList().close(theBufferList().getBuffer(s), false)) + if (!theBufferList().close(theBufferList().getBuffer(filename.absFilename()), false)) return false; // Fall through to new load. (Asger) buffer_ = 0; @@ -238,21 +231,21 @@ bool BufferView::loadLyXFile(string const & filename, bool tolastfiles) Buffer * b = 0; - if (found) { - b = theBufferList().newBuffer(s); - if (!lyx::loadLyXFile(b, s)) { + if (isFileReadable(filename)) { + b = theBufferList().newBuffer(filename.absFilename()); + if (!lyx::loadLyXFile(b, filename)) { theBufferList().release(b); return false; } } else { docstring text = bformat(_("The document %1$s does not yet " "exist.\n\nDo you want to create " - "a new document?"), from_utf8(s)); + "a new document?"), from_utf8(filename.absFilename())); int const ret = Alert::prompt(_("Create new document?"), text, 0, 1, _("&Create"), _("Cancel")); if (ret == 0) { - b = newFile(s, string(), true); + b = newFile(filename.absFilename(), string(), true); if (!b) return false; } else @@ -267,7 +260,7 @@ bool BufferView::loadLyXFile(string const & filename, bool tolastfiles) if (lyxrc.use_lastfilepos) { pit_type pit; pos_type pos; - boost::tie(pit, pos) = LyX::ref().session().lastFilePos().load(s); + boost::tie(pit, pos) = LyX::ref().session().lastFilePos().load(filename); // I am not sure how to separate the following part to a function // so I will leave this to Lars. // @@ -288,7 +281,7 @@ bool BufferView::loadLyXFile(string const & filename, bool tolastfiles) } if (tolastfiles) - LyX::ref().session().lastFiles().add(b->fileName()); + LyX::ref().session().lastFiles().add(FileName(b->fileName())); return true; } @@ -296,9 +289,8 @@ bool BufferView::loadLyXFile(string const & filename, bool tolastfiles) void BufferView::reload() { - string const fn = buffer_->fileName(); if (theBufferList().close(buffer_, false)) - loadLyXFile(fn); + loadLyXFile(FileName(buffer_->fileName())); } @@ -532,7 +524,7 @@ Change const BufferView::getCurrentChange() const void BufferView::saveBookmark(bool persistent) { LyX::ref().session().bookmarks().save( - buffer_->fileName(), + FileName(buffer_->fileName()), cursor_.paragraph().id(), cursor_.pos(), persistent @@ -1395,7 +1387,7 @@ void BufferView::menuInsertLyXFile(string const & filenm) docstring res; Buffer buf("", false); - if (lyx::loadLyXFile(&buf, makeAbsPath(filename))) { + if (lyx::loadLyXFile(&buf, FileName(filename))) { ErrorList & el = buffer_->errorList("Parse"); // Copy the inserted document error list into the current buffer one. el = buf.errorList("Parse"); diff --git a/src/BufferView.h b/src/BufferView.h index 0e5f9102b0..514534739b 100644 --- a/src/BufferView.h +++ b/src/BufferView.h @@ -30,6 +30,8 @@ namespace lyx { +namespace support { class FileName; } + class Buffer; class Change; class DocIterator; @@ -91,7 +93,7 @@ public: /// redisplay the referenced buffer. void reload(); /// load a buffer into the view. - bool loadLyXFile(std::string const & name, bool tolastfiles = true); + bool loadLyXFile(support::FileName const & name, bool tolastfiles = true); /// perform pending painting updates. /** \c fitcursor means first diff --git a/src/LaTeX.C b/src/LaTeX.C index f77b22489d..ea81edd74c 100644 --- a/src/LaTeX.C +++ b/src/LaTeX.C @@ -564,7 +564,7 @@ int LaTeX::scanLogFile(TeXErrors & terr) int retval = NO_ERRORS; string tmp = onlyFilename(changeExtension(file, ".log")); lyxerr[Debug::LATEX] << "Log file: " << tmp << endl; - ifstream ifs(tmp.c_str()); + ifstream ifs(FileName(makeAbsPath(tmp)).toFilesystemEncoding().c_str()); string token; while (getline(ifs, token)) { @@ -796,7 +796,7 @@ void LaTeX::deplog(DepTable & head) // This line is not present if no toc should be created. static regex miktexTocReg("\\\\tf@toc=\\\\write.*"); - ifstream ifs(logfile.c_str()); + ifstream ifs(FileName(makeAbsPath(logfile)).toFilesystemEncoding().c_str()); while (ifs) { // Ok, the scanning of files here is not sufficient. // Sometimes files are named by "File: xxx" only diff --git a/src/MenuBackend.C b/src/MenuBackend.C index c4f43b76db..c2e107f224 100644 --- a/src/MenuBackend.C +++ b/src/MenuBackend.C @@ -448,10 +448,11 @@ void expandLastfiles(Menu & tomenu) int ii = 1; for (; lfit != lf.end() && ii < 10; ++lfit, ++ii) { + string const file = lfit->absFilename(); docstring const label = convert(ii) + ". " - + makeDisplayPath((*lfit), 30) + + makeDisplayPath(file, 30) + char_type('|') + convert(ii); - tomenu.add(MenuItem(MenuItem::Command, label, FuncRequest(LFUN_FILE_OPEN, (*lfit)))); + tomenu.add(MenuItem(MenuItem::Command, label, FuncRequest(LFUN_FILE_OPEN, file))); } } @@ -486,7 +487,7 @@ void expandBookmarks(Menu & tomenu) for (size_t i = 1; i <= bm.size(); ++i) { if (bm.isValid(i)) { docstring const label = convert(i) + ". " - + makeDisplayPath(bm.bookmark(i).filename, 20) + + makeDisplayPath(bm.bookmark(i).filename.absFilename(), 20) + char_type('|') + convert(i); tomenu.add(MenuItem(MenuItem::Command, label, FuncRequest(LFUN_BOOKMARK_GOTO, convert(i)))); diff --git a/src/buffer_funcs.C b/src/buffer_funcs.C index d936400d3d..29f3cd4959 100644 --- a/src/buffer_funcs.C +++ b/src/buffer_funcs.C @@ -55,7 +55,6 @@ using namespace std; using support::bformat; using support::FileName; using support::libFileSearch; -using support::makeAbsPath; using support::makeDisplayPath; using support::onlyFilename; using support::onlyPath; @@ -69,13 +68,13 @@ namespace fs = boost::filesystem; namespace { -bool readFile(Buffer * const b, string const & s) +bool readFile(Buffer * const b, FileName const & s) { BOOST_ASSERT(b); // File information about normal file - if (!fs::exists(s)) { - docstring const file = makeDisplayPath(s, 50); + if (!fs::exists(s.toFilesystemEncoding())) { + docstring const file = makeDisplayPath(s.absFilename(), 50); docstring text = bformat(_("The specified document\n%1$s" "\ncould not be read."), file); Alert::error(_("Could not read document"), text); @@ -83,12 +82,13 @@ bool readFile(Buffer * const b, string const & s) } // Check if emergency save file exists and is newer. - string const e = onlyPath(s) + onlyFilename(s) + ".emergency"; + FileName const e(s.absFilename() + ".emergency"); - if (fs::exists(e) && fs::exists(s) - && fs::last_write_time(e) > fs::last_write_time(s)) + if (fs::exists(e.toFilesystemEncoding()) && + fs::exists(s.toFilesystemEncoding()) && + fs::last_write_time(e.toFilesystemEncoding()) > fs::last_write_time(s.toFilesystemEncoding())) { - docstring const file = makeDisplayPath(s, 20); + docstring const file = makeDisplayPath(s.absFilename(), 20); docstring const text = bformat(_("An emergency save of the document " "%1$s exists.\n\n" @@ -100,7 +100,7 @@ bool readFile(Buffer * const b, string const & s) case 0: // the file is not saved if we load the emergency file. b->markDirty(); - return b->readFile(e); + return b->readFile(e.absFilename()); case 1: break; default: @@ -109,12 +109,13 @@ bool readFile(Buffer * const b, string const & s) } // Now check if autosave file is newer. - string const a = onlyPath(s) + '#' + onlyFilename(s) + '#'; + FileName const a(onlyPath(s.absFilename()) + '#' + onlyFilename(s.absFilename()) + '#'); - if (fs::exists(a) && fs::exists(s) - && fs::last_write_time(a) > fs::last_write_time(s)) + if (fs::exists(a.toFilesystemEncoding()) && + fs::exists(s.toFilesystemEncoding()) && + fs::last_write_time(a.toFilesystemEncoding()) > fs::last_write_time(s.toFilesystemEncoding())) { - docstring const file = makeDisplayPath(s, 20); + docstring const file = makeDisplayPath(s.absFilename(), 20); docstring const text = bformat(_("The backup of the document " "%1$s is newer.\n\nLoad the " @@ -126,16 +127,16 @@ bool readFile(Buffer * const b, string const & s) case 0: // the file is not saved if we load the autosave file. b->markDirty(); - return b->readFile(a); + return b->readFile(a.absFilename()); case 1: // Here we delete the autosave - unlink(FileName(makeAbsPath(a))); + unlink(a); break; default: return false; } } - return b->readFile(s); + return b->readFile(s.absFilename()); } @@ -143,19 +144,19 @@ bool readFile(Buffer * const b, string const & s) -bool loadLyXFile(Buffer * b, string const & s) +bool loadLyXFile(Buffer * b, FileName const & s) { BOOST_ASSERT(b); - if (fs::is_readable(s)) { + if (fs::is_readable(s.toFilesystemEncoding())) { if (readFile(b, s)) { b->lyxvc().file_found_hook(s); - if (!fs::is_writable(s)) + if (!fs::is_writable(s.toFilesystemEncoding())) b->setReadonly(true); return true; } } else { - docstring const file = makeDisplayPath(s, 20); + docstring const file = makeDisplayPath(s.absFilename(), 20); // Here we probably should run if (LyXVC::file_not_found_hook(s)) { docstring const text = diff --git a/src/buffer_funcs.h b/src/buffer_funcs.h index 7ad1b56d07..8e55562044 100644 --- a/src/buffer_funcs.h +++ b/src/buffer_funcs.h @@ -20,6 +20,7 @@ namespace lyx { +namespace support { class FileName; } class Buffer; class DocIterator; @@ -31,7 +32,7 @@ class ParIterator; * Loads a LyX file \c filename into \c Buffer * and \return success status. */ -bool loadLyXFile(Buffer *, std::string const & filename); +bool loadLyXFile(Buffer *, support::FileName const & filename); /* Make a new file (buffer) with name \c filename based on a template * named \c templatename diff --git a/src/bufferlist.C b/src/bufferlist.C index 66d930aabd..aa532e98b3 100644 --- a/src/bufferlist.C +++ b/src/bufferlist.C @@ -160,7 +160,7 @@ bool BufferList::quitWriteAll() // if master/slave are both open, do not save slave since it // will be automatically loaded when the master is loaded if ((*it)->getMasterBuffer() == (*it)) - LyX::ref().session().lastOpened().add((*it)->fileName()); + LyX::ref().session().lastOpened().add(FileName((*it)->fileName())); } return true; diff --git a/src/frontends/LyXView.C b/src/frontends/LyXView.C index 19973934aa..4fd5da524e 100644 --- a/src/frontends/LyXView.C +++ b/src/frontends/LyXView.C @@ -52,12 +52,12 @@ namespace lyx { # include #endif -using lyx::frontend::WorkArea; +using frontend::WorkArea; -using lyx::docstring; -using lyx::support::bformat; -using lyx::support::makeDisplayPath; -using lyx::support::onlyFilename; +using support::bformat; +using support::FileName; +using support::makeDisplayPath; +using support::onlyFilename; using std::endl; using std::string; @@ -137,7 +137,7 @@ void LyXView::setBuffer(Buffer * b) } -bool LyXView::loadLyXFile(string const & filename, bool tolastfiles) +bool LyXView::loadLyXFile(FileName const & filename, bool tolastfiles) { busy(true); diff --git a/src/frontends/LyXView.h b/src/frontends/LyXView.h index 49f40ede96..56f534989a 100644 --- a/src/frontends/LyXView.h +++ b/src/frontends/LyXView.h @@ -27,6 +27,8 @@ namespace lyx { +namespace support { class FileName; } + class Buffer; class InsetBase; class Menubar; @@ -128,7 +130,7 @@ public: //@} /// load a buffer into the current workarea - bool loadLyXFile(std::string const & name, bool tolastfiles = true); + bool loadLyXFile(support::FileName const & name, bool tolastfiles = true); /// set a buffer to the current workarea void setBuffer(Buffer * b); diff --git a/src/importer.C b/src/importer.C index 457024f2a8..20c46002ad 100644 --- a/src/importer.C +++ b/src/importer.C @@ -40,13 +40,13 @@ using std::string; using std::vector; -bool Importer::Import(LyXView * lv, string const & filename, +bool Importer::Import(LyXView * lv, FileName const & filename, string const & format, ErrorList & errorList) { - docstring const displaypath = makeDisplayPath(filename); + docstring const displaypath = makeDisplayPath(filename.absFilename()); lv->message(bformat(_("Importing %1$s..."), displaypath)); - string const lyxfile = changeExtension(filename, ".lyx"); + FileName const lyxfile(changeExtension(filename.absFilename(), ".lyx")); string loader_format; vector loaders = Loaders(); @@ -55,10 +55,10 @@ bool Importer::Import(LyXView * lv, string const & filename, it != loaders.end(); ++it) { if (converters.isReachable(format, *it)) { string const tofile = - changeExtension(filename, + changeExtension(filename.absFilename(), formats.extension(*it)); - if (!converters.convert(0, FileName(filename), FileName(tofile), - FileName(filename), format, *it, errorList)) + if (!converters.convert(0, filename, FileName(tofile), + filename, format, *it, errorList)) return false; loader_format = *it; break; @@ -78,14 +78,14 @@ bool Importer::Import(LyXView * lv, string const & filename, if (loader_format == "lyx") { lv->loadLyXFile(lyxfile); } else { - Buffer * const b = newFile(lyxfile, string(), true); + Buffer * const b = newFile(lyxfile.absFilename(), string(), true); if (b) lv->setBuffer(b); else return false; bool as_paragraphs = loader_format == "textparagraph"; - string filename2 = (loader_format == format) ? filename - : changeExtension(filename, + string filename2 = (loader_format == format) ? filename.absFilename() + : changeExtension(filename.absFilename(), formats.extension(loader_format)); insertAsciiFile(lv->view(), filename2, as_paragraphs); lv->dispatch(FuncRequest(LFUN_MARK_OFF)); diff --git a/src/importer.h b/src/importer.h index 8791434719..634059d5f0 100644 --- a/src/importer.h +++ b/src/importer.h @@ -20,6 +20,8 @@ namespace lyx { +namespace support { class FileName; } + class LyXView; class ErrorList; class Format; @@ -27,7 +29,7 @@ class Format; class Importer { public: /// - static bool Import(LyXView * lv, std::string const & filename, + static bool Import(LyXView * lv, support::FileName const & filename, std::string const & format, ErrorList & errorList); /// diff --git a/src/insets/insetinclude.C b/src/insets/insetinclude.C index 2a55bf02c7..5cee1b1f15 100644 --- a/src/insets/insetinclude.C +++ b/src/insets/insetinclude.C @@ -354,10 +354,11 @@ bool loadIfNeeded(Buffer const & buffer, InsetCommandParams const & params) Buffer * buf = theBufferList().getBuffer(included_file); if (!buf) { // the readonly flag can/will be wrong, not anymore I think. - if (!fs::exists(included_file)) + FileName const fullname(included_file); + if (!fs::exists(fullname.toFilesystemEncoding())) return false; buf = theBufferList().newBuffer(included_file); - if (!loadLyXFile(buf, included_file)) + if (!loadLyXFile(buf, fullname)) return false; } if (buf) diff --git a/src/lyx_cb.C b/src/lyx_cb.C index c46b23dadd..ffe3ce6ab6 100644 --- a/src/lyx_cb.C +++ b/src/lyx_cb.C @@ -103,7 +103,7 @@ bool quitting; // flag, that we are quitting the program bool menuWrite(Buffer * buffer) { if (buffer->save()) { - LyX::ref().session().lastFiles().add(buffer->fileName()); + LyX::ref().session().lastFiles().add(FileName(buffer->fileName())); return true; } diff --git a/src/lyx_main.C b/src/lyx_main.C index fb22a8d28a..23692a194f 100644 --- a/src/lyx_main.C +++ b/src/lyx_main.C @@ -338,7 +338,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 @@ -472,7 +472,7 @@ void LyX::quit() int LyX::loadFiles(int & argc, char * argv[], - vector & files) + vector & files) { // check for any spurious extra arguments // other than documents @@ -498,28 +498,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()) @@ -550,7 +549,7 @@ void LyX::execBatchCommands() } -void LyX::restoreGuiSession(vector const & files) +void LyX::restoreGuiSession(vector const & files) { LyXView * view = newLyXView(); @@ -560,7 +559,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). diff --git a/src/lyx_main.h b/src/lyx_main.h index 9f698d82a3..bdbef3b302 100644 --- a/src/lyx_main.h +++ b/src/lyx_main.h @@ -14,6 +14,8 @@ #ifndef LYX_MAIN_H #define LYX_MAIN_H +#include "support/filename.h" + #include #include @@ -121,10 +123,10 @@ private: \return exit code failure if any. */ int loadFiles(int & argc, char * argv[], - std::vector & files); + std::vector & files); /// Create a View and restore GUI Session. - void restoreGuiSession(std::vector const & files); + void restoreGuiSession(std::vector const & files); /// Initialize RC font for the GUI. void initGuiFont(); diff --git a/src/lyxfunc.C b/src/lyxfunc.C index ae40bd2894..e8c7676382 100644 --- a/src/lyxfunc.C +++ b/src/lyxfunc.C @@ -1045,7 +1045,7 @@ void LyXFunc::dispatch(FuncRequest const & cmd) // might be visible in more than one LyXView. if (lyx_view_ && lyx_view_->view()->buffer()) { // save cursor Position for opened files to .lyx/session - LyX::ref().session().lastFilePos().save(lyx_view_->buffer()->fileName(), + LyX::ref().session().lastFilePos().save(FileName(lyx_view_->buffer()->fileName()), boost::tie(view()->cursor().pit(), view()->cursor().pos()) ); } @@ -1076,14 +1076,14 @@ void LyXFunc::dispatch(FuncRequest const & cmd) setErrorMessage(_("Missing argument")); break; } - string const fname = i18nLibFileSearch("doc", arg, "lyx").absFilename(); + FileName const fname = i18nLibFileSearch("doc", arg, "lyx"); if (fname.empty()) { lyxerr << "LyX: unable to find documentation file `" << arg << "'. Bad installation?" << endl; break; } lyx_view_->message(bformat(_("Opening help file %1$s..."), - makeDisplayPath(fname))); + makeDisplayPath(fname.absFilename()))); lyx_view_->loadLyXFile(fname, false); break; } @@ -1196,10 +1196,10 @@ void LyXFunc::dispatch(FuncRequest const & cmd) } else { // Must replace extension of the file to be .lyx // and get full path - string const s = changeExtension(file_name, ".lyx"); + FileName const s = fileSearch(string(), changeExtension(file_name, ".lyx"), "lyx"); // Either change buffer or load the file - if (theBufferList().exists(s)) { - lyx_view_->setBuffer(theBufferList().getBuffer(s)); + if (theBufferList().exists(s.absFilename())) { + lyx_view_->setBuffer(theBufferList().getBuffer(s.absFilename())); } else { lyx_view_->loadLyXFile(s); } @@ -1359,7 +1359,7 @@ void LyXFunc::dispatch(FuncRequest const & cmd) if (theBufferList().exists(filename)) lyx_view_->setBuffer(theBufferList().getBuffer(filename)); else - lyx_view_->loadLyXFile(filename); + lyx_view_->loadLyXFile(FileName(filename)); // Set the parent name of the child document. // This makes insertion of citations and references in the child work, // when the target is in the parent or another child document. @@ -1678,15 +1678,16 @@ void LyXFunc::dispatch(FuncRequest const & cmd) unsigned int idx = convert(to_utf8(cmd.argument())); BookmarksSection::Bookmark const bm = LyX::ref().session().bookmarks().bookmark(idx); BOOST_ASSERT(!bm.filename.empty()); + string const file = bm.filename.absFilename(); // if the file is not opened, open it. - if (!theBufferList().exists(bm.filename)) - dispatch(FuncRequest(LFUN_FILE_OPEN, bm.filename)); + if (!theBufferList().exists(file)) + dispatch(FuncRequest(LFUN_FILE_OPEN, file)); // open may fail, so we need to test it again - if (theBufferList().exists(bm.filename)) { + if (theBufferList().exists(file)) { // if the current buffer is not that one, switch to it. - if (lyx_view_->buffer()->fileName() != bm.filename) - dispatch(FuncRequest(LFUN_BUFFER_SWITCH, bm.filename)); - // BOOST_ASSERT(lyx_view_->buffer()->fileName() != bm.filename); + if (lyx_view_->buffer()->fileName() != file) + dispatch(FuncRequest(LFUN_BUFFER_SWITCH, file)); + // BOOST_ASSERT(lyx_view_->buffer()->fileName() != file); view()->moveToPosition(bm.par_id, bm.par_pos); } break; @@ -1795,6 +1796,7 @@ void LyXFunc::sendDispatchMessage(docstring const & msg, FuncRequest const & cmd void LyXFunc::menuNew(string const & name, bool fromTemplate) { + // FIXME: initpath is not used. What to do? string initpath = lyxrc.document_path; string filename(name); @@ -1884,10 +1886,8 @@ void LyXFunc::open(string const & fname) // get absolute path of file and add ".lyx" to the filename if // necessary FileName const fullname = fileSearch(string(), filename, "lyx"); - BOOST_ASSERT(!fullname.empty()); - filename = fullname.absFilename(); - - docstring const disp_fn = makeDisplayPath(filename); + if (!fullname.empty()) + filename = fullname.absFilename(); // if the file doesn't exist, let the user create one if (!fs::exists(fullname.toFilesystemEncoding())) { @@ -1898,10 +1898,11 @@ void LyXFunc::open(string const & fname) return; } + docstring const disp_fn = makeDisplayPath(filename); lyx_view_->message(bformat(_("Opening document %1$s..."), disp_fn)); docstring str2; - if (lyx_view_->loadLyXFile(filename)) { + if (lyx_view_->loadLyXFile(fullname)) { str2 = bformat(_("Document %1$s opened."), disp_fn); } else { str2 = bformat(_("Could not open document %1$s"), disp_fn); @@ -1963,13 +1964,13 @@ void LyXFunc::doImport(string const & argument) return; // get absolute path of file - filename = makeAbsPath(filename); + FileName const fullname(makeAbsPath(filename)); - string const lyxfile = changeExtension(filename, ".lyx"); + FileName const lyxfile(changeExtension(fullname.absFilename(), ".lyx")); // Check if the document already is open - if (use_gui && theBufferList().exists(lyxfile)) { - if (!theBufferList().close(theBufferList().getBuffer(lyxfile), true)) { + if (use_gui && theBufferList().exists(lyxfile.absFilename())) { + if (!theBufferList().close(theBufferList().getBuffer(lyxfile.absFilename()), true)) { lyx_view_->message(_("Canceled.")); return; } @@ -1977,8 +1978,8 @@ void LyXFunc::doImport(string const & argument) // if the file exists already, and we didn't do // -i lyx thefile.lyx, warn - if (fs::exists(lyxfile) && filename != lyxfile) { - docstring const file = makeDisplayPath(lyxfile, 30); + if (fs::exists(lyxfile.toFilesystemEncoding()) && fullname != lyxfile) { + docstring const file = makeDisplayPath(lyxfile.absFilename(), 30); docstring text = bformat(_("The document %1$s already exists.\n\n" "Do you want to over-write that document?"), file); @@ -1992,7 +1993,7 @@ void LyXFunc::doImport(string const & argument) } ErrorList errorList; - Importer::Import(lyx_view_, filename, format, errorList); + Importer::Import(lyx_view_, fullname, format, errorList); // FIXME (Abdel 12/08/06): Is there a need to display the error list here? } @@ -2000,7 +2001,7 @@ void LyXFunc::doImport(string const & argument) void LyXFunc::closeBuffer() { // save current cursor position - LyX::ref().session().lastFilePos().save(lyx_view_->buffer()->fileName(), + LyX::ref().session().lastFilePos().save(FileName(lyx_view_->buffer()->fileName()), boost::tie(view()->cursor().pit(), view()->cursor().pos()) ); if (theBufferList().close(lyx_view_->buffer(), true) && !quitting) { if (theBufferList().empty()) { diff --git a/src/lyxvc.C b/src/lyxvc.C index 73c8452460..9d7b96279e 100644 --- a/src/lyxvc.C +++ b/src/lyxvc.C @@ -54,9 +54,9 @@ LyXVC::~LyXVC() {} -bool LyXVC::file_found_hook(string const & fn) +bool LyXVC::file_found_hook(FileName const & fn) { - string found_file; + FileName found_file; // Check if file is under RCS if (!(found_file = RCS::find_file(fn)).empty()) { vcs.reset(new RCS(found_file)); @@ -74,7 +74,7 @@ bool LyXVC::file_found_hook(string const & fn) } -bool LyXVC::file_not_found_hook(string const & fn) +bool LyXVC::file_not_found_hook(FileName const & fn) { // Check if file is under RCS if (!RCS::find_file(fn).empty()) @@ -93,10 +93,10 @@ void LyXVC::buffer(Buffer * buf) void LyXVC::registrer() { - string const filename = owner_->fileName(); + FileName const filename(owner_->fileName()); // there must be a file to save - if (!isFileReadable(FileName(makeAbsPath(filename)))) { + if (!isFileReadable(filename)) { Alert::error(_("Document not saved"), _("You must save the document " "before it can be registered.")); @@ -105,19 +105,19 @@ void LyXVC::registrer() // it is very likely here that the vcs is not created yet... if (!vcs) { - string const cvs_entries = "CVS/Entries"; + FileName const cvs_entries(makeAbsPath("CVS/Entries")); - if (isFileReadable(FileName(makeAbsPath(cvs_entries)))) { + if (isFileReadable(cvs_entries)) { lyxerr[Debug::LYXVC] << "LyXVC: registering " - << to_utf8(makeDisplayPath(filename)) + << to_utf8(makeDisplayPath(filename.absFilename())) << " with CVS" << endl; vcs.reset(new CVS(cvs_entries, filename)); } else { lyxerr[Debug::LYXVC] << "LyXVC: registering " - << to_utf8(makeDisplayPath(filename)) + << to_utf8(makeDisplayPath(filename.absFilename())) << " with RCS" << endl; vcs.reset(new RCS(filename)); } @@ -229,7 +229,7 @@ string const LyXVC::getLogFile() const if (!vcs) return string(); - string tmpf = tempName(string(), "lyxvclog"); + FileName const tmpf(tempName(string(), "lyxvclog")); if (tmpf.empty()) { lyxerr[Debug::LYXVC] << "Could not generate logfile " << tmpf << endl; @@ -237,7 +237,7 @@ string const LyXVC::getLogFile() const } lyxerr[Debug::LYXVC] << "Generating logfile " << tmpf << endl; vcs->getLog(tmpf); - return tmpf; + return tmpf.absFilename(); } diff --git a/src/lyxvc.h b/src/lyxvc.h index dc7d0a5b96..6ce52cbb23 100644 --- a/src/lyxvc.h +++ b/src/lyxvc.h @@ -19,6 +19,7 @@ namespace lyx { +namespace support { class FileName; } class VCS; class Buffer; @@ -50,7 +51,7 @@ public: the appropiate actions is taken. Returns true if the file is under control by a VCS. */ - bool file_found_hook(std::string const & fn); + bool file_found_hook(support::FileName const & fn); /** This function should be run when a file is requested for loading, but it does not exist. This function will then check for a VC master @@ -59,7 +60,7 @@ public: viewing/editing. Returns true if the file is under control by a VCS and the user wants to view/edit it. */ - static bool file_not_found_hook(std::string const & fn); + static bool file_not_found_hook(support::FileName const & fn); /// void buffer(Buffer *); diff --git a/src/session.C b/src/session.C index 51c217a4b5..8ecbb5255d 100644 --- a/src/session.C +++ b/src/session.C @@ -23,7 +23,9 @@ #include #include +using lyx::support::absolutePath; using lyx::support::addName; +using lyx::support::FileName; using lyx::support::package; namespace fs = boost::filesystem; @@ -71,12 +73,15 @@ void LastFilesSection::read(istream & is) if (c == '[') break; getline(is, tmp); - if (tmp == "" || tmp[0] == '#' || tmp[0] == ' ') + if (tmp == "" || tmp[0] == '#' || tmp[0] == ' ' || !absolutePath(tmp)) continue; // read lastfiles - if (fs::exists(tmp) && !fs::is_directory(tmp) && lastfiles.size() < num_lastfiles) - lastfiles.push_back(tmp); + FileName const file(tmp); + if (fs::exists(file.toFilesystemEncoding()) && + !fs::is_directory(file.toFilesystemEncoding()) && + lastfiles.size() < num_lastfiles) + lastfiles.push_back(file); else lyxerr[Debug::INIT] << "LyX: Warning: Ignore last file: " << tmp << endl; } while (is.good()); @@ -87,11 +92,11 @@ void LastFilesSection::write(ostream & os) const { os << '\n' << sec_lastfiles << '\n'; copy(lastfiles.begin(), lastfiles.end(), - ostream_iterator(os, "\n")); + ostream_iterator(os, "\n")); } -void LastFilesSection::add(string const & file) +void LastFilesSection::add(FileName const & file) { // If file already exist, delete it and reinsert at front. LastFiles::iterator it = find(lastfiles.begin(), lastfiles.end(), file); @@ -124,11 +129,13 @@ void LastOpenedSection::read(istream & is) if (c == '[') break; getline(is, tmp); - if (tmp == "" || tmp[0] == '#' || tmp[0] == ' ') + if (tmp == "" || tmp[0] == '#' || tmp[0] == ' ' || !absolutePath(tmp)) continue; - if (fs::exists(tmp) && !fs::is_directory(tmp)) - lastopened.push_back(tmp); + FileName const file(tmp); + if (fs::exists(file.toFilesystemEncoding()) && + !fs::is_directory(file.toFilesystemEncoding())) + lastopened.push_back(file); else lyxerr[Debug::INIT] << "LyX: Warning: Ignore last opened file: " << tmp << endl; } while (is.good()); @@ -139,11 +146,11 @@ void LastOpenedSection::write(ostream & os) const { os << '\n' << sec_lastopened << '\n'; copy(lastopened.begin(), lastopened.end(), - ostream_iterator(os, "\n")); + ostream_iterator(os, "\n")); } -void LastOpenedSection::add(string const & file) +void LastOpenedSection::add(FileName const & file) { lastopened.push_back(file); } @@ -178,8 +185,13 @@ void LastFilePosSection::read(istream & is) itmp >> pos; itmp.ignore(2); // ignore ", " itmp >> fname; - if (fs::exists(fname) && !fs::is_directory(fname) && lastfilepos.size() < num_lastfilepos) - lastfilepos[fname] = boost::tie(pit, pos); + if (!absolutePath(fname)) + continue; + FileName const file(fname); + if (fs::exists(file.toFilesystemEncoding()) && + !fs::is_directory(file.toFilesystemEncoding()) && + lastfilepos.size() < num_lastfilepos) + lastfilepos[file] = boost::tie(pit, pos); else lyxerr[Debug::INIT] << "LyX: Warning: Ignore pos of last file: " << fname << endl; } catch (...) { @@ -201,13 +213,13 @@ void LastFilePosSection::write(ostream & os) const } -void LastFilePosSection::save(string const & fname, FilePos pos) +void LastFilePosSection::save(FileName const & fname, FilePos pos) { lastfilepos[fname] = pos; } -LastFilePosSection::FilePos LastFilePosSection::load(string const & fname) const +LastFilePosSection::FilePos LastFilePosSection::load(FileName const & fname) const { FilePosMap::const_iterator entry = lastfilepos.find(fname); // Has position information, return it. @@ -242,10 +254,15 @@ void BookmarksSection::read(istream & is) itmp >> pos; itmp.ignore(2); // ignore ", " itmp >> fname; + if (!absolutePath(fname)) + continue; + FileName const file(fname); // only load valid bookmarks - if (fs::exists(fname) && !fs::is_directory(fname) && bookmarks.size() < max_bookmarks) - bookmarks.push_back(Bookmark(fname, id, pos)); - else + if (fs::exists(file.toFilesystemEncoding()) && + !fs::is_directory(file.toFilesystemEncoding()) && + bookmarks.size() < max_bookmarks) + bookmarks.push_back(Bookmark(file, id, pos)); + else lyxerr[Debug::INIT] << "LyX: Warning: Ignore bookmark of file: " << fname << endl; } catch (...) { lyxerr[Debug::INIT] << "LyX: Warning: unknown Bookmark info: " << tmp << endl; @@ -265,7 +282,7 @@ void BookmarksSection::write(ostream & os) const } -void BookmarksSection::save(std::string const & fname, int par_id, pos_type par_pos, bool persistent) +void BookmarksSection::save(FileName const & fname, int par_id, pos_type par_pos, bool persistent) { if (persistent) { bookmarks.push_front(Bookmark(fname, par_id, par_pos)); @@ -407,7 +424,7 @@ Session::Session(unsigned int num) : { // locate the session file // note that the session file name 'session' is hard-coded - session_file = addName(package().user_support(), "session"); + session_file = FileName(addName(package().user_support(), "session")); // readFile(); } @@ -417,7 +434,7 @@ void Session::readFile() { // we will not complain if we can't find session_file nor will // we issue a warning. (Lgb) - ifstream is(session_file.c_str()); + ifstream is(session_file.toFilesystemEncoding().c_str()); string tmp; while (getline(is, tmp)) { @@ -446,7 +463,7 @@ void Session::readFile() void Session::writeFile() const { - ofstream os(session_file.c_str()); + ofstream os(session_file.toFilesystemEncoding().c_str()); if (os) { os << "## Automatically generated lyx session file \n" << "## Editing this file manually may cause lyx to crash.\n"; diff --git a/src/session.h b/src/session.h index aa8d63a795..83e7f26b94 100644 --- a/src/session.h +++ b/src/session.h @@ -13,7 +13,8 @@ #ifndef SESSION_H #define SESSION_H -#include +#include "support/filename.h" +#include "support/types.h" #include #include @@ -55,7 +56,7 @@ class LastFilesSection : SessionSection { public: /// - typedef std::deque LastFiles; + typedef std::deque LastFiles; public: /// @@ -77,7 +78,7 @@ public: file in the list is popped from the end. @param file the file to insert in the lastfile list. */ - void add(std::string const & file); + void add(support::FileName const & file); private: /// Default number of lastfiles. @@ -103,7 +104,7 @@ class LastOpenedSection : SessionSection { public: /// - typedef std::vector LastOpened; + typedef std::vector LastOpened; public: /// @@ -118,7 +119,7 @@ public: /** add file to lastopened file list @param file filename to add */ - void add(std::string const & file); + void add(support::FileName const & file); /** clear lastopened file list */ @@ -137,7 +138,7 @@ public: typedef boost::tuple FilePos; /// - typedef std::map FilePosMap; + typedef std::map FilePosMap; public: /// @@ -153,12 +154,12 @@ public: @param fname file entry for which to save position information @param pos position of the cursor when the file is closed. */ - void save(std::string const & fname, FilePos pos); + void save(support::FileName const & fname, FilePos pos); /** load saved cursor position from the fname entry in the filepos map @param fname file entry for which to load position information */ - FilePos load(std::string const & fname) const; + FilePos load(support::FileName const & fname) const; private: /// default number of lastfilepos to save */ @@ -177,7 +178,7 @@ public: class Bookmark { public: /// Filename - std::string filename; + support::FileName filename; /// Cursor paragraph Id int par_id; /// Cursor position @@ -185,7 +186,7 @@ public: /// Bookmark() : par_id(0), par_pos(0) {} /// - Bookmark(std::string const & f, int id, pos_type pos) + Bookmark(support::FileName const & f, int id, pos_type pos) : filename(f), par_id(id), par_pos(pos) {} }; @@ -199,7 +200,7 @@ public: /// Save the current position as bookmark /// if save==false, save to temp_bookmark - void save(std::string const & fname, int par_id, pos_type par_pos, bool persistent); + void save(support::FileName const & fname, int par_id, pos_type par_pos, bool persistent); /// return bookmark, return temp_bookmark if i==0 Bookmark const & bookmark(unsigned int i) const; @@ -379,7 +380,7 @@ public: private: /// file to save session, determined in the constructor. - std::string session_file; + support::FileName session_file; /** Read the session file. Reads the #.lyx/session# at the beginning of the LyX session. diff --git a/src/vc-backend.C b/src/vc-backend.C index 8ec387e297..5fb8f6bb92 100644 --- a/src/vc-backend.C +++ b/src/vc-backend.C @@ -31,6 +31,7 @@ namespace lyx { using support::addName; using support::addPath; using support::contains; +using support::FileName; using support::onlyFilename; using support::onlyPath; using support::quoteName; @@ -65,44 +66,42 @@ int VCS::doVCCommand(string const & cmd, string const & path) } -RCS::RCS(string const & m) +RCS::RCS(FileName const & m) { master_ = m; scanMaster(); } -string const RCS::find_file(string const & file) +FileName const RCS::find_file(FileName const & file) { - string tmp = file; // Check if *,v exists. - tmp += ",v"; + FileName tmp(file.absFilename() + ",v"); lyxerr[Debug::LYXVC] << "Checking if file is under rcs: " << tmp << endl; - if (fs::is_readable(tmp)) { + if (fs::is_readable(tmp.toFilesystemEncoding())) { lyxerr[Debug::LYXVC] << "Yes " << file << " is under rcs." << endl; return tmp; } else { // Check if RCS/*,v exists. - tmp = addName(addPath(onlyPath(file), "RCS"), file); - tmp += ",v"; + tmp = FileName(addName(addPath(onlyPath(file.absFilename()), "RCS"), file.absFilename()) + ",v"); lyxerr[Debug::LYXVC] << "Checking if file is under rcs: " << tmp << endl; - if (fs::is_readable(tmp)) { + if (fs::is_readable(tmp.toFilesystemEncoding())) { lyxerr[Debug::LYXVC] << "Yes " << file << " it is under rcs."<< endl; return tmp; } } - return string(); + return FileName(); } -void RCS::retrieve(string const & file) +void RCS::retrieve(FileName const & file) { lyxerr[Debug::LYXVC] << "LyXVC::RCS: retrieve.\n\t" << file << endl; - VCS::doVCCommand("co -q -r " + quoteName(file), + VCS::doVCCommand("co -q -r " + quoteName(file.toFilesystemEncoding()), string()); } @@ -111,7 +110,7 @@ void RCS::scanMaster() { lyxerr[Debug::LYXVC] << "LyXVC::RCS: scanMaster." << endl; - ifstream ifs(master_.c_str()); + ifstream ifs(master_.toFilesystemEncoding().c_str()); string token; bool read_enough = false; @@ -216,15 +215,15 @@ void RCS::undoLast() } -void RCS::getLog(string const & tmpf) +void RCS::getLog(FileName const & tmpf) { doVCCommand("rlog " + quoteName(onlyFilename(owner_->fileName())) - + " > " + tmpf, + + " > " + tmpf.toFilesystemEncoding(), owner_->filePath()); } -CVS::CVS(string const & m, string const & f) +CVS::CVS(FileName const & m, FileName const & f) { master_ = m; file_ = f; @@ -232,26 +231,27 @@ CVS::CVS(string const & m, string const & f) } -string const CVS::find_file(string const & file) +FileName const CVS::find_file(FileName const & file) { // First we look for the CVS/Entries in the same dir // where we have file. - string const dir = onlyPath(file) + "/CVS/Entries"; - string const tmpf = "/" + onlyFilename(file) + "/"; + FileName const dir(onlyPath(file.absFilename()) + "/CVS/Entries"); + string const tmpf = '/' + onlyFilename(file.absFilename()) + '/'; lyxerr[Debug::LYXVC] << "LyXVC: checking in `" << dir << "' for `" << tmpf << '\'' << endl; - if (fs::is_readable(dir)) { + if (fs::is_readable(dir.toFilesystemEncoding())) { // Ok we are at least in a CVS dir. Parse the CVS/Entries // and see if we can find this file. We do a fast and // dirty parse here. - ifstream ifs(dir.c_str()); + ifstream ifs(dir.toFilesystemEncoding().c_str()); string line; while (getline(ifs, line)) { lyxerr[Debug::LYXVC] << "\tEntries: " << line << endl; - if (contains(line, tmpf)) return dir; + if (contains(line, tmpf)) + return dir; } } - return string(); + return FileName(); } @@ -260,8 +260,8 @@ void CVS::scanMaster() lyxerr[Debug::LYXVC] << "LyXVC::CVS: scanMaster. \n Checking: " << master_ << endl; // Ok now we do the real scan... - ifstream ifs(master_.c_str()); - string tmpf = "/" + onlyFilename(file_) + "/"; + ifstream ifs(master_.toFilesystemEncoding().c_str()); + string tmpf = '/' + onlyFilename(file_.absFilename()) + '/'; lyxerr[Debug::LYXVC] << "\tlooking for `" << tmpf << '\'' << endl; string line; static regex const reg("/(.*)/(.*)/(.*)/(.*)/(.*)"); @@ -281,7 +281,7 @@ void CVS::scanMaster() //sm[4]; // options //sm[5]; // tag or tagdate // FIXME: must double check file is stattable/existing - time_t mod = fs::last_write_time(file_); + time_t mod = fs::last_write_time(file_.toFilesystemEncoding()); string mod_date = rtrim(asctime(gmtime(&mod)), "\n"); lyxerr[Debug::LYXVC] << "Date in Entries: `" << file_date @@ -346,10 +346,10 @@ void CVS::undoLast() } -void CVS::getLog(string const & tmpf) +void CVS::getLog(FileName const & tmpf) { doVCCommand("cvs log " + quoteName(onlyFilename(owner_->fileName())) - + " > " + tmpf, + + " > " + tmpf.toFilesystemEncoding(), owner_->filePath()); } diff --git a/src/vc-backend.h b/src/vc-backend.h index 65eccd7f25..d487b11c77 100644 --- a/src/vc-backend.h +++ b/src/vc-backend.h @@ -12,6 +12,8 @@ #ifndef VC_BACKEND_H #define VC_BACKEND_H +#include "support/filename.h" + #include @@ -44,7 +46,7 @@ public: * getLog - read the revision log into the given file * @param fname file name to read into */ - virtual void getLog(std::string const &) = 0; + virtual void getLog(support::FileName const &) = 0; /// return the current version description virtual std::string const versionString() const = 0; /// return the current version @@ -75,7 +77,7 @@ protected: * The master VC file. For RCS this is *,v or RCS/ *,v. master should * have full path. */ - std::string master_; + support::FileName master_; /// The status of the VC controlled file. VCStatus vcstatus; @@ -98,12 +100,12 @@ class RCS : public VCS { public: explicit - RCS(std::string const & m); + RCS(support::FileName const & m); /// return the revision file for the given file, if found - static std::string const find_file(std::string const & file); + static support::FileName const find_file(support::FileName const & file); - static void retrieve(std::string const & file); + static void retrieve(support::FileName const & file); virtual void registrer(std::string const & msg); @@ -115,7 +117,7 @@ public: virtual void undoLast(); - virtual void getLog(std::string const &); + virtual void getLog(support::FileName const &); virtual std::string const versionString() const { return "RCS: " + version_; @@ -131,10 +133,10 @@ class CVS : public VCS { public: /// explicit - CVS(std::string const & m, std::string const & f); + CVS(support::FileName const & m, support::FileName const & f); /// return the revision file for the given file, if found - static std::string const find_file(std::string const & file); + static support::FileName const find_file(support::FileName const & file); virtual void registrer(std::string const & msg); @@ -146,7 +148,7 @@ public: virtual void undoLast(); - virtual void getLog(std::string const &); + virtual void getLog(support::FileName const &); virtual std::string const versionString() const { return "CVS: " + version_; @@ -156,7 +158,7 @@ protected: virtual void scanMaster(); private: - std::string file_; + support::FileName file_; }; } // namespace lyx -- 2.39.2