cui/source/options/optinet2.cxx    |   37 ++++
 cui/source/options/optinet2.hxx    |    8 
 cui/uiconfig/ui/optsecuritypage.ui |  299 ++++++++++++++++++++++++++-----------
 3 files changed, 262 insertions(+), 82 deletions(-)

New commits:
commit 6a8cae6995d22666c0a6fd2b42c171ef27ae30ac
Author:     Balazs Varga <[email protected]>
AuthorDate: Tue Oct 24 18:30:31 2023 +0200
Commit:     Balazs Varga <[email protected]>
CommitDate: Thu Oct 26 09:21:27 2023 +0200

    tdf#157840 - UI: Part 6 - Unify lockdown behavior of Options dialog
    
    for Security Page.
    
    Change-Id: I9b5282326ea8edeb00d45d9d034a18041f89a281
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/158393
    Tested-by: Jenkins
    Reviewed-by: Balazs Varga <[email protected]>

diff --git a/cui/source/options/optinet2.cxx b/cui/source/options/optinet2.cxx
index 29fe7d758d8d..90801955edaa 100644
--- a/cui/source/options/optinet2.cxx
+++ b/cui/source/options/optinet2.cxx
@@ -497,19 +497,27 @@ SvxSecurityTabPage::SvxSecurityTabPage(weld::Container* 
pPage, weld::DialogContr
     : SfxTabPage(pPage, pController, "cui/ui/optsecuritypage.ui", 
"OptSecurityPage", &rSet)
     , m_xSecurityOptionsPB(m_xBuilder->weld_button("options"))
     , m_xSavePasswordsCB(m_xBuilder->weld_check_button("savepassword"))
+    , m_xSavePasswordsImg(m_xBuilder->weld_widget("locksavepassword"))
     , m_xShowConnectionsPB(m_xBuilder->weld_button("connections"))
     , m_xMasterPasswordCB(m_xBuilder->weld_check_button("usemasterpassword"))
+    , m_xMasterPasswordImg(m_xBuilder->weld_widget("lockusemasterpassword"))
     , m_xMasterPasswordFT(m_xBuilder->weld_label("masterpasswordtext"))
     , m_xMasterPasswordPB(m_xBuilder->weld_button("masterpassword"))
     , m_xMacroSecFrame(m_xBuilder->weld_container("macrosecurity"))
     , m_xMacroSecPB(m_xBuilder->weld_button("macro"))
     , m_xCertFrame(m_xBuilder->weld_container("certificatepath"))
     , m_xCertPathPB(m_xBuilder->weld_button("cert"))
+    , m_xCertPathImg(m_xBuilder->weld_widget("lockcertipath"))
+    , m_xCertPathLabel(m_xBuilder->weld_label("label7"))
     , m_xTSAURLsFrame(m_xBuilder->weld_container("tsaurls"))
     , m_xTSAURLsPB(m_xBuilder->weld_button("tsas"))
+    , m_xTSAURLsImg(m_xBuilder->weld_widget("locktsas"))
+    , m_xTSAURLsLabel(m_xBuilder->weld_label("label9"))
     , m_xNoPasswordSaveFT(m_xBuilder->weld_label("nopasswordsave"))
     , m_xCertMgrPathLB(m_xBuilder->weld_button("browse"))
     , m_xParameterEdit(m_xBuilder->weld_entry("parameterfield"))
+    , m_xCertMgrPathImg(m_xBuilder->weld_widget("lockcertimanager"))
+    , m_xCertMgrPathLabel(m_xBuilder->weld_label("label11"))
 {
     //fdo#65595, we need height-for-width support here, but for now we can
     //bodge it
@@ -798,6 +806,16 @@ void SvxSecurityTabPage::InitControls()
                 m_xMasterPasswordFT->set_sensitive(true);
             }
         }
