[PATCH] Change in core[libreoffice-4-0]: fdo#58069: Invalidate sheet stream cache when directory path...
Kohei Yoshida (via Code Review)
gerrit at gerrit.libreoffice.org
Thu Jan 10 13:30:29 PST 2013
Hi,
I have submitted a patch for review:
https://gerrit.libreoffice.org/1634
To pull it, you can do:
git pull ssh://gerrit.libreoffice.org:29418/core refs/changes/34/1634/1
fdo#58069: Invalidate sheet stream cache when directory path changes.
To properly regenerate hyperlinks (among other things) which depend on
the full path of the host document.
Change-Id: I44fdd5b0ef0a57bf4fae13f29f1ebacfe1ab19a8
---
M sc/inc/document.hxx
M sc/source/core/data/document.cxx
M sc/source/ui/docshell/docsh.cxx
3 files changed, 49 insertions(+), 1 deletion(-)
diff --git a/sc/inc/document.hxx b/sc/inc/document.hxx
index 5b5a472..76df284 100644
--- a/sc/inc/document.hxx
+++ b/sc/inc/document.hxx
@@ -571,6 +571,7 @@
void AppendTabOnLoad(const rtl::OUString& rName);
void SetTabNameOnLoad(SCTAB nTab, const rtl::OUString& rName);
+ void InvalidateStreamOnSave();
SC_DLLPUBLIC bool InsertTab( SCTAB nPos, const rtl::OUString& rName,
bool bExternalDocument = false );
diff --git a/sc/source/core/data/document.cxx b/sc/source/core/data/document.cxx
index 9d8a8c3..65e904f 100644
--- a/sc/source/core/data/document.cxx
+++ b/sc/source/core/data/document.cxx
@@ -402,6 +402,17 @@
maTabs[nTab]->SetName(rName);
}
+void ScDocument::InvalidateStreamOnSave()
+{
+ TableContainer::iterator it = maTabs.begin(), itEnd = maTabs.end();
+ for (; it != itEnd; ++it)
+ {
+ ScTable* pTab = *it;
+ if (pTab)
+ pTab->SetStreamValid(false);
+ }
+}
+
bool ScDocument::InsertTab( SCTAB nPos, const rtl::OUString& rName,
bool bExternalDocument )
{
diff --git a/sc/source/ui/docshell/docsh.cxx b/sc/source/ui/docshell/docsh.cxx
index 291f5e0..948f622 100644
--- a/sc/source/ui/docshell/docsh.cxx
+++ b/sc/source/ui/docshell/docsh.cxx
@@ -34,6 +34,7 @@
#include <sfx2/objface.hxx>
#include <svl/documentlockfile.hxx>
#include <svl/sharecontrolfile.hxx>
+#include "svl/urihelper.hxx"
#include "chgtrack.hxx"
#include "chgviset.hxx"
#include <com/sun/star/awt/Key.hpp>
@@ -1526,10 +1527,45 @@
return bRet;
}
+namespace {
+
+/**
+ * Remove the file name from the full path, to keep only the directory path.
+ */
+void popFileName(OUString& rPath)
+{
+ if (!rPath.isEmpty())
+ {
+ INetURLObject aURLObj(rPath);
+ aURLObj.removeSegment();
+ rPath = aURLObj.GetMainURL(INetURLObject::NO_DECODE);
+ }
+}
+
+}
sal_Bool ScDocShell::SaveAs( SfxMedium& rMedium )
{
- RTL_LOGFILE_CONTEXT_AUTHOR ( aLog, "sc", "nn93723", "ScDocShell::SaveAs" );
+ OUString aCurPath; // empty for new document that hasn't been saved.
+ const SfxMedium* pCurMedium = GetMedium();
+ if (pCurMedium)
+ {
+ aCurPath = pCurMedium->GetName();
+ popFileName(aCurPath);
+ }
+
+ if (!aCurPath.isEmpty())
+ {
+ // current document has a path -> not a brand-new document.
+ OUString aNewPath = rMedium.GetName();
+ popFileName(aNewPath);
+ OUString aRel = URIHelper::simpleNormalizedMakeRelative(aCurPath, aNewPath);
+ if (!aRel.isEmpty())
+ {
+ // Directory path will change before and after the save.
+ aDocument.InvalidateStreamOnSave();
+ }
+ }
ScTabViewShell* pViewShell = GetBestViewShell();
bool bNeedsRehash = ScPassHashHelper::needsPassHashRegen(aDocument, PASSHASH_SHA1);
--
To view, visit https://gerrit.libreoffice.org/1634
To unsubscribe, visit https://gerrit.libreoffice.org/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: I44fdd5b0ef0a57bf4fae13f29f1ebacfe1ab19a8
Gerrit-PatchSet: 1
Gerrit-Project: core
Gerrit-Branch: libreoffice-4-0
Gerrit-Owner: Kohei Yoshida <kohei.yoshida at gmail.com>
More information about the LibreOffice
mailing list