cui/source/factory/dlgfact.cxx         |   11 +++++++++
 cui/source/factory/dlgfact.hxx         |    8 ++++++
 cui/source/inc/securityoptions.hxx     |    1 
 cui/source/options/optinet2.cxx        |   39 ++-------------------------------
 cui/source/options/securityoptions.cxx |   31 +++++++++++++++++++++++++-
 include/sfx2/sfxdlg.hxx                |    2 +
 include/sfx2/sfxsids.hrc               |    1 
 include/svx/svxdlg.hxx                 |    2 +
 include/vcl/abstdlg.hxx                |    8 ++++++
 sfx2/sdi/appslots.sdi                  |    4 +++
 sfx2/sdi/sfx.sdi                       |   17 ++++++++++++++
 sfx2/source/appl/appserv.cxx           |   14 +++++++++++
 sfx2/source/view/viewfrm.cxx           |    3 --
 solenv/clang-format/excludelist        |    2 -
 14 files changed, 103 insertions(+), 40 deletions(-)

New commits:
commit 2c16ea16b305dc546164e28cf6b212ebccc44ec4
Author:     Balazs Varga <balazs.varga.ext...@allotropia.de>
AuthorDate: Mon Jan 22 13:19:26 2024 +0100
Commit:     Balazs Varga <balazs.varga.ext...@allotropia.de>
CommitDate: Wed Jan 24 09:06:39 2024 +0100

    tdf#159128 UI: Open Security settings option directly
    
    Open Security Option Setting page directly from Security pop up
    warning infobar.
    
    Follow up of 1f440348eb0892fd2c9597806d87b5fe9d60d49a
    (tdf#157482 UI: Turn Security Warnings popup windows into infobars)
    
    Change-Id: Iac116677801bdb13a9680bcfdf532ec3d874ce0e
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/162393
    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 b5e852cbb292..6979167de569 100644
--- a/cui/source/factory/dlgfact.cxx
+++ b/cui/source/factory/dlgfact.cxx
@@ -116,6 +116,7 @@ IMPL_ABSTDLG_CLASS(AbstractScreenshotAnnotationDlg)
 IMPL_ABSTDLG_CLASS_ASYNC(AbstractSignatureLineDialog, SignatureLineDialog)
 IMPL_ABSTDLG_CLASS_ASYNC(AbstractSignSignatureLineDialog, 
SignSignatureLineDialog)
 IMPL_ABSTDLG_CLASS_ASYNC(AbstractSvxCharacterMapDialog, SvxCharacterMap)
+IMPL_ABSTDLG_CLASS(AbstractSecurityOptionsDialog)
 IMPL_ABSTDLG_CLASS(AbstractSvxHpLinkDlg)
 IMPL_ABSTDLG_CLASS(AbstractSvxJSearchOptionsDialog)
 IMPL_ABSTDLG_CLASS(AbstractSvxMultiPathDialog)
@@ -874,6 +875,16 @@ VclPtr<VclAbstractDialog> 
AbstractDialogFactory_Impl::CreateFrameDialog(weld::Wi
     return nullptr;
 }
 
+VclPtr<AbstractSecurityOptionsDialog> 
AbstractDialogFactory_Impl::CreateSvxSecurityOptionsDialog(weld::Window* 
pParent)
+{
+    return 
VclPtr<AbstractSecurityOptionsDialog_Impl>::Create(std::make_unique<svx::SecurityOptionsDialog>(pParent));
+}
+
+bool AbstractSecurityOptionsDialog_Impl::SetSecurityOptions()
+{
+    return m_xDlg->SetSecurityOptions();
+}
+
 // TabDialog outside the drawing layer
 VclPtr<SfxAbstractTabDialog> 
AbstractDialogFactory_Impl::CreateAutoCorrTabDialog(weld::Window* pParent, 
const SfxItemSet* pAttrSet)
 {
diff --git a/cui/source/factory/dlgfact.hxx b/cui/source/factory/dlgfact.hxx
index 0125c975ae79..3c8601140164 100644
--- a/cui/source/factory/dlgfact.hxx
+++ b/cui/source/factory/dlgfact.hxx
@@ -49,6 +49,7 @@
 #include <postdlg.hxx>
 #include <QrCodeGenDialog.hxx>
 #include <screenshotannotationdlg.hxx>
+#include <securityoptions.hxx>
 #include <showcols.hxx>
 #include <SignatureLineDialog.hxx>
 #include <SignSignatureLineDialog.hxx>
@@ -402,6 +403,11 @@ 
DECL_ABSTDLG_CLASS_SHARED_ASYNC(AbstractSvxCharacterMapDialog,SfxAbstractDialog,
 DECL_ABSTDLG_CLASS(AbstractScreenshotAnnotationDlg,ScreenshotAnnotationDlg)
 };
 
+// AbstractSecurityOptionsDialog_Impl
+DECL_ABSTDLG_CLASS(AbstractSecurityOptionsDialog, svx::SecurityOptionsDialog)
+    virtual bool SetSecurityOptions() override;
+};
+
 // AbstractSignatureLineDialog_Impl
 DECL_ABSTDLG_CLASS_ASYNC(AbstractSignatureLineDialog,SignatureLineDialog)
     virtual void Apply() override { m_xDlg->Apply(); }
@@ -594,6 +600,8 @@ public:
 
     virtual VclPtr<AbstractScreenshotAnnotationDlg> 
CreateScreenshotAnnotationDlg(weld::Dialog& rParentDialog) override;
 
+    virtual VclPtr<AbstractSecurityOptionsDialog> 
CreateSvxSecurityOptionsDialog(weld::Window* pParent) override;
+
     virtual VclPtr<AbstractSignatureLineDialog>
     CreateSignatureLineDialog(weld::Window* pParent,
                               const css::uno::Reference<css::frame::XModel> 
xModel, bool bEditExisting) override;
diff --git a/cui/source/options/securityoptions.hxx 
b/cui/source/inc/securityoptions.hxx
similarity index 99%
rename from cui/source/options/securityoptions.hxx
rename to cui/source/inc/securityoptions.hxx
index 10534d4426a7..981c9ac29bf8 100644
--- a/cui/source/options/securityoptions.hxx
+++ b/cui/source/inc/securityoptions.hxx
@@ -75,6 +75,7 @@ namespace svx
 
         DECL_LINK(ShowPersonalInfosToggle, weld::Toggleable&, void);
 
+        bool SetSecurityOptions();
         void changeKeepSecurityInfosEnabled();
     };
 }
