summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMaxim Monastirsky <momonasmon@gmail.com>2015-06-30 20:30:33 +0300
committerMaxim Monastirsky <momonasmon@gmail.com>2015-07-01 20:55:13 +0000
commitd9c476bfbb4a8f1858c072d2fba33aa9e8e0ae92 (patch)
treef513eb973ab03396a2846a894fba6f66a506462f
parentff4b8d39e649ed56770b28550158b5148432ee48 (diff)
tdf#92431 Keep thumbnail for modified but unsaved doc
A regression of 1166966eb4112fdf332c656eae5082d82a3ec2f2. We need to consider 2 use-cases: 1. Protecting an existing document with a password (by overwriting the original file). In this case we don't want to generate a thumbnail from the now encrypted file, but we do want to erase the stored thumbnail and show a generic icon instead. 2. Closing a modified document without saving the changes. Here we don't want to generate a thumbnail either, because it may contain the unsaved changes, but either we don't want to replace the stored thumbnail, because most likely it correctly represents the last saved state of the document. Change-Id: Ia7b1f3dbc9fbbc2ef1d87442c1dee25306f65826 Reviewed-on: https://gerrit.libreoffice.org/16659 Tested-by: Jenkins <ci@libreoffice.org> Reviewed-by: Maxim Monastirsky <momonasmon@gmail.com>
-rw-r--r--dbaccess/source/ui/app/AppController.cxx2
-rw-r--r--include/unotools/historyoptions.hxx3
-rw-r--r--sfx2/source/appl/newhelp.cxx2
-rw-r--r--sfx2/source/appl/sfxpicklist.cxx35
-rw-r--r--unotools/source/config/historyoptions.cxx17
5 files changed, 35 insertions, 24 deletions
diff --git a/dbaccess/source/ui/app/AppController.cxx b/dbaccess/source/ui/app/AppController.cxx
index 50731edd846f..99234fa833ce 100644
--- a/dbaccess/source/ui/app/AppController.cxx
+++ b/dbaccess/source/ui/app/AppController.cxx
@@ -399,7 +399,7 @@ void SAL_CALL OApplicationController::disposing()
aFilter,
getStrippedDatabaseName(),
OUString(),
- OUString());
+ boost::none);
// add to recent document list
if ( aURL.GetProtocol() == INetProtocol::File )
diff --git a/include/unotools/historyoptions.hxx b/include/unotools/historyoptions.hxx
index aaf0e2e62ed6..e90ba592a4de 100644
--- a/include/unotools/historyoptions.hxx
+++ b/include/unotools/historyoptions.hxx
@@ -20,6 +20,7 @@
#ifndef INCLUDED_UNOTOOLS_HISTORYOPTIONS_HXX
#define INCLUDED_UNOTOOLS_HISTORYOPTIONS_HXX
+#include <boost/optional.hpp>
#include <unotools/unotoolsdllapi.h>
#include <sal/types.h>
#include <osl/mutex.hxx>
@@ -94,7 +95,7 @@ public:
*/
void AppendItem(EHistoryType eHistory,
const OUString& sURL, const OUString& sFilter, const OUString& sTitle,
- const OUString& sPassword, const OUString& sThumbnail);
+ const OUString& sPassword, const boost::optional<OUString>& sThumbnail);
/** Delete item from the specified list.
*/
diff --git a/sfx2/source/appl/newhelp.cxx b/sfx2/source/appl/newhelp.cxx
index 11b838edaab3..c936655737b8 100644
--- a/sfx2/source/appl/newhelp.cxx
+++ b/sfx2/source/appl/newhelp.cxx
@@ -1198,7 +1198,7 @@ void BookmarksBox_Impl::dispose()
{
OUString aTitle = GetEntry(i);
OUString* pURL = static_cast<OUString*>(GetEntryData(i));
- aHistOpt.AppendItem(eHELPBOOKMARKS, *pURL, sEmpty, aTitle, sEmpty, sEmpty);
+ aHistOpt.AppendItem(eHELPBOOKMARKS, *pURL, sEmpty, aTitle, sEmpty, boost::none);
delete pURL;
}
ListBox::dispose();
diff --git a/sfx2/source/appl/sfxpicklist.cxx b/sfx2/source/appl/sfxpicklist.cxx
index 7e59beb047e7..5029b7d089dd 100644
--- a/sfx2/source/appl/sfxpicklist.cxx
+++ b/sfx2/source/appl/sfxpicklist.cxx
@@ -194,26 +194,33 @@ void SfxPickList::AddDocumentToPickList( SfxObjectShell* pDocSh )
aFilter = pFilter->GetFilterName();
// generate a thumbnail
- OUString aThumbnail;
+ boost::optional<OUString> aThumbnail;
// don't generate thumbnail when in headless mode, or on non-desktop (?)
#if HAVE_FEATURE_DESKTOP
- SFX_ITEMSET_ARG( pMed->GetItemSet(), pEncryptionDataItem, SfxUnoAnyItem, SID_ENCRYPTIONDATA, false );
-
- if (!pDocSh->IsModified() && !pEncryptionDataItem && !Application::IsHeadlessModeEnabled())
+ if (!pDocSh->IsModified() && !Application::IsHeadlessModeEnabled())
{
// not modified => the document matches what is in the shell
- std::shared_ptr<GDIMetaFile> xMetaFile = pDocSh->GetPreviewMetaFile();
- BitmapEx aResultBitmap;
- if (xMetaFile->CreateThumbnail(aResultBitmap))
+ SFX_ITEMSET_ARG( pMed->GetItemSet(), pEncryptionDataItem, SfxUnoAnyItem, SID_ENCRYPTIONDATA, false );
+ if ( pEncryptionDataItem )
+ {
+ // encrypted document, will show a generic document icon instead
+ aThumbnail = OUString();
+ }
+ else
{
- SvMemoryStream aStream(65535, 65535);
- vcl::PNGWriter aWriter(aResultBitmap);
- if (aWriter.Write(aStream))
+ std::shared_ptr<GDIMetaFile> xMetaFile = pDocSh->GetPreviewMetaFile();
+ BitmapEx aResultBitmap;
+ if (xMetaFile->CreateThumbnail(aResultBitmap))
{
- Sequence<sal_Int8> aSequence(static_cast<const sal_Int8*>(aStream.GetData()), aStream.Tell());
- OUStringBuffer aBuffer;
- ::sax::Converter::encodeBase64(aBuffer, aSequence);
- aThumbnail = aBuffer.makeStringAndClear();
+ SvMemoryStream aStream(65535, 65535);
+ vcl::PNGWriter aWriter(aResultBitmap);
+ if (aWriter.Write(aStream))
+ {
+ Sequence<sal_Int8> aSequence(static_cast<const sal_Int8*>(aStream.GetData()), aStream.Tell());
+ OUStringBuffer aBuffer;
+ ::sax::Converter::encodeBase64(aBuffer, aSequence);
+ aThumbnail = aBuffer.makeStringAndClear();
+ }
}
}
}
diff --git a/unotools/source/config/historyoptions.cxx b/unotools/source/config/historyoptions.cxx
index 94d87bdfc28d..86da95611e08 100644
--- a/unotools/source/config/historyoptions.cxx
+++ b/unotools/source/config/historyoptions.cxx
@@ -87,7 +87,7 @@ public:
void AppendItem(EHistoryType eHistory,
const OUString& sURL, const OUString& sFilter, const OUString& sTitle,
- const OUString& sPassword, const OUString& sThumbnail);
+ const OUString& sPassword, const boost::optional<OUString>& sThumbnail);
void DeleteItem(EHistoryType eHistory, const OUString& sURL);
@@ -352,7 +352,7 @@ Sequence< Sequence<PropertyValue> > SvtHistoryOptions_Impl::GetList(EHistoryType
void SvtHistoryOptions_Impl::AppendItem(EHistoryType eHistory,
const OUString& sURL, const OUString& sFilter, const OUString& sTitle,
- const OUString& sPassword, const OUString& sThumbnail)
+ const OUString& sPassword, const boost::optional<OUString>& sThumbnail)
{
uno::Reference<container::XNameAccess> xListAccess(GetListAccess(eHistory));
if (!xListAccess.is())
@@ -377,9 +377,12 @@ void SvtHistoryOptions_Impl::AppendItem(EHistoryType eHistory,
// The item to be appended already exists
if (xItemList->hasByName(sURL))
{
- // update the thumbnail
- xItemList->getByName(sURL) >>= xSet;
- xSet->setPropertyValue(s_sThumbnail, uno::makeAny(sThumbnail));
+ if (sThumbnail)
+ {
+ // update the thumbnail
+ xItemList->getByName(sURL) >>= xSet;
+ xSet->setPropertyValue(s_sThumbnail, uno::makeAny(*sThumbnail));
+ }
for (sal_Int32 i=0; i<nLength; ++i)
{
@@ -466,7 +469,7 @@ void SvtHistoryOptions_Impl::AppendItem(EHistoryType eHistory,
xSet->setPropertyValue(s_sFilter, uno::makeAny(sFilter));
xSet->setPropertyValue(s_sTitle, uno::makeAny(sTitle));
xSet->setPropertyValue(s_sPassword, uno::makeAny(sPassword));
- xSet->setPropertyValue(s_sThumbnail, uno::makeAny(sThumbnail));
+ xSet->setPropertyValue(s_sThumbnail, uno::makeAny(sThumbnail.get_value_or(OUString())));
::comphelper::ConfigurationHelper::flush(m_xCfg);
}
@@ -605,7 +608,7 @@ Sequence< Sequence< PropertyValue > > SvtHistoryOptions::GetList( EHistoryType e
void SvtHistoryOptions::AppendItem(EHistoryType eHistory,
const OUString& sURL, const OUString& sFilter, const OUString& sTitle,
- const OUString& sPassword, const OUString& sThumbnail)
+ const OUString& sPassword, const boost::optional<OUString>& sThumbnail)
{
MutexGuard aGuard(theHistoryOptionsMutex::get());