cui/source/factory/dlgfact.cxx | 6 ++- cui/source/factory/dlgfact.hxx | 3 - include/sfx2/objsh.hxx | 2 - include/sfx2/sfxdlg.hxx | 2 - include/sfx2/sfxsids.hrc | 1 include/sfx2/strings.hrc | 5 -- include/sfx2/viewfrm.hxx | 2 + include/unotools/securityoptions.hxx | 2 + sfx2/source/appl/appserv.cxx | 8 +++- sfx2/source/appl/appuno.cxx | 7 ++- sfx2/source/dialog/infobar.cxx | 8 ++++ sfx2/source/doc/objserv.cxx | 69 +++++++++++++++-------------------- sfx2/source/doc/objstor.cxx | 29 +++----------- sfx2/source/view/viewfrm.cxx | 40 ++++++++++++++++++++ sfx2/source/view/viewprn.cxx | 3 - sfx2/source/view/viewsh.cxx | 10 ++--- 16 files changed, 116 insertions(+), 81 deletions(-)
New commits: commit 1f440348eb0892fd2c9597806d87b5fe9d60d49a Author: Balazs Varga <balazs.varga.ext...@allotropia.de> AuthorDate: Tue Oct 10 21:55:42 2023 +0200 Commit: Balazs Varga <balazs.varga.ext...@allotropia.de> CommitDate: Mon Oct 16 23:18:56 2023 +0200 tdf#157482 UI: Turn Security Warnings popup windows into infobars In case of all the 4 security warnings we will have a new infobar warning dialog message with an infobar button which can open the security windows option settings and we can set which security issues should warn us, and also which security infos we want to remove. (etc after saving) TODO: If the directly the file dialog window pop up the Infobar message will only update after closing the file dialog window. That should be fixed later. Change-Id: Idf0f728fd40089d3691f8f044d3718a4e0d99cad Reviewed-on: https://gerrit.libreoffice.org/c/core/+/157797 Tested-by: Jenkins Reviewed-by: Balazs Varga <balazs.varga.ext...@allotropia.de> diff --git a/cui/source/factory/dlgfact.cxx b/cui/source/factory/dlgfact.cxx index 086fd01c5af3..63bfdbddbe39 100644 --- a/cui/source/factory/dlgfact.cxx +++ b/cui/source/factory/dlgfact.cxx @@ -854,16 +854,18 @@ VclPtr<VclAbstractDialog> AbstractDialogFactory_Impl::CreateVclDialog(weld::Wind } VclPtr<VclAbstractDialog> AbstractDialogFactory_Impl::CreateFrameDialog(weld::Window* pParent, const Reference< frame::XFrame >& rxFrame, - sal_uInt32 nResId, const OUString& rParameter ) + sal_uInt32 nResId, sal_uInt16 nPageId, const OUString& rParameter) { std::unique_ptr<OfaTreeOptionsDialog> xDlg; if (SID_OPTIONS_TREEDIALOG == nResId || SID_OPTIONS_DATABASES == nResId) { // only activate last page if we don't want to activate a special page - bool bActivateLastSelection = ( nResId != SID_OPTIONS_DATABASES && rParameter.isEmpty() ); + bool bActivateLastSelection = ( nResId != SID_OPTIONS_DATABASES && rParameter.isEmpty() && !nPageId); xDlg = std::make_unique<OfaTreeOptionsDialog>(pParent, rxFrame, bActivateLastSelection); if ( nResId == SID_OPTIONS_DATABASES ) xDlg->ActivatePage(SID_SB_DBREGISTEROPTIONS); + else if (nPageId) + xDlg->ActivatePage(nPageId); else if ( !rParameter.isEmpty() ) xDlg->ActivatePage( rParameter ); } diff --git a/cui/source/factory/dlgfact.hxx b/cui/source/factory/dlgfact.hxx index 38ca4beded0a..b57fe2995718 100644 --- a/cui/source/factory/dlgfact.hxx +++ b/cui/source/factory/dlgfact.hxx @@ -439,8 +439,7 @@ public: const SfxItemSet& rAttr, const css::uno::Reference< css::frame::XFrame >& rFrame) override; virtual VclPtr<VclAbstractDialog> CreateFrameDialog(weld::Window* pParent, const css::uno::Reference< css::frame::XFrame >& rxFrame, - sal_uInt32 nResId, - const OUString& rParameter ) override; + sal_uInt32 nResId, sal_uInt16 nPageId, const OUString& rParameter) override; virtual VclPtr<SfxAbstractTabDialog> CreateAutoCorrTabDialog(weld::Window* pParent, const SfxItemSet* pAttrSet) override; virtual VclPtr<SfxAbstractTabDialog> CreateCustomizeTabDialog(weld::Window* pParent, const SfxItemSet* pAttrSet, diff --git a/include/sfx2/objsh.hxx b/include/sfx2/objsh.hxx index 7e5cb97827a6..ea2596658a5d 100644 --- a/include/sfx2/objsh.hxx +++ b/include/sfx2/objsh.hxx @@ -440,7 +440,7 @@ public: virtual bool PrepareClose(bool bUI = true); virtual HiddenInformation GetHiddenInformationState( HiddenInformation nStates ); - sal_Int16 QueryHiddenInformation( HiddenWarningFact eFact, weld::Window* pParent ); + void QueryHiddenInformation( HiddenWarningFact eFact ); bool IsSecurityOptOpenReadOnly() const; void SetSecurityOptOpenReadOnly( bool bOpenReadOnly ); diff --git a/include/sfx2/sfxdlg.hxx b/include/sfx2/sfxdlg.hxx index 62e2f8013c3e..2513bbbb00f1 100644 --- a/include/sfx2/sfxdlg.hxx +++ b/include/sfx2/sfxdlg.hxx @@ -119,7 +119,7 @@ class SFX2_DLLPUBLIC SfxAbstractDialogFactory : virtual public VclAbstractDialog public: virtual ~SfxAbstractDialogFactory() override; // needed for export of vtable static SfxAbstractDialogFactory* Create(); - virtual VclPtr<VclAbstractDialog> CreateFrameDialog(weld::Window* pParent, const css::uno::Reference< css::frame::XFrame >& rFrame, sal_uInt32 nResId, const OUString& rParameter) = 0; + virtual VclPtr<VclAbstractDialog> CreateFrameDialog(weld::Window* pParent, const css::uno::Reference< css::frame::XFrame >& rFrame, sal_uInt32 nResId, sal_uInt16 nPageId, const OUString& rParameter) = 0; virtual VclPtr<SfxAbstractTabDialog> CreateAutoCorrTabDialog(weld::Window* pParent, const SfxItemSet* pAttrSet) = 0; virtual VclPtr<SfxAbstractTabDialog> CreateCustomizeTabDialog(weld::Window* pParent, const SfxItemSet* pAttrSet, diff --git a/include/sfx2/sfxsids.hrc b/include/sfx2/sfxsids.hrc index cc94d98ac664..9789cc8a0ac1 100644 --- a/include/sfx2/sfxsids.hrc +++ b/include/sfx2/sfxsids.hrc @@ -300,6 +300,7 @@ class SvxZoomItem; #define SID_WIDGET_TEST_DIALOG (SID_SFX_START + 1744) #define FN_CHANGE_THEME (SID_SFX_START + 1745) #define FN_PARAM_NEW_THEME TypedWhichId<SfxStringItem>(SID_SFX_START + 1746) +#define SID_OPTIONS_PAGEID TypedWhichId<SfxUInt16Item>(SID_SFX_START + 1747) // SID_SFX_free_END (SID_SFX_START + 3999) diff --git a/include/sfx2/strings.hrc b/include/sfx2/strings.hrc index 451012131537..300e1036169b 100644 --- a/include/sfx2/strings.hrc +++ b/include/sfx2/strings.hrc @@ -46,10 +46,6 @@ #define STR_HIDDENINFO_RECORDCHANGES NC_("STR_HIDDENINFO_RECORDCHANGES", "Recorded changes") #define STR_HIDDENINFO_NOTES NC_("STR_HIDDENINFO_NOTES", "Notes") #define STR_HIDDENINFO_DOCVERSIONS NC_("STR_HIDDENINFO_DOCVERSIONS", "Document versions") -#define STR_HIDDENINFO_CONTINUE_SAVING NC_("STR_HIDDENINFO_CONTINUE_SAVING", "Do you want to continue saving the document?") -#define STR_HIDDENINFO_CONTINUE_PRINTING NC_("STR_HIDDENINFO_CONTINUE_PRINTING", "Do you want to continue printing the document?") -#define STR_HIDDENINFO_CONTINUE_SIGNING NC_("STR_HIDDENINFO_CONTINUE_SIGNING", "Do you want to continue signing the document?") -#define STR_HIDDENINFO_CONTINUE_CREATEPDF NC_("STR_HIDDENINFO_CONTINUE_CREATEPDF", "Do you want to continue creating a PDF file?") #define STR_NEW_FILENAME_SAVE NC_("STR_NEW_FILENAME_SAVE", "If you do not want to overwrite the original document, you should save your work under a new filename.") // Used in the title of a shared document. #define STR_SHARED NC_("STR_SHARED", " (shared)") @@ -298,6 +294,7 @@ #define STR_MACROS_DISABLED NC_("STR_MACROS_DISABLED", "Macros are disabled due to the Macro Security settings.") #define STR_MACROS_DISABLED_CONTENT_UNSIGNED NC_("STR_MACROS_DISABLED_CONTENT_UNSIGNED", "Macros are signed, but the document (containing document events) is not signed.") #define STR_MACROS NC_("STR_MACROS", "Show Macros") +#define STR_SECURITY_OPTIONS NC_("STR_MACROS", "Show Security Options") #define STR_EVENTS NC_("STR_EVENTS", "Show Events") // Translators: default Impress template names diff --git a/include/sfx2/viewfrm.hxx b/include/sfx2/viewfrm.hxx index a5deb63a7ebf..7e038e9d6b96 100644 --- a/include/sfx2/viewfrm.hxx +++ b/include/sfx2/viewfrm.hxx @@ -65,6 +65,7 @@ class SFX2_DLLPUBLIC SfxViewFrame final : public SfxShell, public SfxListener DECL_DLLPRIVATE_LINK(DonationHandler, weld::Button&, void); DECL_DLLPRIVATE_LINK(WhatsNewHandler, weld::Button&, void); DECL_DLLPRIVATE_LINK(MacroButtonHandler, weld::Button&, void); + DECL_DLLPRIVATE_LINK(SecurityButtonHandler, weld::Button&, void); DECL_DLLPRIVATE_LINK(EventButtonHandler, weld::Button&, void); DECL_DLLPRIVATE_LINK(SwitchReadOnlyHandler, weld::Button&, void); DECL_DLLPRIVATE_LINK(SignDocumentHandler, weld::Button&, void); @@ -174,6 +175,7 @@ public: InfobarType eType); bool HasInfoBarWithID(std::u16string_view sId); void AppendReadOnlyInfobar(); + void HandleSecurityInfobar(const OUString& sSecondaryMessage); SAL_DLLPRIVATE void GetDocNumber_Impl(); SAL_DLLPRIVATE void SetViewShell_Impl( SfxViewShell *pVSh ); diff --git a/include/unotools/securityoptions.hxx b/include/unotools/securityoptions.hxx index 366317476fd2..dfc405cd89a1 100644 --- a/include/unotools/securityoptions.hxx +++ b/include/unotools/securityoptions.hxx @@ -143,6 +143,8 @@ namespace SvtSecurityOptions UNOTOOLS_DLLPUBLIC bool IsOptionSet ( EOption eOption ); UNOTOOLS_DLLPUBLIC void SetOption ( EOption eOption, bool bValue ); + UNOTOOLS_DLLPUBLIC bool IsInfobarSecurityWarningEnable(); + } // namespace SvtSecurityOptions // map personal info strings, e.g. authors to 1, 2, 3... for removing personal info diff --git a/sfx2/source/appl/appserv.cxx b/sfx2/source/appl/appserv.cxx index 493361fabc0f..5b0ef2ca491f 100644 --- a/sfx2/source/appl/appserv.cxx +++ b/sfx2/source/appl/appserv.cxx @@ -1440,10 +1440,16 @@ void SfxApplication::OfaExec_Impl( SfxRequest& rReq ) const SfxStringItem* pURLItem = rReq.GetArg<SfxStringItem>(SID_OPTIONS_PAGEURL); if ( pURLItem ) sPageURL = pURLItem->GetValue(); + + sal_uInt16 nPageID = 0; + const SfxUInt16Item* pIDItem = rReq.GetArg<SfxUInt16Item>(SID_OPTIONS_PAGEID); + if (pIDItem) + nPageID = pIDItem->GetValue(); + Reference <XFrame> xFrame(GetRequestFrame(rReq)); SfxAbstractDialogFactory* pFact = SfxAbstractDialogFactory::Create(); VclPtr<VclAbstractDialog> pDlg = - pFact->CreateFrameDialog(rReq.GetFrameWeld(), xFrame, rReq.GetSlot(), sPageURL ); + pFact->CreateFrameDialog(rReq.GetFrameWeld(), xFrame, rReq.GetSlot(), nPageID, sPageURL); short nRet = pDlg->Execute(); pDlg.disposeAndClear(); SfxViewFrame* pView = SfxViewFrame::GetFirst(); diff --git a/sfx2/source/appl/appuno.cxx b/sfx2/source/appl/appuno.cxx index e4443b7f46fc..7290ec77eb78 100644 --- a/sfx2/source/appl/appuno.cxx +++ b/sfx2/source/appl/appuno.cxx @@ -887,12 +887,15 @@ void TransformParameters( sal_uInt16 nSlotId, const uno::Sequence<beans::Propert if ( "OptionsTreeDialog" == pSlot->pUnoName ) { auto pProp = std::find_if(rArgs.begin(), rArgs.end(), - [](const PropertyValue& rProp) { return rProp.Name == "OptionsPageURL"; }); + [](const PropertyValue& rProp) { return rProp.Name == "OptionsPageURL" || rProp.Name == "OptionsPageID"; }); if (pProp != rArgs.end()) { OUString sURL; - if ( pProp->Value >>= sURL ) + sal_uInt16 nPageID; + if ( pProp->Name == "OptionsPageURL" && (pProp->Value >>= sURL) ) rSet.Put( SfxStringItem( SID_OPTIONS_PAGEURL, sURL ) ); + else if ( pProp->Name == "OptionsPageID" && (pProp->Value >>= nPageID) ) + rSet.Put( SfxUInt16Item( SID_OPTIONS_PAGEID, nPageID ) ); } } } diff --git a/sfx2/source/dialog/infobar.cxx b/sfx2/source/dialog/infobar.cxx index 2ab8704c1da4..ca848813f09e 100644 --- a/sfx2/source/dialog/infobar.cxx +++ b/sfx2/source/dialog/infobar.cxx @@ -15,6 +15,7 @@ #include <drawinglayer/processor2d/processor2dtools.hxx> #include <memory> #include <officecfg/Office/UI/Infobar.hxx> +#include <officecfg/Office/Common.hxx> #include <sfx2/bindings.hxx> #include <sfx2/dispatch.hxx> #include <sfx2/infobar.hxx> @@ -438,6 +439,13 @@ bool SfxInfoBarContainerWindow::isInfobarEnabled(std::u16string_view sId) return officecfg::Office::UI::Infobar::Enabled::HiddenTrackChanges::get(); if (sId == u"macro") return officecfg::Office::UI::Infobar::Enabled::MacrosDisabled::get(); + if (sId == u"securitywarn") + { + return officecfg::Office::Common::Security::Scripting::WarnSaveOrSendDoc::get() + || officecfg::Office::Common::Security::Scripting::WarnSignDoc::get() + || officecfg::Office::Common::Security::Scripting::WarnPrintDoc::get() + || officecfg::Office::Common::Security::Scripting::WarnCreatePDF::get(); + } return true; } diff --git a/sfx2/source/doc/objserv.cxx b/sfx2/source/doc/objserv.cxx index fb62f3768163..023780d4db50 100644 --- a/sfx2/source/doc/objserv.cxx +++ b/sfx2/source/doc/objserv.cxx @@ -535,49 +535,48 @@ void SfxObjectShell::ExecFile_Impl(SfxRequest &rReq) if( SID_SIGNATURE == nId || SID_MACRO_SIGNATURE == nId ) { - if ( QueryHiddenInformation( HiddenWarningFact::WhenSigning, nullptr ) == RET_YES ) + QueryHiddenInformation(HiddenWarningFact::WhenSigning); + + if (SID_SIGNATURE == nId) { - if (SID_SIGNATURE == nId) + uno::Reference<security::XCertificate> xCertificate = GetSignPDFCertificate(); + if (xCertificate.is()) { - uno::Reference<security::XCertificate> xCertificate = GetSignPDFCertificate(); - if (xCertificate.is()) - { - bHaveWeSigned |= SignDocumentContentUsingCertificate(xCertificate); + bHaveWeSigned |= SignDocumentContentUsingCertificate(xCertificate); - // Reload to show how the PDF actually looks like after signing. This also - // changes "finish signing" on the infobar back to "sign document" as a side - // effect. - SfxViewFrame* pFrame = GetFrame(); - if (pFrame) + // Reload to show how the PDF actually looks like after signing. This also + // changes "finish signing" on the infobar back to "sign document" as a side + // effect. + SfxViewFrame* pFrame = GetFrame(); + if (pFrame) + { + // Store current page before reload. + SfxAllItemSet aSet(SfxGetpApp()->GetPool()); + uno::Reference<drawing::XDrawView> xController( + GetBaseModel()->getCurrentController(), uno::UNO_QUERY); + uno::Reference<beans::XPropertySet> xPage(xController->getCurrentPage(), + uno::UNO_QUERY); + sal_Int32 nPage{}; + xPage->getPropertyValue("Number") >>= nPage; + if (nPage > 0) { - // Store current page before reload. - SfxAllItemSet aSet(SfxGetpApp()->GetPool()); - uno::Reference<drawing::XDrawView> xController( - GetBaseModel()->getCurrentController(), uno::UNO_QUERY); - uno::Reference<beans::XPropertySet> xPage(xController->getCurrentPage(), - uno::UNO_QUERY); - sal_Int32 nPage{}; - xPage->getPropertyValue("Number") >>= nPage; - if (nPage > 0) - { - // nPage is 1-based. - aSet.Put(SfxInt32Item(SID_PAGE_NUMBER, nPage - 1)); - } - SfxRequest aReq(SID_RELOAD, SfxCallMode::SLOT, aSet); - pFrame->ExecReload_Impl(aReq); + // nPage is 1-based. + aSet.Put(SfxInt32Item(SID_PAGE_NUMBER, nPage - 1)); } - } - else - { - bHaveWeSigned |= SignDocumentContent(pDialogParent); + SfxRequest aReq(SID_RELOAD, SfxCallMode::SLOT, aSet); + pFrame->ExecReload_Impl(aReq); } } else { - bHaveWeSigned |= SignScriptingContent(pDialogParent); + bHaveWeSigned |= SignDocumentContent(pDialogParent); } } + else + { + bHaveWeSigned |= SignScriptingContent(pDialogParent); + } if ( bHaveWeSigned && HasValidSignatures() ) { @@ -1057,13 +1056,7 @@ void SfxObjectShell::ExecFile_Impl(SfxRequest &rReq) if (bIsAsync && SfxViewShell::Current()) SfxViewShell::Current()->SetStoringHelper(xHelper); - if ( QueryHiddenInformation( bIsPDFExport ? HiddenWarningFact::WhenCreatingPDF : HiddenWarningFact::WhenSaving, nullptr ) != RET_YES ) - { - // the user has decided not to store the document - throw task::ErrorCodeIOException( - "SfxObjectShell::ExecFile_Impl: ERRCODE_IO_ABORT", - uno::Reference< uno::XInterface >(), sal_uInt32(ERRCODE_IO_ABORT)); - } + QueryHiddenInformation(bIsPDFExport ? HiddenWarningFact::WhenCreatingPDF : HiddenWarningFact::WhenSaving); const SfxBoolItem *pItem = nId != SID_DIRECTEXPORTDOCASPDF ? nullptr : dynamic_cast<const SfxBoolItem*>( GetSlotState(SID_MAIL_PREPAREEXPORT) ); diff --git a/sfx2/source/doc/objstor.cxx b/sfx2/source/doc/objstor.cxx index 8a1978681f99..b17b67a851a4 100644 --- a/sfx2/source/doc/objstor.cxx +++ b/sfx2/source/doc/objstor.cxx @@ -110,6 +110,7 @@ #include <sfx2/dispatch.hxx> #include <sfx2/sfxuno.hxx> #include <sfx2/event.hxx> +#include <sfx2/infobar.hxx> #include <fltoptint.hxx> #include <sfx2/viewfrm.hxx> #include "graphhelp.hxx" @@ -3081,35 +3082,29 @@ HiddenInformation SfxObjectShell::GetHiddenInformationState( HiddenInformation n return nState; } -sal_Int16 SfxObjectShell::QueryHiddenInformation(HiddenWarningFact eFact, weld::Window* pParent) +void SfxObjectShell::QueryHiddenInformation(HiddenWarningFact eFact) { - sal_Int16 nRet = RET_YES; - TranslateId pResId; SvtSecurityOptions::EOption eOption = SvtSecurityOptions::EOption(); switch ( eFact ) { case HiddenWarningFact::WhenSaving : { - pResId = STR_HIDDENINFO_CONTINUE_SAVING; eOption = SvtSecurityOptions::EOption::DocWarnSaveOrSend; break; } case HiddenWarningFact::WhenPrinting : { - pResId = STR_HIDDENINFO_CONTINUE_PRINTING; eOption = SvtSecurityOptions::EOption::DocWarnPrint; break; } case HiddenWarningFact::WhenSigning : { - pResId = STR_HIDDENINFO_CONTINUE_SIGNING; eOption = SvtSecurityOptions::EOption::DocWarnSigning; break; } case HiddenWarningFact::WhenCreatingPDF : { - pResId = STR_HIDDENINFO_CONTINUE_CREATEPDF; eOption = SvtSecurityOptions::EOption::DocWarnCreatePdf; break; } @@ -3119,40 +3114,30 @@ sal_Int16 SfxObjectShell::QueryHiddenInformation(HiddenWarningFact eFact, weld:: if ( SvtSecurityOptions::IsOptionSet( eOption ) ) { - OUString sMessage( SfxResId(STR_HIDDENINFO_CONTAINS) ); + OUString sMessage; HiddenInformation nWantedStates = HiddenInformation::RECORDEDCHANGES | HiddenInformation::NOTES; if ( eFact != HiddenWarningFact::WhenPrinting ) nWantedStates |= HiddenInformation::DOCUMENTVERSIONS; HiddenInformation nStates = GetHiddenInformationState( nWantedStates ); - bool bWarning = false; if ( nStates & HiddenInformation::RECORDEDCHANGES ) { sMessage += SfxResId(STR_HIDDENINFO_RECORDCHANGES) + "\n"; - bWarning = true; } if ( nStates & HiddenInformation::NOTES ) { sMessage += SfxResId(STR_HIDDENINFO_NOTES) + "\n"; - bWarning = true; } if ( nStates & HiddenInformation::DOCUMENTVERSIONS ) { sMessage += SfxResId(STR_HIDDENINFO_DOCVERSIONS) + "\n"; - bWarning = true; } - if ( bWarning ) - { - sMessage += "\n" + SfxResId(pResId); - std::unique_ptr<weld::MessageDialog> xWarn(Application::CreateMessageDialog(pParent, - VclMessageType::Warning, VclButtonsType::YesNo, sMessage)); - xWarn->set_default_response(RET_NO); - nRet = xWarn->run(); - } - } + SfxViewFrame* pFrame = SfxViewFrame::GetFirst(this); + if (pFrame) + pFrame->HandleSecurityInfobar(!sMessage.isEmpty() ? sMessage.trim().replaceAll("\n", ", ") : sMessage); - return nRet; + } } bool SfxObjectShell::IsSecurityOptOpenReadOnly() const diff --git a/sfx2/source/view/viewfrm.cxx b/sfx2/source/view/viewfrm.cxx index b15689e87b9d..d447c8396971 100644 --- a/sfx2/source/view/viewfrm.cxx +++ b/sfx2/source/view/viewfrm.cxx @@ -27,6 +27,7 @@ #include <sfx2/viewfrm.hxx> #include <sfx2/classificationhelper.hxx> #include <sfx2/notebookbar/SfxNotebookBar.hxx> +#include <sfx2/pageids.hxx> #include <com/sun/star/document/MacroExecMode.hpp> #include <com/sun/star/frame/Desktop.hpp> #include <com/sun/star/frame/DispatchRecorder.hpp> @@ -1306,6 +1307,38 @@ void SfxViewFrame::AppendReadOnlyInfobar() } } +void SfxViewFrame::HandleSecurityInfobar(const OUString& sSecondaryMessage) +{ + if (!HasInfoBarWithID(u"securitywarn")) + { + // new info bar + if (!sSecondaryMessage.isEmpty()) + { + auto pInfoBar = AppendInfoBar("securitywarn", SfxResId(STR_HIDDENINFO_CONTAINS).replaceAll("\n\n", " "), + sSecondaryMessage, InfobarType::WARNING); + if (!pInfoBar) + return; + + weld::Button& rGetInvolvedButton = pInfoBar->addButton(); + rGetInvolvedButton.set_label(SfxResId(STR_SECURITY_OPTIONS)); + rGetInvolvedButton.connect_clicked(LINK(this, SfxViewFrame, SecurityButtonHandler)); + } + } + else + { + // info bar exists already + if (sSecondaryMessage.isEmpty()) + { + RemoveInfoBar(u"securitywarn"); + } + else + { + UpdateInfoBar(u"securitywarn", SfxResId(STR_HIDDENINFO_CONTAINS).replaceAll("\n\n", " "), + sSecondaryMessage, InfobarType::WARNING); + } + } +} + void SfxViewFrame::AppendContainsMacrosInfobar() { SfxObjectShell_Impl* pObjImpl = m_xObjSh->Get_Impl(); @@ -1808,6 +1841,13 @@ IMPL_LINK_NOARG(SfxViewFrame, MacroButtonHandler, weld::Button&, void) { &aTabItem, &aCurrentDocItem }, { &aDocFrame }); } +IMPL_LINK_NOARG(SfxViewFrame, SecurityButtonHandler, weld::Button&, void) +{ + SfxUInt16Item aPageID(SID_OPTIONS_PAGEID, sal_uInt16(RID_SVXPAGE_INET_SECURITY)); + GetDispatcher()->ExecuteList(SID_OPTIONS_TREEDIALOG, SfxCallMode::SYNCHRON, { &aPageID }); + RemoveInfoBar(u"securitywarn"); +} + IMPL_LINK_NOARG(SfxViewFrame, EventButtonHandler, weld::Button&, void) { SfxUnoFrameItem aDocFrame(SID_FILLFRAME, GetFrame().GetFrameInterface()); diff --git a/sfx2/source/view/viewprn.cxx b/sfx2/source/view/viewprn.cxx index 5ada786ba108..19fddbffdfa0 100644 --- a/sfx2/source/view/viewprn.cxx +++ b/sfx2/source/view/viewprn.cxx @@ -677,8 +677,7 @@ void SfxViewShell::ExecPrint_Impl( SfxRequest &rReq ) return; } - if ( !bSilent && pDoc->QueryHiddenInformation( HiddenWarningFact::WhenPrinting, nullptr ) != RET_YES ) - return; + pDoc->QueryHiddenInformation(HiddenWarningFact::WhenPrinting); // should we print only the selection or the whole document const SfxBoolItem* pSelectItem = rReq.GetArg<SfxBoolItem>(SID_SELECTION); diff --git a/sfx2/source/view/viewsh.cxx b/sfx2/source/view/viewsh.cxx index 6b36430d7d4c..5e437b45269a 100644 --- a/sfx2/source/view/viewsh.cxx +++ b/sfx2/source/view/viewsh.cxx @@ -1598,11 +1598,9 @@ void SfxViewShell::ExecMisc_Impl( SfxRequest &rReq ) case SID_MAIL_SENDDOCASFORMAT: { SfxObjectShell* pDoc = GetObjectShell(); - if ( pDoc && pDoc->QueryHiddenInformation( - HiddenWarningFact::WhenSaving, GetViewFrame().GetFrameWeld() ) != RET_YES ) + if (!pDoc) break; - - + pDoc->QueryHiddenInformation(HiddenWarningFact::WhenSaving); SfxMailModel aModel; OUString aDocType; @@ -1658,9 +1656,9 @@ void SfxViewShell::ExecMisc_Impl( SfxRequest &rReq ) { SfxBluetoothModel aModel; SfxObjectShell* pDoc = GetObjectShell(); - if ( pDoc && pDoc->QueryHiddenInformation( - HiddenWarningFact::WhenSaving, GetViewFrame().GetFrameWeld() ) != RET_YES ) + if (!pDoc) break; + pDoc->QueryHiddenInformation(HiddenWarningFact::WhenSaving); uno::Reference < frame::XFrame > xFrame( rFrame.GetFrame().GetFrameInterface() ); SfxMailModel::SendMailResult eResult = aModel.SaveAndSend( xFrame ); if( eResult == SfxMailModel::SEND_MAIL_ERROR )