diff --git a/cui/source/options/optinet2.cxx b/cui/source/options/optinet2.cxx
index de34b031e8ce..eaf0e8616bfd 100644
--- a/cui/source/options/optinet2.cxx
+++ b/cui/source/options/optinet2.cxx
@@ -27,7 +27,6 @@
 #include <vcl/weld.hxx>
 #include <sfx2/filedlghelper.hxx>
 #include <vcl/svapp.hxx>
-#include <unotools/securityoptions.hxx>
 #include <com/sun/star/uno/Sequence.hxx>
 #include <comphelper/diagnose_ex.hxx>
 
@@ -52,7 +51,7 @@
 #include <com/sun/star/ui/dialogs/TemplateDescription.hpp>
 #include <com/sun/star/task/PasswordContainer.hpp>
 #include <com/sun/star/task/XPasswordContainer2.hpp>
-#include "securityoptions.hxx"
+#include <securityoptions.hxx>
 #include "webconninfo.hxx"
 #include "certpath.hxx"
 #include "tsaurls.hxx"
@@ -834,25 +833,6 @@ DeactivateRC SvxSecurityTabPage::DeactivatePage( 
SfxItemSet* _pSet )
     return DeactivateRC::LeavePage;
 }
 
-namespace
-{
-    bool CheckAndSave( SvtSecurityOptions::EOption _eOpt, const bool 
_bIsChecked, bool& _rModified )
-    {
-        bool bModified = false;
-        if ( !SvtSecurityOptions::IsReadOnly( _eOpt ) )
-        {
-            bModified = SvtSecurityOptions::IsOptionSet( _eOpt ) != 
_bIsChecked;
-            if ( bModified )
-            {
-                SvtSecurityOptions::SetOption( _eOpt, _bIsChecked );
-                _rModified = true;
-            }
-        }
-
-        return bModified;
-    }
-}
-
 OUString SvxSecurityTabPage::GetAllStrings()
 {
     OUString sAllStrings;
@@ -892,21 +872,8 @@ bool SvxSecurityTabPage::FillItemSet( SfxItemSet* )
 {
     bool bModified = false;
 
-    if (m_xSecOptDlg)
-    {
-        CheckAndSave( SvtSecurityOptions::EOption::DocWarnSaveOrSend, 
m_xSecOptDlg->IsSaveOrSendDocsChecked(), bModified );
-        CheckAndSave( SvtSecurityOptions::EOption::DocWarnSigning, 
m_xSecOptDlg->IsSignDocsChecked(), bModified );
-        CheckAndSave( SvtSecurityOptions::EOption::DocWarnPrint, 
m_xSecOptDlg->IsPrintDocsChecked(), bModified );
-        CheckAndSave( SvtSecurityOptions::EOption::DocWarnCreatePdf, 
m_xSecOptDlg->IsCreatePdfChecked(), bModified );
-        CheckAndSave( SvtSecurityOptions::EOption::DocWarnRemovePersonalInfo, 
m_xSecOptDlg->IsRemovePersInfoChecked(), bModified );
-        CheckAndSave( SvtSecurityOptions::EOption::DocWarnKeepRedlineInfo, 
m_xSecOptDlg->IsRemoveRedlineInfoChecked(), bModified );
-        CheckAndSave( SvtSecurityOptions::EOption::DocWarnKeepDocUserInfo, 
m_xSecOptDlg->IsRemoveDocUserInfoChecked(), bModified );
-        CheckAndSave( 
SvtSecurityOptions::EOption::DocWarnKeepNoteAuthorDateInfo, 
m_xSecOptDlg->IsRemoveNoteAuthorInfoChecked(), bModified );
-        CheckAndSave( SvtSecurityOptions::EOption::DocWarnKeepDocVersionInfo, 
m_xSecOptDlg->IsRemoveDocVersionInfoChecked(), bModified );
-        CheckAndSave( SvtSecurityOptions::EOption::DocWarnRecommendPassword, 
m_xSecOptDlg->IsRecommPasswdChecked(), bModified );
-        CheckAndSave( SvtSecurityOptions::EOption::CtrlClickHyperlink, 
m_xSecOptDlg->IsCtrlHyperlinkChecked(), bModified );
-        CheckAndSave( SvtSecurityOptions::EOption::BlockUntrustedRefererLinks, 
m_xSecOptDlg->IsBlockUntrustedRefererLinksChecked(), bModified );
-        CheckAndSave( SvtSecurityOptions::EOption::DisableActiveContent, 
m_xSecOptDlg->IsDisableActiveContentChecked(), bModified );
+    if (m_xSecOptDlg) {
+        bModified = m_xSecOptDlg->SetSecurityOptions();
     }
 
     std::shared_ptr<comphelper::ConfigurationChanges> pBatch(
diff --git a/cui/source/options/securityoptions.cxx 
b/cui/source/options/securityoptions.cxx
index 8f970331d9a3..f42b0c35dd4b 100644
--- a/cui/source/options/securityoptions.cxx
+++ b/cui/source/options/securityoptions.cxx
@@ -17,8 +17,8 @@
  *   the License at http://www.apache.org/licenses/LICENSE-2.0 .
  */
 
+#include <securityoptions.hxx>
 #include <unotools/securityoptions.hxx>
-#include "securityoptions.hxx"
 
 namespace
 {
@@ -31,6 +31,15 @@ namespace
         rCheckBox.set_active(SvtSecurityOptions::IsOptionSet(eOption));
         return bEnable;
     }
+
+    void CheckAndSave(SvtSecurityOptions::EOption _eOpt, const bool 
_bIsChecked, bool& _rModified)
+    {
+        if (!SvtSecurityOptions::IsReadOnly(_eOpt) && 
SvtSecurityOptions::IsOptionSet(_eOpt) != _bIsChecked)
+        {
+            SvtSecurityOptions::SetOption(_eOpt, _bIsChecked);
+            _rModified = true;
+        }
+    }
 }
 
 namespace svx
@@ -107,6 +116,26 @@ void SecurityOptionsDialog::init()
         changeKeepSecurityInfosEnabled();
 }
 
+bool SecurityOptionsDialog::SetSecurityOptions()
+{
+    bool bModified = false;
+    CheckAndSave(SvtSecurityOptions::EOption::DocWarnSaveOrSend, 
IsSaveOrSendDocsChecked(), bModified);
+    CheckAndSave(SvtSecurityOptions::EOption::DocWarnSigning, 
IsSignDocsChecked(), bModified);
+    CheckAndSave(SvtSecurityOptions::EOption::DocWarnPrint, 
IsPrintDocsChecked(), bModified);
+    CheckAndSave(SvtSecurityOptions::EOption::DocWarnCreatePdf, 
IsCreatePdfChecked(), bModified);
+    CheckAndSave(SvtSecurityOptions::EOption::DocWarnRemovePersonalInfo, 
IsRemovePersInfoChecked(), bModified);
+    CheckAndSave(SvtSecurityOptions::EOption::DocWarnKeepRedlineInfo, 
IsRemoveRedlineInfoChecked(), bModified);
+    CheckAndSave(SvtSecurityOptions::EOption::DocWarnKeepDocUserInfo, 
IsRemoveDocUserInfoChecked(), bModified);
+    CheckAndSave(SvtSecurityOptions::EOption::DocWarnKeepNoteAuthorDateInfo, 
IsRemoveNoteAuthorInfoChecked(), bModified);
+    CheckAndSave(SvtSecurityOptions::EOption::DocWarnKeepDocVersionInfo, 
IsRemoveDocVersionInfoChecked(), bModified);
+    CheckAndSave(SvtSecurityOptions::EOption::DocWarnRecommendPassword, 
IsRecommPasswdChecked(), bModified);
+    CheckAndSave(SvtSecurityOptions::EOption::CtrlClickHyperlink, 
IsCtrlHyperlinkChecked(), bModified);
+    CheckAndSave(SvtSecurityOptions::EOption::BlockUntrustedRefererLinks, 
IsBlockUntrustedRefererLinksChecked(), bModified);
+    CheckAndSave(SvtSecurityOptions::EOption::DisableActiveContent, 
IsDisableActiveContentChecked(), bModified);
+
+    return bModified;
+}
+
 void SecurityOptionsDialog::changeKeepSecurityInfosEnabled()
 {
     bool bEnable = m_xRemovePersInfoCB->get_active();
diff --git a/include/sfx2/sfxdlg.hxx b/include/sfx2/sfxdlg.hxx
index 2513bbbb00f1..31bd0c3108ad 100644
--- a/include/sfx2/sfxdlg.hxx
+++ b/include/sfx2/sfxdlg.hxx
@@ -135,6 +135,8 @@ public:
     virtual VclPtr<SfxAbstractLinksDialog>    CreateLinksDialog(weld::Window* 
pParent, sfx2::LinkManager* pMgr, bool bHTML=false, sfx2::SvBaseLink* 
p=nullptr) = 0;
     virtual VclPtr<VclAbstractDialog>         
CreateSvxScriptOrgDialog(weld::Window* pParent,  const OUString& rLanguage) = 0;
 
+    virtual VclPtr<AbstractSecurityOptionsDialog> 
CreateSvxSecurityOptionsDialog(weld::Window* pParent) = 0;
+
     virtual VclPtr<AbstractScriptSelectorDialog> 
CreateScriptSelectorDialog(weld::Window* pParent,
             const css::uno::Reference< css::frame::XFrame >& rxFrame) = 0;
 
diff --git a/include/sfx2/sfxsids.hrc b/include/sfx2/sfxsids.hrc
index 4748ff139e75..4c8a080c1b2f 100644
--- a/include/sfx2/sfxsids.hrc
+++ b/include/sfx2/sfxsids.hrc
@@ -671,6 +671,7 @@ class SvxZoomItem;
 #define SID_BASICIDE_STACK                  TypedWhichId<SfxBoolItem>( 
SID_BASICIDE_START + 56 )
 #define SID_BASICIDE_COLOR_SCHEME_DLG       ( SID_BASICIDE_START + 57 )
 #define SID_OPTIONS_TREEDIALOG              ( SID_BASICIDE_START + 862)
+#define SID_OPTIONS_SECURITY                ( SID_BASICIDE_START + 863)
 
 // SlotIds for Apps --------------------------------------------------------
 #define FN_PARAM                            (SID_SW_START + 1100)
diff --git a/include/svx/svxdlg.hxx b/include/svx/svxdlg.hxx
index 1159c1ee02d9..f775c1099917 100644
--- a/include/svx/svxdlg.hxx
+++ b/include/svx/svxdlg.hxx
@@ -425,6 +425,8 @@ public:
 
     virtual DialogGetRanges                    GetDialogGetRangesFunc() = 0;
 
+    virtual VclPtr<AbstractSecurityOptionsDialog> 
CreateSvxSecurityOptionsDialog(weld::Window* pParent) override = 0;
+
     virtual VclPtr<AbstractScriptSelectorDialog> 
CreateScriptSelectorDialog(weld::Window* pParent,
             const css::uno::Reference< css::frame::XFrame >& rxFrame) override 
= 0;
 
diff --git a/include/vcl/abstdlg.hxx b/include/vcl/abstdlg.hxx
index 5eaf46061e69..50c12b6cd7c9 100644
--- a/include/vcl/abstdlg.hxx
+++ b/include/vcl/abstdlg.hxx
@@ -109,6 +109,14 @@ public:
     virtual void        AllowEmpty() = 0;
 };
 
+class VCL_DLLPUBLIC AbstractSecurityOptionsDialog : public VclAbstractDialog
+{
+protected:
+    virtual             ~AbstractSecurityOptionsDialog() override = default;
+public:
+    virtual bool        SetSecurityOptions() = 0;
+};
+
 class VCL_DLLPUBLIC AbstractScreenshotAnnotationDlg : public VclAbstractDialog
 {
 protected:
diff --git a/sfx2/sdi/appslots.sdi b/sfx2/sdi/appslots.sdi
index 429c48332f7f..b8d75480fef5 100644
--- a/sfx2/sdi/appslots.sdi
+++ b/sfx2/sdi/appslots.sdi
@@ -337,6 +337,10 @@ shell SfxApplication
     [
         ExecMethod = OfaExec_Impl ;
     ]
+    SID_OPTIONS_SECURITY
+    [
+        ExecMethod = OfaExec_Impl ;
+    ]
 }
 
 shell SfxModule
diff --git a/sfx2/sdi/sfx.sdi b/sfx2/sdi/sfx.sdi
index 5660596a3b3d..9c2b72d5f443 100644
--- a/sfx2/sdi/sfx.sdi
+++ b/sfx2/sdi/sfx.sdi
@@ -5497,6 +5497,23 @@ SfxVoidItem MoreDictionaries SID_MORE_DICTIONARIES
         GroupId = SfxGroupId::Options;
 ]
 
