]> git.lyx.org Git - lyx.git/blobdiff - src/session.C
Fix loop when opening TOC widget in an empty document, basically by Richard Heck.
[lyx.git] / src / session.C
index e6c6967bc321b01c16ea8d40d69c46c4a92600f1..d8ac631cd31f169701b9b5a6e01a5e2e9c992358 100644 (file)
@@ -83,7 +83,7 @@ void LastFilesSection::read(istream & is)
                    lastfiles.size() < num_lastfiles)
                        lastfiles.push_back(file);
                else 
-                       lyxerr[Debug::INIT] << "LyX: Warning: Ignore last file: " << tmp << endl;
+                       LYXERR(Debug::INIT) << "LyX: Warning: Ignore last file: " << tmp << endl;
        } while (is.good());
 }
 
@@ -113,7 +113,7 @@ void LastFilesSection::setNumberOfLastFiles(unsigned int no)
        if (0 < no && no <= absolute_max_last_files)
                num_lastfiles = no;
        else {
-               lyxerr[Debug::INIT] << "LyX: session: too many last files\n"
+               LYXERR(Debug::INIT) << "LyX: session: too many last files\n"
                       << "\tdefault (=" << default_num_last_files
                       << ") used." << endl;
                num_lastfiles = default_num_last_files;
@@ -137,7 +137,7 @@ void LastOpenedSection::read(istream & is)
                    !fs::is_directory(file.toFilesystemEncoding()))
                        lastopened.push_back(file);
                else
-                       lyxerr[Debug::INIT] << "LyX: Warning: Ignore last opened file: " << tmp << endl;
+                       LYXERR(Debug::INIT) << "LyX: Warning: Ignore last opened file: " << tmp << endl;
        } while (is.good());
 }
 
@@ -193,9 +193,9 @@ void LastFilePosSection::read(istream & is)
                            lastfilepos.size() < num_lastfilepos)
                                lastfilepos[file] = boost::tie(pit, pos);
                        else
-                               lyxerr[Debug::INIT] << "LyX: Warning: Ignore pos of last file: " << fname << endl;
+                               LYXERR(Debug::INIT) << "LyX: Warning: Ignore pos of last file: " << fname << endl;
                } catch (...) {
-                       lyxerr[Debug::INIT] << "LyX: Warning: unknown pos of last file: " << tmp << endl;
+                       LYXERR(Debug::INIT) << "LyX: Warning: unknown pos of last file: " << tmp << endl;
                }
        } while (is.good());
 }
@@ -231,6 +231,14 @@ LastFilePosSection::FilePos LastFilePosSection::load(FileName const & fname) con
 }
 
 
+void BookmarksSection::clear()
+{
+       // keep bookmark[0], the temporary one
+       bookmarks.resize(1);
+       bookmarks.resize(max_bookmarks + 1);
+}
+
+
 void BookmarksSection::read(istream & is)
 {
        string tmp;
@@ -244,11 +252,14 @@ void BookmarksSection::read(istream & is)
 
                try {
                        // read bookmarks
-                       // pit, pos, file\n
+                       // idx, pit, pos, file\n
+                       unsigned int idx;
                        pit_type pit;
                        pos_type pos;
                        string fname;
                        istringstream itmp(tmp);
+                       itmp >> idx;
+                       itmp.ignore(2);  // ignore ", "
                        itmp >> pit;
                        itmp.ignore(2);  // ignore ", "
                        itmp >> pos;
@@ -260,12 +271,12 @@ void BookmarksSection::read(istream & is)
                        // only load valid bookmarks
                        if (fs::exists(file.toFilesystemEncoding()) &&
                            !fs::is_directory(file.toFilesystemEncoding()) &&
-                           bookmarks.size() < max_bookmarks)
-                               bookmarks.push_back(Bookmark(file, pit, 0, pos));
+                           idx <= max_bookmarks)
+                               bookmarks[idx] = Bookmark(file, pit, pos, 0, 0);
                        else
-                               lyxerr[Debug::INIT] << "LyX: Warning: Ignore bookmark of file: " << fname << endl;
+                               LYXERR(Debug::INIT) << "LyX: Warning: Ignore bookmark of file: " << fname << endl;
                } catch (...) {
-                       lyxerr[Debug::INIT] << "LyX: Warning: unknown Bookmark info: " << tmp << endl;
+                       LYXERR(Debug::INIT) << "LyX: Warning: unknown Bookmark info: " << tmp << endl;
                }
        } while (is.good());
 }
