]> git.lyx.org Git - features.git/commitdiff
Save the document directory path only if explicitly allowed.
authorEnrico Forestieri <forenr@lyx.org>
Sat, 23 May 2015 15:49:33 +0000 (17:49 +0200)
committerEnrico Forestieri <forenr@lyx.org>
Sat, 23 May 2015 15:49:33 +0000 (17:49 +0200)
A new preference is introduced for allowing the record of the document
directory path in the saved file. Without explicit consent, it is not saved.
If the origin tag contains an invalid/wrong path or garbage, LyX behaves
exactly as before, i.e., included files are simply not found.

src/BufferParams.cpp
src/LyXRC.cpp
src/LyXRC.h
src/frontends/qt4/GuiPrefs.cpp
src/frontends/qt4/ui/PrefDocHandlingUi.ui

index 8b193e00ecaa08525350c6501ab0d6a434104408..34f1a50187189f189f0d6b9c2d208ba8c5d9e6ad 100644 (file)
@@ -983,7 +983,8 @@ void BufferParams::writeFile(ostream & os, Buffer const * buf) const
        // Prints out the buffer info into the .lyx file given by file
 
        // the document directory
-       os << "\\origin " << buf->filePath() << '\n';
+       os << "\\origin "
+          << (lyxrc.save_origin ? buf->filePath() : "unavailable") << '\n';
 
        // the textclass
        os << "\\textclass " << buf->includedFilePath(addName(buf->layoutPos(),
index 0bf6d1d168437f83915c2504eb0637a055696477..650b1dfdf4f946645bdd96a2f54123853ba826cd 100644 (file)
@@ -172,6 +172,7 @@ LexerKeyword lyxrcTags[] = {
        { "\\print_to_printer", LyXRC::RC_PRINTTOPRINTER },
        { "\\printer", LyXRC::RC_PRINTER },
        { "\\save_compressed", LyXRC::RC_SAVE_COMPRESSED },
+       { "\\save_origin", LyXRC::RC_SAVE_ORIGIN },
        { "\\screen_dpi", LyXRC::RC_SCREEN_DPI },
        { "\\screen_font_roman", LyXRC::RC_SCREEN_FONT_ROMAN },
        { "\\screen_font_roman_foundry", LyXRC::RC_SCREEN_FONT_ROMAN_FOUNDRY },
@@ -295,6 +296,7 @@ void LyXRC::setDefaults()
        load_session = false;
        make_backup = true;
        save_compressed = false;
+       save_origin = false;
        backupdir_path.erase();
        display_graphics = true;
        // Spellchecker settings:
@@ -987,6 +989,9 @@ LyXRC::ReturnValues LyXRC::read(Lexer & lexrc, bool check_format)
                case RC_SAVE_COMPRESSED:
                        lexrc >> save_compressed;
                        break;
+               case RC_SAVE_ORIGIN:
+                       lexrc >> save_origin;
+                       break;
                case RC_BACKUPDIR_PATH:
                        if (lexrc.next()) {
                                backupdir_path = os::internal_path(lexrc.getString());
@@ -2424,6 +2429,13 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
                }
                if (tag != RC_LAST)
                        break;
+       case RC_SAVE_ORIGIN:
+               if (ignore_system_lyxrc ||
+                   save_origin != system_lyxrc.save_origin) {
+                       os << "\\save_origin " << convert<string>(save_origin) << '\n';
+               }
+               if (tag != RC_LAST)
+                       break;
        case RC_BACKUPDIR_PATH:
                if (ignore_system_lyxrc ||
                    backupdir_path != system_lyxrc.backupdir_path) {
@@ -3022,6 +3034,7 @@ void actOnUpdatedPrefs(LyXRC const & lyxrc_orig, LyXRC const & lyxrc_new)
        case LyXRC::RC_PRINT_ADAPTOUTPUT:
        case LyXRC::RC_PRINT_COMMAND:
        case LyXRC::RC_SAVE_COMPRESSED:
+       case LyXRC::RC_SAVE_ORIGIN:
        case LyXRC::RC_SCREEN_DPI:
        case LyXRC::RC_SCREEN_FONT_ROMAN:
        case LyXRC::RC_SCREEN_FONT_ROMAN_FOUNDRY:
index 613a9c7f06499857dc863dbfcd62d63510149c59..9392a0ef6d11a45e81894ef608145f9b6930a00a 100644 (file)
@@ -148,6 +148,7 @@ public:
                RC_PRINT_ADAPTOUTPUT,
                RC_PRINT_COMMAND,
                RC_SAVE_COMPRESSED,
+               RC_SAVE_ORIGIN,
                RC_SCREEN_DPI,
                RC_SCREEN_FONT_ROMAN,
                RC_SCREEN_FONT_ROMAN_FOUNDRY,
@@ -320,6 +321,8 @@ public:
        bool load_session;
        /// do we save new documents as compressed by default
        bool save_compressed;
+       /// whether or not to save the document dir in the file
+       bool save_origin;
        /// shall a backup file be created
        bool make_backup;
        /// A directory for storing backup files
index 23e42f10451858bbf8b1ed431320e64327ad9e47..2bb538eb00c491d06f92753668aa378827053ba9 100644 (file)
@@ -2628,6 +2628,8 @@ PrefDocHandling::PrefDocHandling(GuiPreferences * form)
                this, SIGNAL(changed()));
        connect(saveCompressedCB, SIGNAL(clicked()),
                this, SIGNAL(changed()));
+       connect(saveOriginCB, SIGNAL(clicked()),
+               this, SIGNAL(changed()));
 }
 
 
@@ -2639,6 +2641,7 @@ void PrefDocHandling::applyRC(LyXRC & rc) const
        rc.autosave = autoSaveCB->isChecked() ?  autoSaveSB->value() * 60 : 0;
        rc.make_backup = backupCB->isChecked();
        rc.save_compressed = saveCompressedCB->isChecked();
+       rc.save_origin = saveOriginCB->isChecked();
        rc.open_buffers_in_tabs = openDocumentsInTabsCB->isChecked();
        rc.single_instance = singleInstanceCB->isChecked();
        rc.single_close_tab_button = singleCloseTabButtonCB->isChecked();
@@ -2674,6 +2677,7 @@ void PrefDocHandling::updateRC(LyXRC const & rc)
        autoSaveSB->setEnabled(autosave);
        backupCB->setChecked(rc.make_backup);
        saveCompressedCB->setChecked(rc.save_compressed);
+       saveOriginCB->setChecked(rc.save_origin);
        openDocumentsInTabsCB->setChecked(rc.open_buffers_in_tabs);
        singleInstanceCB->setChecked(rc.single_instance && !rc.lyxpipes.empty());
        singleInstanceCB->setEnabled(!rc.lyxpipes.empty());
index 265172b4914c51343b832a5e8e92ac9187d0ecfe..3fdd71680aa44dfa9bd1e3f85970d7d91ae0bd59 100644 (file)
         </property>
        </widget>
       </item>
+      <item row="3" column="0">
+       <widget class="QCheckBox" name="saveOriginCB">
+        <property name="toolTip">
+         <string>If this is checked, the document directory path will be saved in the document.&#x0a;This allows moving the document elsewhere and still finding the included files.</string>
+        </property>
+        <property name="text">
+         <string>Save the &amp;document directory path</string>
+        </property>
+       </widget>
+      </item>
      </layout>
     </widget>
    </item>
   <tabstop>autoSaveCB</tabstop>
   <tabstop>autoSaveSB</tabstop>
   <tabstop>saveCompressedCB</tabstop>
+  <tabstop>saveOriginCB</tabstop>
  </tabstops>
  <includes>
   <include location="local">qt_i18n.h</include>