+SfxVoidItem OptionsSecurityDialog SID_OPTIONS_SECURITY
+()
+[
+    AutoUpdate = FALSE,
+    FastCall = TRUE,
+    ReadOnlyDoc = TRUE,
+    Toggle = FALSE,
+    Container = TRUE,
+    RecordAbsolute = FALSE,
+    RecordPerSet;
+
+    AccelConfig = TRUE,
+    MenuConfig = TRUE,
+    ToolBoxConfig = TRUE,
+    GroupId = SfxGroupId::Options;
+]
+
 SfxVoidItem ActivateStyleApply SID_ACTIVATE_STYLE_APPLY
 ()
 [
diff --git a/sfx2/source/appl/appserv.cxx b/sfx2/source/appl/appserv.cxx
index cccc2abc1a57..58963ceed2de 100644
--- a/sfx2/source/appl/appserv.cxx
+++ b/sfx2/source/appl/appserv.cxx
@@ -1483,6 +1483,20 @@ void SfxApplication::OfaExec_Impl( SfxRequest& rReq )
             break;
         }
 
+        case SID_OPTIONS_SECURITY:
+        {
+            SfxAbstractDialogFactory* pFact = 
SfxAbstractDialogFactory::Create();
+            VclPtr<AbstractSecurityOptionsDialog> pDlg =
+                pFact->CreateSvxSecurityOptionsDialog(rReq.GetFrameWeld());
+
+            if (pDlg->Execute() == RET_OK) {
+                pDlg->SetSecurityOptions();
+            }
+
+            pDlg.disposeAndClear();
+            break;
+        }
+
         case SID_MORE_DICTIONARIES:
         {
             uno::Sequence<beans::PropertyValue> aArgs{ 
comphelper::makePropertyValue(
diff --git a/sfx2/source/view/viewfrm.cxx b/sfx2/source/view/viewfrm.cxx
index 4530bdef2091..f50252984794 100644
--- a/sfx2/source/view/viewfrm.cxx
+++ b/sfx2/source/view/viewfrm.cxx
@@ -1843,8 +1843,7 @@ IMPL_LINK_NOARG(SfxViewFrame, MacroButtonHandler, 
weld::Button&, void)
 
 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 });
+    GetDispatcher()->Execute(SID_OPTIONS_SECURITY, SfxCallMode::SYNCHRON);
     RemoveInfoBar(u"securitywarn");
 }
 
diff --git a/solenv/clang-format/excludelist b/solenv/clang-format/excludelist
index 0bf5a0e48e30..46e7ceec5890 100644
--- a/solenv/clang-format/excludelist
+++ b/solenv/clang-format/excludelist
@@ -2424,6 +2424,7 @@ cui/source/inc/pastedlg.hxx
 cui/source/inc/postdlg.hxx
 cui/source/inc/scriptdlg.hxx
 cui/source/inc/sdrcelldlg.hxx
+cui/source/inc/securityoptions.hxx
 cui/source/inc/splitcelldlg.hxx
 cui/source/inc/srchxtra.hxx
 cui/source/inc/swpossizetabpage.hxx
@@ -2489,7 +2490,6 @@ cui/source/options/optupdt.hxx
 cui/source/options/sdbcdriverenum.cxx
 cui/source/options/sdbcdriverenum.hxx
 cui/source/options/securityoptions.cxx
-cui/source/options/securityoptions.hxx
 cui/source/options/treeopt.cxx
 cui/source/options/webconninfo.cxx
 cui/source/options/webconninfo.hxx

Reply via email to