@@ -274,41 +285,34 @@ void BookmarksSection::read(istream & is)
 void BookmarksSection::write(ostream & os) const
 {
        os << '\n' << sec_bookmarks << '\n';
-       for (size_t i = 0; i < bookmarks.size(); ++i) {
-               os << bookmarks[i].par_pit << ", "
-                  << bookmarks[i].par_pos << ", "
-                  << bookmarks[i].filename << '\n';
+       for (size_t i = 1; i <= max_bookmarks; ++i) {
+               if (isValid(i))
+                       os << i << ", "
+                          << bookmarks[i].bottom_pit << ", "
+                          << bookmarks[i].bottom_pos << ", "
+                          << bookmarks[i].filename << '\n';
        }
 }
 
 
-void BookmarksSection::save(FileName const & fname, pit_type par_pit, int par_id, pos_type par_pos, bool persistent)
+void BookmarksSection::save(FileName const & fname, pit_type bottom_pit, pos_type bottom_pos,
+       int top_id, pos_type top_pos, unsigned int idx)
 {
-       if (persistent) {
-               bookmarks.push_back(Bookmark(fname, par_pit, par_id, par_pos));
-               if (bookmarks.size() > max_bookmarks)
-                       bookmarks.pop_back();
-               }
-       else
-               temp_bookmark = Bookmark(fname, par_pit, par_id, par_pos);
+       // silently ignore bookmarks when idx is out of range
+       if (idx <= max_bookmarks)
+               bookmarks[idx] = Bookmark(fname, bottom_pit, bottom_pos, top_id, top_pos);
 }
 
 
 bool BookmarksSection::isValid(unsigned int i) const
 {
-       if (i == 0)
-               return !temp_bookmark.filename.empty();
-       else
-               return i <= bookmarks.size() && !bookmarks[i-1].filename.empty();
+       return i <= max_bookmarks && !bookmarks[i].filename.empty();
 }
 
 
 BookmarksSection::Bookmark const & BookmarksSection::bookmark(unsigned int i) const
 {
-       if (i == 0)
-               return temp_bookmark;
-       else
-               return bookmarks[i-1];
+       return bookmarks[i];
 }
 
 
@@ -341,9 +345,9 @@ void ToolbarSection::read(istream & is)
                                value >> posy;
                                toolbars.push_back(boost::make_tuple(key, ToolbarInfo(state, location, posx, posy)));
                        } else 
-                               lyxerr[Debug::INIT] << "LyX: Warning: Ignore toolbar info: " << tmp << endl;
+                               LYXERR(Debug::INIT) << "LyX: Warning: Ignore toolbar info: " << tmp << endl;
                } catch (...) {
-                       lyxerr[Debug::INIT] << "LyX: Warning: unknown Toolbar info: " << tmp << endl;
+                       LYXERR(Debug::INIT) << "LyX: Warning: unknown Toolbar info: " << tmp << endl;
                }
        } while (is.good());
        // sort the toolbars by location, line and position
@@ -420,9 +424,9 @@ void SessionInfoSection::read(istream & is)
                                string value = tmp.substr(pos + 3);
                                sessioninfo[key] = value;
                        } else
-                               lyxerr[Debug::INIT] << "LyX: Warning: Ignore session info: " << tmp << endl;
+                               LYXERR(Debug::INIT) << "LyX: Warning: Ignore session info: " << tmp << endl;
                } catch (...) {
-                       lyxerr[Debug::INIT] << "LyX: Warning: unknown Session info: " << tmp << endl;
+                       LYXERR(Debug::INIT) << "LyX: Warning: unknown Session info: " << tmp << endl;
                }
        } while (is.good());
 }
@@ -461,7 +465,7 @@ Session::Session(unsigned int num) :
 {
        // locate the session file
        // note that the session file name 'session' is hard-coded
-       session_file = FileName(addName(package().user_support(), "session"));
+       session_file = FileName(addName(package().user_support().absFilename(), "session"));
        //
        readFile();
 }
@@ -493,7 +497,7 @@ void Session::readFile()
                else if (tmp == sec_session)
                        sessionInfo().read(is);
                else
-                       lyxerr[Debug::INIT] << "LyX: Warning: unknown Session section: " << tmp << endl;
+                       LYXERR(Debug::INIT) << "LyX: Warning: unknown Session section: " << tmp << endl;
        }
 }
 
@@ -512,7 +516,7 @@ void Session::writeFile() const
                toolbars().write(os);
                sessionInfo().write(os);
        } else
-               lyxerr[Debug::INIT] << "LyX: Warning: unable to save Session: "
+               LYXERR(Debug::INIT) << "LyX: Warning: unable to save Session: "
                       << session_file << endl;
 }