diff options
author | Jan Holesovsky <kendy@collabora.com> | 2016-02-10 13:26:50 +0100 |
---|---|---|
committer | Jan Holesovsky <kendy@collabora.com> | 2016-02-10 13:30:52 +0100 |
commit | 14aa9b0a818ca23efdf07a618ae493c7e7397752 (patch) | |
tree | 38f46ae6c48a389b3a1dfd31f5208b6b9f5e2707 | |
parent | 552ae012bd0321995a0b44501704e408f1d9d006 (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.cxx | 30 | ||||
-rw-r--r-- | include/LibreOfficeKit/LibreOfficeKit.hxx | 5 |
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) { |