filter/source/pdf/impdialog.cxx                |    5 ++++-
 include/svx/AccessibilityCheckDialog.hxx       |    9 ++++++++-
 include/vcl/weld.hxx                           |    3 ++-
 svx/source/dialog/AccessibilityCheckDialog.cxx |   25 ++++++++++++++++++++++---
 svx/uiconfig/ui/accessibilitycheckdialog.ui    |   20 +++++++++++++++++---
 sw/source/uibase/shells/basesh.cxx             |    9 ++++++++-
 6 files changed, 61 insertions(+), 10 deletions(-)

New commits:
commit 950bd818eb37e79c2276ce919f90d177255d5520
Author:     Samuel Mehrbrodt <samuel.mehrbr...@allotropia.de>
AuthorDate: Mon Nov 14 16:23:30 2022 +0100
Commit:     Samuel Mehrbrodt <samuel.mehrbr...@allotropia.de>
CommitDate: Fri Nov 18 09:06:55 2022 +0100

    tdf#148999 Add rescan button to PDF a11y check dialog
    
    Change-Id: I772f529ea4bd225701b9864ad9156c573f41484c
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/142715
    Tested-by: Jenkins
    Reviewed-by: Samuel Mehrbrodt <samuel.mehrbr...@allotropia.de>

diff --git a/filter/source/pdf/impdialog.cxx b/filter/source/pdf/impdialog.cxx
index eaa3385ab16f..2287dc8665dc 100644
--- a/filter/source/pdf/impdialog.cxx
+++ b/filter/source/pdf/impdialog.cxx
@@ -318,7 +318,10 @@ IMPL_LINK_NOARG(ImpPDFTabDialog, OkHdl, weld::Button&, 
void)
             sfx::AccessibilityIssueCollection aCollection = 
pShell->runAccessibilityCheck();
             if (!aCollection.getIssues().empty())
             {
-                mpAccessibilityCheckDialog = 
std::make_shared<svx::AccessibilityCheckDialog>(mpParent, aCollection);
+                mpAccessibilityCheckDialog = 
std::make_shared<svx::AccessibilityCheckDialog>(
+                    mpParent, aCollection, [pShell]() -> 
sfx::AccessibilityIssueCollection {
+                        return pShell->runAccessibilityCheck();
+                    });
                 weld::DialogController::runAsync(mpAccessibilityCheckDialog, 
[this](sal_Int32 retValue){
                     m_xDialog->response(retValue);
                 });
diff --git a/include/svx/AccessibilityCheckDialog.hxx 
b/include/svx/AccessibilityCheckDialog.hxx
index 53fcdaf4a031..f2e3c567351b 100644
--- a/include/svx/AccessibilityCheckDialog.hxx
+++ b/include/svx/AccessibilityCheckDialog.hxx
@@ -41,14 +41,21 @@ class SVX_DLLPUBLIC AccessibilityCheckDialog final : public 
weld::GenericDialogC
 {
 private:
     sfx::AccessibilityIssueCollection m_aIssueCollection;
+    std::function<sfx::AccessibilityIssueCollection()> m_getIssueCollection;
     std::vector<std::unique_ptr<AccessibilityCheckEntry>> 
m_aAccessibilityCheckEntries;
 
     // Controls
     std::unique_ptr<weld::Box> m_xAccessibilityCheckBox;
+    std::unique_ptr<weld::Button> m_xRescanBtn;
+
+    DECL_LINK(RescanButtonClicked, weld::Button&, void);
+
+    void populateIssues();
 
 public:
     AccessibilityCheckDialog(weld::Window* pParent,
-                             sfx::AccessibilityIssueCollection 
rIssueCollection);
+                             sfx::AccessibilityIssueCollection 
rIssueCollection,
+                             
std::function<sfx::AccessibilityIssueCollection()> getIssueCollection);
     virtual ~AccessibilityCheckDialog() override;
 };
 
diff --git a/include/vcl/weld.hxx b/include/vcl/weld.hxx
index adbd35d85df6..b024bc33c4af 100644
--- a/include/vcl/weld.hxx
+++ b/include/vcl/weld.hxx
@@ -361,7 +361,8 @@ protected:
     void signal_container_focus_changed() { 
m_aContainerFocusChangedHdl.Call(*this); }
 
 public:
-    // remove and add in one go
+    // remove from old container and add to new container in one go
+    // new container can be null to just remove from old container
     virtual void move(weld::Widget* pWidget, weld::Container* pNewParent) = 0;
     // create an XWindow as a child of this container. The XWindow is
     // suitable to contain css::awt::XControl items
diff --git a/svx/source/dialog/AccessibilityCheckDialog.cxx 
b/svx/source/dialog/AccessibilityCheckDialog.cxx
index 136bafc265bf..ac34f7306da4 100644
--- a/svx/source/dialog/AccessibilityCheckDialog.cxx
+++ b/svx/source/dialog/AccessibilityCheckDialog.cxx
@@ -36,14 +36,25 @@ IMPL_LINK_NOARG(AccessibilityCheckEntry, GotoButtonClicked, 
weld::Button&, void)
 }
 
 AccessibilityCheckDialog::AccessibilityCheckDialog(
-    weld::Window* pParent, sfx::AccessibilityIssueCollection aIssueCollection)
+    weld::Window* pParent, sfx::AccessibilityIssueCollection aIssueCollection,
+    std::function<sfx::AccessibilityIssueCollection()> getIssueCollection)
     : GenericDialogController(pParent, "svx/ui/accessibilitycheckdialog.ui",
                               "AccessibilityCheckDialog")
     , m_aIssueCollection(std::move(aIssueCollection))
