sw/inc/AccessibilityCheckStrings.hrc                |    1 
 sw/inc/OnlineAccessibilityCheck.hxx                 |    6 ++++
 sw/source/core/access/AccessibilityCheck.cxx        |    6 ++--
 sw/source/core/access/AccessibilityIssue.cxx        |   28 ++++++++++++++++++--
 sw/source/core/inc/AccessibilityIssue.hxx           |    1 
 sw/source/core/txtnode/OnlineAccessibilityCheck.cxx |   15 ++++++++++
 sw/source/uibase/uiview/view2.cxx                   |    3 +-
 7 files changed, 55 insertions(+), 5 deletions(-)

New commits:
commit bbb104ea2b8f3e48273f316cfad406e904a2f331
Author:     Balazs Varga <balazs.varga.ext...@allotropia.de>
AuthorDate: Tue Jun 20 15:38:40 2023 +0200
Commit:     Samuel Mehrbrodt <samuel.mehrbr...@allotropia.de>
CommitDate: Fri Jun 23 10:17:29 2023 +0200

    tdf#155503 - A11Y sidebar: Add quick fix action to set document title
    
    Add fix button to set the document title.
    Fix updates issue of document level changes.
    
    Change-Id: Ibab5cab3b595de4df68c3022a5864b2d2d4bed2d
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/153352
    Tested-by: Jenkins
    Reviewed-by: Samuel Mehrbrodt <samuel.mehrbr...@allotropia.de>

diff --git a/sw/inc/AccessibilityCheckStrings.hrc 
b/sw/inc/AccessibilityCheckStrings.hrc
index 12e2e1fa2b8d..0efaee64ca4b 100644
--- a/sw/inc/AccessibilityCheckStrings.hrc
+++ b/sw/inc/AccessibilityCheckStrings.hrc
@@ -40,6 +40,7 @@
 #define STR_DOCUMENT_DEFAULT_LANGUAGE   NC_("STR_DOCUMENT_DEFAULT_LANGUAGE", 
"Document default language is not set.")
 #define STR_STYLE_NO_LANGUAGE           NC_("STR_STYLE_NO_LANGUAGE", "Style 
“%STYLE_NAME%” has no language set.")
 #define STR_DOCUMENT_TITLE              NC_("STR_DOCUMENT_TITLE", "Document 
title is not set.")
+#define STR_ENTER_DOCUMENT_TITLE        NC_("STR_ENTER_DOCUMENT_TITLE", "Enter 
document title:")
 
 #define STR_ENTER_ALT                   NC_("STR_ENTER_ALT", "Enter 
alternative text:")
 
diff --git a/sw/inc/OnlineAccessibilityCheck.hxx 
b/sw/inc/OnlineAccessibilityCheck.hxx
index fc158e28db7e..1055c7e67d53 100644
--- a/sw/inc/OnlineAccessibilityCheck.hxx
+++ b/sw/inc/OnlineAccessibilityCheck.hxx
@@ -67,8 +67,14 @@ public:
     OnlineAccessibilityCheck(SwDoc& rDocument);
     void update(SwPosition const& rNewPos);
     void resetAndQueue(SwNode* pNode);
+    void resetAndQueueDocumentLevel();
     void updateCheckerActivity();
     sal_Int32 getNumberOfAccessibilityIssues() { return 
m_nAccessibilityIssues; }
+    sal_Int32 getNumberOfDocumentLevelAccessibilityIssues()
+    {
+        return m_pDocumentAccessibilityIssues ? 
m_pDocumentAccessibilityIssues->getIssues().size()
+                                              : sal_Int32(0);
+    }
 };
 
 } // end sw
diff --git a/sw/source/core/access/AccessibilityCheck.cxx 
b/sw/source/core/access/AccessibilityCheck.cxx
index 802ad2c8dea3..ec2a101795e5 100644
--- a/sw/source/core/access/AccessibilityCheck.cxx
+++ b/sw/source/core/access/AccessibilityCheck.cxx
@@ -1263,8 +1263,10 @@ public:
         OUString sTitle = xDocumentProperties->getTitle();
         if (o3tl::trim(sTitle).empty())
         {
-            lclAddIssue(m_rIssueCollection, SwResId(STR_DOCUMENT_TITLE),
-                        sfx::AccessibilityIssueID::DOCUMENT_TITLE);
+            auto pIssue = lclAddIssue(m_rIssueCollection, 
SwResId(STR_DOCUMENT_TITLE),
+                                      
sfx::AccessibilityIssueID::DOCUMENT_TITLE);
+            pIssue->setDoc(*pDoc);
+            pIssue->setIssueObject(IssueObject::DOCUMENT_TITLE);
         }
     }
 };
diff --git a/sw/source/core/access/AccessibilityIssue.cxx 
b/sw/source/core/access/AccessibilityIssue.cxx
index d1ebb53bdeeb..d0366b1ef3e2 100644
--- a/sw/source/core/access/AccessibilityIssue.cxx
+++ b/sw/source/core/access/AccessibilityIssue.cxx
@@ -8,6 +8,8 @@
  *
  */
 
+#include <com/sun/star/document/XDocumentPropertiesSupplier.hpp>
+
 #include <AccessibilityIssue.hxx>
 #include <AccessibilityCheckStrings.hrc>
 #include <drawdoc.hxx>
