Show infobar instead of blocking dialog when macros are not allowed
Change-Id: I45f898aaf15cb3540abff32954881186015cc6e5 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/146250 Tested-by: Jenkins Reviewed-by: Samuel Mehrbrodt <samuel.mehrbrodt@allotropia.de>
This commit is contained in:
parent
43737fd5dd
commit
f41627ab60
5 changed files with 27 additions and 46 deletions
|
@ -293,6 +293,7 @@
|
|||
#define STR_REFRESH_MASTER_PASSWORD NC_("STR_REFRESH_MASTER_PASSWORD", "The master password is stored in an outdated format, you should refresh it")
|
||||
#define STR_REFRESH_PASSWORD NC_("STR_REFRESH_PASSWORD", "Refresh Password")
|
||||
#define STR_CONTAINS_MACROS NC_("STR_CONTAINS_MACROS", "Macros in this document are disabled due to the Macro Security settings.")
|
||||
#define STR_MACROS_DISABLED NC_("STR_MACROS_DISABLED", "Macros are disabled due to the Macro Security settings.")
|
||||
#define STR_MACROS NC_("STR_MACROS", "Show Macros")
|
||||
#define STR_EVENTS NC_("STR_EVENTS", "Show Events")
|
||||
|
||||
|
|
|
@ -34,13 +34,9 @@ class ErrCode;
|
|||
#define ERRCODE_SFX_CANTGETPASSWD ErrCode(ErrCodeArea::Sfx, ErrCodeClass::Read, 42)
|
||||
#define ERRCODE_SFX_NOMOREDOCUMENTSALLOWED ErrCode(WarningFlag::Yes, ErrCodeArea::Sfx, ErrCodeClass::NONE, 44)
|
||||
#define ERRCODE_SFX_CANTCREATEBACKUP ErrCode(ErrCodeArea::Sfx, ErrCodeClass::Create, 50)
|
||||
#define ERRCODE_SFX_MACROS_SUPPORT_DISABLED ErrCode(WarningFlag::Yes, ErrCodeArea::Sfx, ErrCodeClass::NONE, 51)
|
||||
#define ERRCODE_SFX_DOCUMENT_MACRO_DISABLED ErrCode(WarningFlag::Yes, ErrCodeArea::Sfx, ErrCodeClass::NONE, 52)
|
||||
#define ERRCODE_SFX_DOCUMENT_MACRO_DISABLED_CONTENT_UNSIGNED ErrCode(WarningFlag::Yes, ErrCodeArea::Sfx, ErrCodeClass::NONE, 53)
|
||||
#define ERRCODE_SFX_SHARED_NOPASSWORDCHANGE ErrCode(WarningFlag::Yes, ErrCodeArea::Sfx, ErrCodeClass::NONE, 54)
|
||||
#define ERRCODE_SFX_INCOMPLETE_ENCRYPTION ErrCode(WarningFlag::Yes, ErrCodeArea::Sfx, ErrCodeClass::NONE, 55)
|
||||
#define ERRCODE_SFX_DOCUMENT_MACRO_DISABLED_MAC \
|
||||
ErrCode(WarningFlag::Yes, ErrCodeArea::Sfx, ErrCodeClass::NONE, 56)
|
||||
#define ERRCODE_SFX_FORMAT_ROWCOL ErrCode(ErrCodeArea::Sfx, ErrCodeClass::NONE, 57)
|
||||
|
||||
|
||||
|
|
|
@ -101,22 +101,6 @@ namespace sfx2
|
|||
rbAlreadyShown = true;
|
||||
}
|
||||
|
||||
|
||||
void lcl_showMacrosDisabledError( const Reference< XInteractionHandler >& rxHandler, bool& rbAlreadyShown )
|
||||
{
|
||||
lcl_showGeneralSfxErrorOnce( rxHandler, ERRCODE_SFX_MACROS_SUPPORT_DISABLED, rbAlreadyShown );
|
||||
}
|
||||
|
||||
|
||||
void lcl_showDocumentMacrosDisabledError( const Reference< XInteractionHandler >& rxHandler, bool& rbAlreadyShown )
|
||||
{
|
||||
#ifdef MACOSX
|
||||
lcl_showGeneralSfxErrorOnce( rxHandler, ERRCODE_SFX_DOCUMENT_MACRO_DISABLED_MAC, rbAlreadyShown );
|
||||
#else
|
||||
lcl_showGeneralSfxErrorOnce( rxHandler, ERRCODE_SFX_DOCUMENT_MACRO_DISABLED, rbAlreadyShown );
|
||||
#endif
|
||||
}
|
||||
|
||||
void lcl_showMacrosDisabledUnsignedContentError( const Reference< XInteractionHandler >& rxHandler, bool& rbAlreadyShown )
|
||||
{
|
||||
lcl_showGeneralSfxErrorOnce( rxHandler, ERRCODE_SFX_DOCUMENT_MACRO_DISABLED_CONTENT_UNSIGNED, rbAlreadyShown );
|
||||
|
@ -156,7 +140,6 @@ namespace sfx2
|
|||
if ( SvtSecurityOptions::IsMacroDisabled() )
|
||||
{
|
||||
// no macro should be executed at all
|
||||
lcl_showMacrosDisabledError( rxInteraction, m_xData->m_bMacroDisabledMessageShown );
|
||||
return disallowMacroExecution();
|
||||
}
|
||||
|
||||
|
@ -226,7 +209,6 @@ namespace sfx2
|
|||
// at this point it is clear that the document is not in the secure location
|
||||
if ( nMacroExecutionMode == MacroExecMode::FROM_LIST_NO_WARN )
|
||||
{
|
||||
lcl_showDocumentMacrosDisabledError( rxInteraction, m_xData->m_bDocMacroDisabledMessageShown );
|
||||
return disallowMacroExecution();
|
||||
}
|
||||
|
||||
|
@ -242,8 +224,6 @@ namespace sfx2
|
|||
SignatureState nSignatureState = m_xData->m_rDocumentAccess.getScriptingSignatureState();
|
||||
if ( nSignatureState == SignatureState::BROKEN )
|
||||
{
|
||||
if (!bAllowUIToAddAuthor)
|
||||
lcl_showDocumentMacrosDisabledError(rxInteraction, m_xData->m_bDocMacroDisabledMessageShown);
|
||||
return disallowMacroExecution();
|
||||
}
|
||||
else if ( m_xData->m_rDocumentAccess.macroCallsSeenWhileLoading() &&
|
||||
|
@ -263,8 +243,6 @@ namespace sfx2
|
|||
|| nSignatureState == SignatureState::NOTVALIDATED )
|
||||
{
|
||||
// there is valid signature, but it is not from the trusted author
|
||||
if (!bAllowUIToAddAuthor)
|
||||
lcl_showDocumentMacrosDisabledError(rxInteraction, m_xData->m_bDocMacroDisabledMessageShown);
|
||||
return disallowMacroExecution();
|
||||
}
|
||||
}
|
||||
|
@ -274,9 +252,6 @@ namespace sfx2
|
|||
|| ( nMacroExecutionMode == MacroExecMode::FROM_LIST_AND_SIGNED_WARN )
|
||||
)
|
||||
{
|
||||
if ( nMacroExecutionMode == MacroExecMode::FROM_LIST_AND_SIGNED_WARN )
|
||||
lcl_showDocumentMacrosDisabledError( rxInteraction, m_xData->m_bDocMacroDisabledMessageShown );
|
||||
|
||||
return disallowMacroExecution();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -53,6 +53,7 @@
|
|||
#if !ENABLE_WASM_STRIP_PINGUSER
|
||||
#include <unotools/VersionConfig.hxx>
|
||||
#endif
|
||||
#include <unotools/securityoptions.hxx>
|
||||
#include <svtools/miscopt.hxx>
|
||||
#include <comphelper/diagnose_ex.hxx>
|
||||
#include <com/sun/star/container/XIndexAccess.hpp>
|
||||
|
@ -1285,19 +1286,10 @@ void SfxViewFrame::AppendReadOnlyInfobar()
|
|||
|
||||
void SfxViewFrame::AppendContainsMacrosInfobar()
|
||||
{
|
||||
auto pInfoBar = AppendInfoBar("macro", SfxResId(RID_SECURITY_WARNING_TITLE), SfxResId(STR_CONTAINS_MACROS), InfobarType::WARNING);
|
||||
if (!pInfoBar)
|
||||
return;
|
||||
|
||||
SfxObjectShell_Impl* pObjImpl = m_xObjSh->Get_Impl();
|
||||
|
||||
// what's the difference between pObjImpl->documentStorageHasMacros() and pObjImpl->aMacroMode.hasMacroLibrary() ?
|
||||
if (pObjImpl->aMacroMode.hasMacroLibrary())
|
||||
{
|
||||
weld::Button& rMacroButton = pInfoBar->addButton();
|
||||
rMacroButton.set_label(SfxResId(STR_MACROS));
|
||||
rMacroButton.connect_clicked(LINK(this, SfxViewFrame, MacroButtonHandler));
|
||||
}
|
||||
bool bHasDocumentMacros = pObjImpl->aMacroMode.hasMacroLibrary();
|
||||
|
||||
Reference<XModel> xModel = m_xObjSh->GetModel();
|
||||
uno::Reference<document::XEventsSupplier> xSupplier(xModel, uno::UNO_QUERY);
|
||||
|
@ -1332,11 +1324,31 @@ void SfxViewFrame::AppendContainsMacrosInfobar()
|
|||
}
|
||||
}
|
||||
|
||||
if (bHasBoundConfigEvents)
|
||||
if (bHasDocumentMacros || bHasBoundConfigEvents)
|
||||
{
|
||||
weld::Button& rEventButton = pInfoBar->addButton();
|
||||
rEventButton.set_label(SfxResId(STR_EVENTS));
|
||||
rEventButton.connect_clicked(LINK(this, SfxViewFrame, EventButtonHandler));
|
||||
auto aResId = SvtSecurityOptions::IsMacroDisabled() ? STR_MACROS_DISABLED : STR_CONTAINS_MACROS;
|
||||
auto pInfoBar = AppendInfoBar("macro", SfxResId(RID_SECURITY_WARNING_TITLE),
|
||||
SfxResId(aResId), InfobarType::WARNING);
|
||||
if (!pInfoBar)
|
||||
return;
|
||||
|
||||
// No access to macro dialog when macros are disabled globally.
|
||||
if (SvtSecurityOptions::IsMacroDisabled())
|
||||
return;
|
||||
|
||||
if (bHasDocumentMacros)
|
||||
{
|
||||
weld::Button& rMacroButton = pInfoBar->addButton();
|
||||
rMacroButton.set_label(SfxResId(STR_MACROS));
|
||||
rMacroButton.connect_clicked(LINK(this, SfxViewFrame, MacroButtonHandler));
|
||||
}
|
||||
|
||||
if (bHasBoundConfigEvents)
|
||||
{
|
||||
weld::Button& rEventButton = pInfoBar->addButton();
|
||||
rEventButton.set_label(SfxResId(STR_EVENTS));
|
||||
rEventButton.connect_clicked(LINK(this, SfxViewFrame, EventButtonHandler));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -118,10 +118,7 @@ const ErrMsgCode RID_ERRHDL[] =
|
|||
{ NC_("RID_ERRHDL", "This document contains attributes that cannot be saved in the selected format.\nPlease save the document in a %PRODUCTNAME %PRODUCTVERSION file format."), ERRCODE_IO_NOTSTORABLEINBINARYFORMAT },
|
||||
{ NC_("RID_ERRHDL", "The maximum number of documents that can be opened at the same time has been reached. You need to close one or more documents before you can open a new document."), ERRCODE_SFX_NOMOREDOCUMENTSALLOWED },
|
||||
{ NC_("RID_ERRHDL", "Could not create backup copy.") , ERRCODE_SFX_CANTCREATEBACKUP },
|
||||
{ NC_("RID_ERRHDL", "An attempt was made to execute a macro.\nFor security reasons, macro support is disabled."), ERRCODE_SFX_MACROS_SUPPORT_DISABLED },
|
||||
{ NC_("RID_ERRHDL", "Execution of macros is disabled. Macros are signed, but the document (containing document events) is not signed."), ERRCODE_SFX_DOCUMENT_MACRO_DISABLED_CONTENT_UNSIGNED },
|
||||
{ NC_("RID_ERRHDL", "This document contains macros.\n\nMacros may contain viruses. Execution of macros is disabled due to the current macro security setting in %PRODUCTNAME - Preferences - %PRODUCTNAME - Security.\n\nTherefore, some functionality may not be available.") , ERRCODE_SFX_DOCUMENT_MACRO_DISABLED_MAC },
|
||||
{ NC_("RID_ERRHDL", "This document contains macros.\n\nMacros may contain viruses. Execution of macros is disabled due to the current macro security setting in Tools - Options - %PRODUCTNAME - Security.\n\nTherefore, some functionality may not be available.") , ERRCODE_SFX_DOCUMENT_MACRO_DISABLED },
|
||||
{ NC_("RID_ERRHDL", "The encrypted document contains unexpected non-encrypted streams.\n\nThis could be the result of document manipulation.\n\nWe recommend that you do not trust the content of the current document.\nExecution of macros is disabled for this document.\n ") , ERRCODE_SFX_INCOMPLETE_ENCRYPTION },
|
||||
{ NC_("RID_ERRHDL", "Invalid data length.") , ERRCODE_IO_INVALIDLENGTH },
|
||||
{ NC_("RID_ERRHDL", "Function not possible: path contains current directory.") , ERRCODE_IO_CURRENTDIR },
|
||||
|
|
Loading…
Reference in a new issue