forked from amazingfate/loongoffice
... because trying to activate this view on load will throw and crash Unlike in Writer (SwPagePreview), Calc's ScPreviewShell overrides WriteUserDataSequence to export the view data. This was implemented in commit 1f51730f3c5b05c3afaa35431c925482e8152783. That does not give any clue why is this necessary, so I don't want to revert it. So to pass the flag to XViewDataSupplier::getViewData, this patch sets the flag in current context using comphelper::NewFlagContext. This allows to only skip providing the data conditionally. Change-Id: I95d70b30b0b8762d2b5c703c3e572064d0b2ef75 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/99441 Tested-by: Jenkins Reviewed-by: Mike Kaganski <mike.kaganski@collabora.com>
72 lines
2.2 KiB
C++
72 lines
2.2 KiB
C++
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
|
|
/*
|
|
* This file is part of the LibreOffice project.
|
|
*
|
|
* This Source Code Form is subject to the terms of the Mozilla Public
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
|
*/
|
|
|
|
#ifndef INCLUDED_COMPHELPER_SETFLAGCONTEXTHELPER_HXX
|
|
#define INCLUDED_COMPHELPER_SETFLAGCONTEXTHELPER_HXX
|
|
|
|
#include <com/sun/star/uno/XCurrentContext.hpp>
|
|
#include <cppuhelper/implbase.hxx>
|
|
#include <uno/current_context.hxx>
|
|
|
|
namespace comphelper
|
|
{
|
|
// Used to flag some named value to be true for all code running in this context
|
|
class SetFlagContext final : public cppu::WeakImplHelper<css::uno::XCurrentContext>
|
|
{
|
|
public:
|
|
explicit SetFlagContext(const OUString& sName,
|
|
css::uno::Reference<css::uno::XCurrentContext> const& xContext)
|
|
: m_sName(sName)
|
|
, mxNextContext(xContext)
|
|
{
|
|
}
|
|
SetFlagContext(const SetFlagContext&) = delete;
|
|
SetFlagContext& operator=(const SetFlagContext&) = delete;
|
|
|
|
virtual css::uno::Any SAL_CALL getValueByName(OUString const& Name) override
|
|
{
|
|
if (Name == m_sName)
|
|
return css::uno::Any(true);
|
|
else if (mxNextContext.is())
|
|
return mxNextContext->getValueByName(Name);
|
|
else
|
|
return css::uno::Any();
|
|
}
|
|
|
|
private:
|
|
OUString m_sName;
|
|
css::uno::Reference<css::uno::XCurrentContext> mxNextContext;
|
|
};
|
|
|
|
// Returns a new context that reports the named value to be true
|
|
inline css::uno::Reference<css::uno::XCurrentContext> NewFlagContext(const OUString& sName)
|
|
{
|
|
return new SetFlagContext(sName, css::uno::getCurrentContext());
|
|
}
|
|
|
|
// A specialization for preventing "Java must be enabled" interaction
|
|
inline css::uno::Reference<css::uno::XCurrentContext> NoEnableJavaInteractionContext()
|
|
{
|
|
return NewFlagContext("DontEnableJava");
|
|
}
|
|
|
|
inline bool IsContextFlagActive(const OUString& sName)
|
|
{
|
|
bool bFlag = false;
|
|
if (const auto xContext = css::uno::getCurrentContext())
|
|
xContext->getValueByName(sName) >>= bFlag;
|
|
return bFlag;
|
|
}
|
|
|
|
} // namespace comphelper
|
|
|
|
#endif // INCLUDED_COMPHELPER_SETFLAGCONTEXTHELPER_HXX
|
|
|
|
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|