@@ -42,7 +44,8 @@ void AccessibilityIssue::setObjectID(OUString const& rID) { 
m_sObjectID = rID; }
 
 bool AccessibilityIssue::canGotoIssue() const
 {
-    if (m_pDoc && m_eIssueObject != IssueObject::UNKNOWN)
+    if (m_pDoc && m_eIssueObject != IssueObject::UNKNOWN
+        && m_eIssueObject != IssueObject::DOCUMENT_TITLE)
         return true;
     return false;
 }
@@ -119,7 +122,8 @@ void AccessibilityIssue::gotoIssue() const
 bool AccessibilityIssue::canQuickFixIssue() const
 {
     return m_eIssueObject == IssueObject::GRAPHIC || m_eIssueObject == 
IssueObject::OLE
-           || m_eIssueObject == IssueObject::SHAPE || m_eIssueObject == 
IssueObject::FORM;
+           || m_eIssueObject == IssueObject::SHAPE || m_eIssueObject == 
IssueObject::FORM
+           || m_eIssueObject == IssueObject::DOCUMENT_TITLE;
 }
 
 void AccessibilityIssue::quickFixIssue() const
@@ -158,6 +162,26 @@ void AccessibilityIssue::quickFixIssue() const
             }
         }
         break;
+        case IssueObject::DOCUMENT_TITLE:
+        {
+            OUString aDesc = SwResId(STR_ENTER_DOCUMENT_TITLE);
+            SvxNameDialog aNameDialog(m_pParent, "", aDesc);
+            if (aNameDialog.run() == RET_OK)
+            {
+                SwDocShell* pShell = m_pDoc->GetDocShell();
+                if (!pShell)
+                    return;
+
+                const uno::Reference<document::XDocumentPropertiesSupplier> 
xDPS(
+                    pShell->GetModel(), uno::UNO_QUERY_THROW);
+                const uno::Reference<document::XDocumentProperties> 
xDocumentProperties(
+                    xDPS->getDocumentProperties());
+                xDocumentProperties->setTitle(aNameDialog.GetName());
+
+                
m_pDoc->getOnlineAccessibilityCheck()->resetAndQueueDocumentLevel();
+            }
+        }
+        break;
         default:
             break;
     }
diff --git a/sw/source/core/inc/AccessibilityIssue.hxx 
b/sw/source/core/inc/AccessibilityIssue.hxx
index 5a51ba2110a1..f38457acf0b6 100644
--- a/sw/source/core/inc/AccessibilityIssue.hxx
+++ b/sw/source/core/inc/AccessibilityIssue.hxx
@@ -25,6 +25,7 @@ enum class IssueObject
     FORM,
     TABLE,
     TEXT,
+    DOCUMENT_TITLE,
 };
 
 class SW_DLLPUBLIC AccessibilityIssue final : public sfx::AccessibilityIssue
diff --git a/sw/source/core/txtnode/OnlineAccessibilityCheck.cxx 
b/sw/source/core/txtnode/OnlineAccessibilityCheck.cxx
index 629497c50bac..d39443313c6f 100644
--- a/sw/source/core/txtnode/OnlineAccessibilityCheck.cxx
+++ b/sw/source/core/txtnode/OnlineAccessibilityCheck.cxx
@@ -253,6 +253,7 @@ void 
OnlineAccessibilityCheck::lookForPreviousNodeAndUpdate(const SwPosition& rN
 
     if (pNode && (pNode->IsContentNode() || pNode->IsTableNode()))
     {
+        runDocumentLevelAccessibilityCheck();
         runAccessibilityCheck(pNode);
         updateNodeStatus(pNode);
         updateStatusbar();
@@ -301,6 +302,20 @@ void OnlineAccessibilityCheck::resetAndQueue(SwNode* pNode)
     updateStatusbar();
 }
 
+void OnlineAccessibilityCheck::resetAndQueueDocumentLevel()
+{
+    if (utl::ConfigManager::IsFuzzing())
+        return;
+
+    bool bOnlineCheckStatus
+        = 
officecfg::Office::Common::Accessibility::OnlineAccessibilityCheck::get();
+    if (!bOnlineCheckStatus)
+        return;
+
+    runDocumentLevelAccessibilityCheck();
+    updateStatusbar();
+}
+
 } // end sw
 
 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sw/source/uibase/uiview/view2.cxx 
b/sw/source/uibase/uiview/view2.cxx
index 02823bb43b56..ed0982f037dc 100644
--- a/sw/source/uibase/uiview/view2.cxx
+++ b/sw/source/uibase/uiview/view2.cxx
@@ -1888,7 +1888,8 @@ void SwView::StateStatusLine(SfxItemSet &rSet)
                 std::unique_ptr<sw::OnlineAccessibilityCheck> const& 
rOnlineAccessibilityCheck = rShell.GetDoc()->getOnlineAccessibilityCheck();
                 if (rOnlineAccessibilityCheck)
                 {
-                    sal_Int32 nIssues = 
rOnlineAccessibilityCheck->getNumberOfAccessibilityIssues();
+                    sal_Int32 nIssues = 
rOnlineAccessibilityCheck->getNumberOfAccessibilityIssues()
+                        + 
rOnlineAccessibilityCheck->getNumberOfDocumentLevelAccessibilityIssues();
                     rSet.Put(SfxInt32Item(FN_STAT_ACCESSIBILITY_CHECK, 
nIssues));
                 }
             }

Reply via email to