+    , m_getIssueCollection(getIssueCollection)
     , m_xAccessibilityCheckBox(m_xBuilder->weld_box("accessibilityCheckBox"))
+    , m_xRescanBtn(m_xBuilder->weld_button("rescan"))
 {
-    sal_Int32 i = 0;
+    m_xRescanBtn->connect_clicked(LINK(this, AccessibilityCheckDialog, 
RescanButtonClicked));
+
+    populateIssues();
+}
 
+AccessibilityCheckDialog::~AccessibilityCheckDialog() {}
+
+void AccessibilityCheckDialog::populateIssues()
+{
+    sal_Int32 i = 0;
     for (std::shared_ptr<sfx::AccessibilityIssue> const& pIssue : 
m_aIssueCollection.getIssues())
     {
         auto xEntry
@@ -53,7 +64,15 @@ AccessibilityCheckDialog::AccessibilityCheckDialog(
     }
 }
 
-AccessibilityCheckDialog::~AccessibilityCheckDialog() {}
+IMPL_LINK_NOARG(AccessibilityCheckDialog, RescanButtonClicked, weld::Button&, 
void)
+{
+    // Remove old issue widgets
+    for (auto const& xEntry : m_aAccessibilityCheckEntries)
+        m_xAccessibilityCheckBox->move(xEntry->get_widget(), nullptr);
+
+    m_aIssueCollection = m_getIssueCollection();
+    populateIssues();
+}
 
 } // end svx namespace
 
diff --git a/svx/uiconfig/ui/accessibilitycheckdialog.ui 
b/svx/uiconfig/ui/accessibilitycheckdialog.ui
index b46206189eb7..fecab2fbb31f 100644
--- a/svx/uiconfig/ui/accessibilitycheckdialog.ui
+++ b/svx/uiconfig/ui/accessibilitycheckdialog.ui
@@ -22,6 +22,20 @@
           <object class="GtkButtonBox" id="dialogButtons">
             <property name="can-focus">False</property>
             <property name="layout-style">end</property>
+            <child>
+              <object class="GtkButton" id="rescan">
+                <property name="label" translatable="yes" 
context="AccessibleCheckDialog|btn_rescan">Rescan</property>
+                <property name="visible">True</property>
+                <property name="can-focus">True</property>
+                <property name="receives-default">True</property>
+                <property name="use-underline">True</property>
+              </object>
+              <packing>
+                <property name="expand">False</property>
+                <property name="fill">True</property>
+                <property name="position">0</property>
+              </packing>
+            </child>
             <child>
               <object class="GtkButton" id="ok">
                 <property name="label" translatable="yes" 
context="stock">_OK</property>
@@ -35,7 +49,7 @@
               <packing>
                 <property name="expand">False</property>
                 <property name="fill">True</property>
-                <property name="position">0</property>
+                <property name="position">1</property>
               </packing>
             </child>
             <child>
@@ -49,7 +63,7 @@
               <packing>
                 <property name="expand">False</property>
                 <property name="fill">True</property>
-                <property name="position">1</property>
+                <property name="position">2</property>
               </packing>
             </child>
             <child>
@@ -63,7 +77,7 @@
               <packing>
                 <property name="expand">False</property>
                 <property name="fill">True</property>
-                <property name="position">2</property>
+                <property name="position">3</property>
                 <property name="secondary">True</property>
               </packing>
             </child>
diff --git a/sw/source/uibase/shells/basesh.cxx 
b/sw/source/uibase/shells/basesh.cxx
index 4a365d33af11..31f2c247b545 100644
--- a/sw/source/uibase/shells/basesh.cxx
+++ b/sw/source/uibase/shells/basesh.cxx
@@ -2798,7 +2798,14 @@ void SwBaseShell::ExecDlg(SfxRequest &rReq)
         {
             sw::AccessibilityCheck aCheck(rSh.GetDoc());
             aCheck.check();
-            std::shared_ptr<svx::AccessibilityCheckDialog> aDialog = 
std::make_shared<svx::AccessibilityCheckDialog>(pMDI, 
aCheck.getIssueCollection());
+            std::shared_ptr<svx::AccessibilityCheckDialog> aDialog
+                = std::make_shared<svx::AccessibilityCheckDialog>(
+                    pMDI, aCheck.getIssueCollection(),
+                    [&rSh]() -> sfx::AccessibilityIssueCollection {
+                        sw::AccessibilityCheck aA11yCheck(rSh.GetDoc());
+                        aA11yCheck.check();
+                        return aA11yCheck.getIssueCollection();
+                    });
             weld::DialogController::runAsync(aDialog, [](int){});
         }
         break;

Reply via email to