+
+        if (officecfg::Office::Common::Passwords::UseStorage::isReadOnly())
+        {
+            m_xSavePasswordsCB->set_sensitive(false);
+            m_xShowConnectionsPB->set_sensitive(false);
+            m_xSavePasswordsImg->set_visible(true);
+            m_xMasterPasswordCB->set_sensitive(false);
+            m_xMasterPasswordPB->set_sensitive(false);
+            m_xMasterPasswordImg->set_visible(true);
+        }
     }
     catch (const Exception&)
     {
@@ -810,6 +828,25 @@ void SvxSecurityTabPage::InitControls()
 
         if (!sCurCertMgr.isEmpty())
             m_xParameterEdit->set_text(sCurCertMgr);
+
+        bool bEnable = 
!officecfg::Office::Common::Security::Scripting::CertMgrPath::isReadOnly();
+        m_xCertMgrPathLB->set_sensitive(bEnable);
+        m_xParameterEdit->set_sensitive(bEnable);
+        m_xCertMgrPathLabel->set_sensitive(bEnable);
+        m_xCertMgrPathImg->set_visible(!bEnable);
+
+        bEnable = 
!officecfg::Office::Common::Security::Scripting::TSAURLs::isReadOnly();
+        m_xTSAURLsPB->set_sensitive(bEnable);
+        m_xTSAURLsLabel->set_sensitive(bEnable);
+        m_xTSAURLsImg->set_visible(!bEnable);
+
+#ifndef UNX
+        bEnable = 
!officecfg::Office::Common::Security::Scripting::CertDir::isReadOnly() ||
+            
!officecfg::Office::Common::Security::Scripting::ManualCertDir::isReadOnly();
+        m_xCertPathPB->set_sensitive(bEnable);
+        m_xCertPathLabel->set_sensitive(bEnable);
+        m_xCertPathImg->set_visible(!bEnable);
+#endif
     }
     catch (const uno::Exception&)
     {
diff --git a/cui/source/options/optinet2.hxx b/cui/source/options/optinet2.hxx
index f99c30b0b12b..1ad30723f758 100644
--- a/cui/source/options/optinet2.hxx
+++ b/cui/source/options/optinet2.hxx
@@ -90,9 +90,11 @@ private:
     std::unique_ptr<weld::Button> m_xSecurityOptionsPB;
 
     std::unique_ptr<weld::CheckButton> m_xSavePasswordsCB;
+    std::unique_ptr<weld::Widget> m_xSavePasswordsImg;
     std::unique_ptr<weld::Button> m_xShowConnectionsPB;
 
     std::unique_ptr<weld::CheckButton> m_xMasterPasswordCB;
+    std::unique_ptr<weld::Widget> m_xMasterPasswordImg;
     std::unique_ptr<weld::Label> m_xMasterPasswordFT;
     std::unique_ptr<weld::Button> m_xMasterPasswordPB;
 
@@ -101,14 +103,20 @@ private:
 
     std::unique_ptr<weld::Container> m_xCertFrame;
     std::unique_ptr<weld::Button> m_xCertPathPB;
+    std::unique_ptr<weld::Widget> m_xCertPathImg;
+    std::unique_ptr<weld::Label> m_xCertPathLabel;
 
     std::unique_ptr<weld::Container> m_xTSAURLsFrame;
     std::unique_ptr<weld::Button> m_xTSAURLsPB;
+    std::unique_ptr<weld::Widget> m_xTSAURLsImg;
+    std::unique_ptr<weld::Label> m_xTSAURLsLabel;
 
     std::unique_ptr<weld::Label> m_xNoPasswordSaveFT;
 
     std::unique_ptr<weld::Button> m_xCertMgrPathLB;
     std::unique_ptr<weld::Entry> m_xParameterEdit;
+    std::unique_ptr<weld::Widget> m_xCertMgrPathImg;
+    std::unique_ptr<weld::Label> m_xCertMgrPathLabel;
 
     DECL_LINK(SecurityOptionsHdl, weld::Button&, void);
     DECL_LINK(SavePasswordHdl, weld::Toggleable&, void);
diff --git a/cui/uiconfig/ui/optsecuritypage.ui 
b/cui/uiconfig/ui/optsecuritypage.ui
index 9003cbacce3b..200f63a3f7af 100644
--- a/cui/uiconfig/ui/optsecuritypage.ui
+++ b/cui/uiconfig/ui/optsecuritypage.ui
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<!-- Generated with glade 3.40.0 -->
+<!-- Generated with glade 3.38.2 -->
 <interface domain="cui">
   <requires lib="gtk+" version="3.20"/>
   <!-- n-columns=1 n-rows=6 -->
@@ -24,22 +24,6 @@
             <property name="margin-top">6</property>
             <property name="hexpand">True</property>
             <property name="column-spacing">24</property>
-            <child>
-              <object class="GtkLabel" id="label9">
-                <property name="visible">True</property>
-                <property name="can-focus">False</property>
-                <property name="hexpand">True</property>
-                <property name="label" translatable="yes" 
context="optsecuritypage|label9">Maintain a list of Time Stamping Authority 
(TSA) URLs to be used for digital signatures in PDF export.</property>
-                <property name="wrap">True</property>
-                <property name="width-chars">56</property>
-                <property name="max-width-chars">56</property>
-                <property name="xalign">0</property>
-              </object>
-              <packing>
-                <property name="left-attach">0</property>
-                <property name="top-attach">0</property>
-              </packing>
-            </child>
             <child>
               <object class="GtkButton" id="tsas">
                 <property name="label" translatable="yes" 
context="optsecuritypage|tsas">_TSAs...</property>
@@ -59,6 +43,48 @@
                 <property name="top-attach">0</property>
               </packing>
             </child>
+            <child>
+              <!-- n-columns=2 n-rows=1 -->
+              <object class="GtkGrid">
+                <property name="visible">True</property>
+                <property name="can-focus">False</property>
+                <property name="hexpand">True</property>
+                <property name="column-spacing">6</property>
+                <child>
+                  <object class="GtkLabel" id="label9">
+                    <property name="visible">True</property>
+                    <property name="can-focus">False</property>
+                    <property name="hexpand">True</property>
+                    <property name="label" translatable="yes" 
context="optsecuritypage|label9">Maintain a list of Time Stamping Authority 
(TSA) URLs to be used for digital signatures in PDF export.</property>
+                    <property name="wrap">True</property>
+                    <property name="width-chars">56</property>
+                    <property name="max-width-chars">56</property>
+                    <property name="xalign">0</property>
+                  </object>
+                  <packing>
+                    <property name="left-attach">1</property>
+                    <property name="top-attach">0</property>
+                  </packing>
+                </child>
+                <child>
+                  <object class="GtkImage" id="locktsas">
+                    <property name="can-focus">False</property>
+                    <property name="no-show-all">True</property>
+                    <property name="halign">center</property>
+                    <property name="valign">center</property>
+                    <property name="icon-name">res/lock.png</property>
+                  </object>
+                  <packing>
+                    <property name="left-attach">0</property>
+                    <property name="top-attach">0</property>
+                  </packing>
+                </child>
+              </object>
+              <packing>
+                <property name="left-attach">0</property>
+                <property name="top-attach">0</property>
+              </packing>
+            </child>
           </object>
         </child>
         <child type="label">
@@ -93,22 +119,6 @@
             <property name="margin-top">6</property>
             <property name="hexpand">True</property>
             <property name="column-spacing">24</property>
-            <child>
-              <object class="GtkLabel" id="label7">
-                <property name="visible">True</property>
-                <property name="can-focus">False</property>
-                <property name="hexpand">True</property>
-                <property name="label" translatable="yes" 
context="optsecuritypage|label7">Select the Network Security Services 
certificate directory to use for digital signatures.</property>
-                <property name="wrap">True</property>
-                <property name="width-chars">56</property>
-                <property name="max-width-chars">56</property>
-                <property name="xalign">0</property>
-              </object>
-              <packing>
-                <property name="left-attach">0</property>
-                <property name="top-attach">0</property>
-              </packing>
-            </child>
             <child>
               <object class="GtkButton" id="cert">
                 <property name="label" translatable="yes" 
context="optsecuritypage|cert">_Certificate...</property>
@@ -128,6 +138,48 @@
                 <property name="top-attach">0</property>
               </packing>
             </child>
+            <child>
+              <!-- n-columns=2 n-rows=1 -->
+              <object class="GtkGrid">
+                <property name="visible">True</property>
+                <property name="can-focus">False</property>
+                <property name="hexpand">True</property>
+                <property name="column-spacing">6</property>
+                <child>
+                  <object class="GtkLabel" id="label7">
+                    <property name="visible">True</property>
+                    <property name="can-focus">False</property>
+                    <property name="hexpand">True</property>
+                    <property name="label" translatable="yes" 
context="optsecuritypage|label7">Select the Network Security Services 
certificate directory to use for digital signatures.</property>
+                    <property name="wrap">True</property>
+                    <property name="width-chars">56</property>
+                    <property name="max-width-chars">56</property>
+                    <property name="xalign">0</property>
+                  </object>
+                  <packing>
+                    <property name="left-attach">1</property>
+                    <property name="top-attach">0</property>
+                  </packing>
+                </child>
+                <child>
+                  <object class="GtkImage" id="lockcertipath">
+                    <property name="can-focus">False</property>
+                    <property name="no-show-all">True</property>
+                    <property name="halign">center</property>
+                    <property name="valign">center</property>
+                    <property name="icon-name">res/lock.png</property>
+                  </object>
+                  <packing>
+                    <property name="left-attach">0</property>
+                    <property name="top-attach">0</property>
+                  </packing>
+                </child>
+              </object>
+              <packing>
+                <property name="left-attach">0</property>
+                <property name="top-attach">0</property>
+              </packing>
+            </child>
           </object>
         </child>
         <child type="label">
@@ -238,25 +290,6 @@
                 <property name="can-focus">False</property>
                 <property name="hexpand">True</property>
                 <property name="row-spacing">12</property>
-                <child>
-                  <object class="GtkCheckButton" id="savepassword">
-                    <property name="label" translatable="yes" 
context="optsecuritypage|savepassword">Persistently _save passwords for web 
connections</property>
-                    <property name="visible">True</property>
-                    <property name="can-focus">True</property>
-                    <property name="receives-default">False</property>
-                    <property name="use-underline">True</property>
-                    <property name="draw-indicator">True</property>
-                    <child internal-child="accessible">
-                      <object class="AtkObject" id="savepassword-atkobject">
-                        <property name="AtkObject::accessible-description" 
translatable="yes" context="extended_tip|savepassword">If enabled, all 
passwords that you use to access files from web servers will be securely 
stored. You can retrieve the passwords from the list after you enter the master 
password.</property>
-                      </object>
-                    </child>
-                  </object>
-                  <packing>
-                    <property name="left-attach">0</property>
-                    <property name="top-attach">0</property>
-                  </packing>
-                </child>
                 <child>
                   <!-- n-columns=1 n-rows=3 -->
                   <object class="GtkGrid" id="grid5">
@@ -265,20 +298,6 @@
                     <property name="margin-start">12</property>
                     <property name="hexpand">True</property>
                     <property name="row-spacing">6</property>
-                    <child>
-                      <object class="GtkCheckButton" id="usemasterpassword">
-                        <property name="label" translatable="yes" 
context="optsecuritypage|usemasterpassword">Protected _by a master password 
(recommended)</property>
-                        <property name="visible">True</property>
-                        <property name="can-focus">True</property>
-                        <property name="receives-default">False</property>
-                        <property name="use-underline">True</property>
-                        <property name="draw-indicator">True</property>
-                      </object>
-                      <packing>
-                        <property name="left-attach">0</property>
-                        <property name="top-attach">0</property>
-                      </packing>
-                    </child>
                     <child>
                       <object class="GtkLabel" id="masterpasswordtext">
                         <property name="visible">True</property>
@@ -316,12 +335,97 @@ Do you want to delete password list and reset master 
password?</property>
                         <property name="top-attach">2</property>
                       </packing>
                     </child>
+                    <child>
+                      <!-- n-columns=2 n-rows=1 -->
+                      <object class="GtkGrid">
+                        <property name="visible">True</property>
+                        <property name="can-focus">False</property>
+                        <property name="hexpand">True</property>
+                        <property name="column-spacing">6</property>
+                        <child>
+                          <object class="GtkCheckButton" 
id="usemasterpassword">
+                            <property name="label" translatable="yes" 
context="optsecuritypage|usemasterpassword">Protected _by a master password 
(recommended)</property>
+                            <property name="visible">True</property>
+                            <property name="can-focus">True</property>
+                            <property name="receives-default">False</property>
+                            <property name="use-underline">True</property>
+                            <property name="draw-indicator">True</property>
+                          </object>
+                          <packing>
+                            <property name="left-attach">1</property>
+                            <property name="top-attach">0</property>
+                          </packing>
+                        </child>
+                        <child>
+                          <object class="GtkImage" id="lockusemasterpassword">
+                            <property name="can-focus">False</property>
+                            <property name="no-show-all">True</property>
+                            <property name="halign">center</property>
+                            <property name="valign">center</property>
+                            <property name="icon-name">res/lock.png</property>
+                          </object>
+                          <packing>
+                            <property name="left-attach">0</property>
+                            <property name="top-attach">0</property>
+                          </packing>
+                        </child>
+                      </object>
+                      <packing>
+                        <property name="left-attach">0</property>
+                        <property name="top-attach">0</property>
+                      </packing>
+                    </child>
                   </object>
                   <packing>
                     <property name="left-attach">0</property>
                     <property name="top-attach">1</property>
                   </packing>
                 </child>
+                <child>
+                  <!-- n-columns=2 n-rows=1 -->
+                  <object class="GtkGrid">
+                    <property name="visible">True</property>
+                    <property name="can-focus">False</property>
+                    <property name="hexpand">True</property>
+                    <property name="column-spacing">6</property>
+                    <child>
+                      <object class="GtkCheckButton" id="savepassword">
+                        <property name="label" translatable="yes" 
context="optsecuritypage|savepassword">Persistently _save passwords for web 
connections</property>
+                        <property name="visible">True</property>
+                        <property name="can-focus">True</property>
+                        <property name="receives-default">False</property>
+                        <property name="use-underline">True</property>
+                        <property name="draw-indicator">True</property>
+                        <child internal-child="accessible">
+                          <object class="AtkObject" 
id="savepassword-atkobject">
+                            <property name="AtkObject::accessible-description" 
translatable="yes" context="extended_tip|savepassword">If enabled, all 
passwords that you use to access files from web servers will be securely 
stored. You can retrieve the passwords from the list after you enter the master 
password.</property>
+                          </object>
+                        </child>
+                      </object>
+                      <packing>
+                        <property name="left-attach">1</property>
+                        <property name="top-attach">0</property>
+                      </packing>
+                    </child>
+                    <child>
+                      <object class="GtkImage" id="locksavepassword">
+                        <property name="can-focus">False</property>
+                        <property name="no-show-all">True</property>
+                        <property name="halign">center</property>
+                        <property name="valign">center</property>
+                        <property name="icon-name">res/lock.png</property>
+                      </object>
+                      <packing>
+                        <property name="left-attach">0</property>
+                        <property name="top-attach">0</property>
+                      </packing>
+                    </child>
+                  </object>
+                  <packing>
+                    <property name="left-attach">0</property>
+                    <property name="top-attach">0</property>
+                  </packing>
+                </child>
               </object>
               <packing>
                 <property name="left-attach">0</property>
@@ -503,22 +607,6 @@ Do you want to delete password list and reset master 
password?</property>
             <property name="margin-top">6</property>
             <property name="row-spacing">8</property>
             <property name="column-spacing">24</property>
-            <child>
-              <object class="GtkLabel" id="label11">
-                <property name="visible">True</property>
-                <property name="can-focus">False</property>
-                <property name="hexpand">True</property>
-                <property name="label" translatable="yes" 
context="optsecuritypage|label11">Select custom certificate manager executable. 
Note that %PRODUCTNAME tries to locate installed ones automatically.</property>
-                <property name="wrap">True</property>
-                <property name="width-chars">56</property>
-                <property name="max-width-chars">56</property>
-                <property name="xalign">0</property>
-              </object>
-              <packing>
-                <property name="left-attach">0</property>
-                <property name="top-attach">0</property>
-              </packing>
-            </child>
             <child>
               <object class="GtkButton" id="browse">
                 <property name="label" translatable="yes" 
context="optsecuritypage|browse">_Browse...</property>
@@ -551,6 +639,53 @@ Do you want to delete password list and reset master 
password?</property>
                 <property name="top-attach">1</property>
               </packing>
             </child>
+            <child>
+              <!-- n-columns=2 n-rows=1 -->
+              <object class="GtkGrid">
+                <property name="visible">True</property>
+                <property name="can-focus">False</property>
+                <property name="hexpand">True</property>
+                <property name="column-spacing">6</property>
+                <child>
+                  <object class="GtkLabel" id="label11">
+                    <property name="visible">True</property>
+                    <property name="can-focus">False</property>
+                    <property name="hexpand">True</property>
+                    <property name="label" translatable="yes" 
context="optsecuritypage|label11">Select custom certificate manager executable. 
Note that %PRODUCTNAME tries to locate installed ones automatically.</property>
+                    <property name="wrap">True</property>
+                    <property name="width-chars">56</property>
+                    <property name="max-width-chars">56</property>
+                    <property name="xalign">0</property>
+                  </object>
+                  <packing>
+                    <property name="left-attach">1</property>
+                    <property name="top-attach">0</property>
+                  </packing>
+                </child>
+                <child>
+                  <object class="GtkImage" id="lockcertimanager">
+                    <property name="can-focus">False</property>
+                    <property name="no-show-all">True</property>
+                    <property name="halign">center</property>
+                    <property name="valign">center</property>
+                    <property name="icon-name">res/lock.png</property>
+                    <child internal-child="accessible">
+                      <object class="AtkObject" 
id="lockcertimanager-atkobject">
+                        <property 
name="AtkObject::accessible-description">Enter the executable of the 
certificate manager path is readonly.</property>
+                      </object>
+                    </child>
+                  </object>
+                  <packing>
+                    <property name="left-attach">0</property>
+                    <property name="top-attach">0</property>
+                  </packing>
+                </child>
+              </object>
+              <packing>
+                <property name="left-attach">0</property>
+                <property name="top-attach">0</property>
+              </packing>
+            </child>
             <child>
               <placeholder/>
             </child>

Reply via email to