summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJan Holesovsky <kendy@collabora.com>2016-02-10 13:26:50 +0100
committerJan Holesovsky <kendy@collabora.com>2016-02-10 13:30:52 +0100
commit14aa9b0a818ca23efdf07a618ae493c7e7397752 (patch)
tree38f46ae6c48a389b3a1dfd31f5208b6b9f5e2707
parent552ae012bd0321995a0b44501704e408f1d9d006 (diff)
lok: Introduce a "TakeOwnership" filter option for saveAs().
It is consumed by the saveAs() itself, and when provided, the document identity changes to the provided pUrl - meaning that '.uno:ModifiedStatus' is triggered as with the "Save As..." in the UI. This mode must not be used when saving to PNG or PDF. Change-Id: I11b5aa814476a8dcab9eac5202bd052828ebbd96
-rw-r--r--desktop/source/lib/init.cxx30
-rw-r--r--include/LibreOfficeKit/LibreOfficeKit.hxx5
2 files changed, 34 insertions, 1 deletions
diff --git a/desktop/source/lib/init.cxx b/desktop/source/lib/init.cxx
index 507e4f828b20..d5bec92870e3 100644
--- a/desktop/source/lib/init.cxx
+++ b/desktop/source/lib/init.cxx
@@ -674,6 +674,30 @@ static int doc_saveAs(LibreOfficeKitDocument* pThis, const char* sUrl, const cha
OUString aFilterOptions = getUString(pFilterOptions);
+ // 'TakeOwnership' == this is a 'real' SaveAs (that is, the document
+ // gets a new name). When this is not provided, the meaning of
+ // saveAs() is more like save-a-copy, which allows saving to any
+ // random format like PDF or PNG.
+ // It is not a real filter option, so we have to filter it out.
+ bool bTakeOwnership = false;
+ int nIndex = -1;
+ if (aFilterOptions == "TakeOwnership")
+ {
+ bTakeOwnership = true;
+ aFilterOptions = "";
+ }
+ else if ((nIndex = aFilterOptions.indexOf(",TakeOwnership")) >= 0 || (nIndex = aFilterOptions.indexOf("TakeOwnership,")) >= 0)
+ {
+ OUString aFiltered;
+ if (nIndex > 0)
+ aFiltered = aFilterOptions.copy(0, nIndex);
+ if (nIndex + 14 < aFilterOptions.getLength())
+ aFiltered = aFiltered + aFilterOptions.copy(nIndex + 14);
+
+ bTakeOwnership = true;
+ aFilterOptions = aFiltered;
+ }
+
MediaDescriptor aSaveMediaDescriptor;
aSaveMediaDescriptor["Overwrite"] <<= sal_True;
aSaveMediaDescriptor["FilterName"] <<= aFilterName;
@@ -691,7 +715,11 @@ static int doc_saveAs(LibreOfficeKitDocument* pThis, const char* sUrl, const cha
}
uno::Reference<frame::XStorable> xStorable(pDocument->mxComponent, uno::UNO_QUERY_THROW);
- xStorable->storeToURL(aURL, aSaveMediaDescriptor.getAsConstPropertyValueList());
+
+ if (bTakeOwnership)
+ xStorable->storeAsURL(aURL, aSaveMediaDescriptor.getAsConstPropertyValueList());
+ else
+ xStorable->storeToURL(aURL, aSaveMediaDescriptor.getAsConstPropertyValueList());
return true;
}
diff --git a/include/LibreOfficeKit/LibreOfficeKit.hxx b/include/LibreOfficeKit/LibreOfficeKit.hxx
index 1f2311ae6604..84741e0ee20b 100644
--- a/include/LibreOfficeKit/LibreOfficeKit.hxx
+++ b/include/LibreOfficeKit/LibreOfficeKit.hxx
@@ -45,6 +45,11 @@ public:
* @param pUrl the location where to store the document
* @param pFormat the format to use while exporting, when omitted, then deducted from pURL's extension
* @param pFilterOptions options for the export filter, e.g. SkipImages.
+ * Another useful FilterOption is "TakeOwnership". It is consumed
+ * by the saveAs() itself, and when provided, the document identity
+ * changes to the provided pUrl - meaning that '.uno:ModifiedStatus'
+ * is triggered as with the "Save As..." in the UI.
+ * "TakeOwnership" mode must not be used when saving to PNG or PDF.
*/
inline bool saveAs(const char* pUrl, const char* pFormat = NULL, const char* pFilterOptions = NULL)
{