vcl/inc/jsdialog/enabled.hxx  |    3 ++-
 vcl/jsdialog/enabled.cxx      |   10 ++++++----
 vcl/source/window/builder.cxx |   10 +++++++++-
 vcl/source/window/window.cxx  |   21 +++++++++------------
 4 files changed, 26 insertions(+), 18 deletions(-)

New commits:
commit 5d445cc75a5324ca826467d4722b05511b1441df
Author:     Caolán McNamara <[email protected]>
AuthorDate: Thu Dec 18 12:19:25 2025 +0000
Commit:     Caolán McNamara <[email protected]>
CommitDate: Mon Jan 5 09:29:09 2026 +0100

    avoid a possible empty aria node
    
    if there was no description, only a name, but we end up not using it
    so only fetch the name for the case that we will use it.
    
    Change-Id: I1075bcc3cd054fbf512b240ffe09e17c12a0d868
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/195852
    Tested-by: Jenkins CollaboraOffice <[email protected]>
    Reviewed-by: Miklos Vajna <[email protected]>
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/196525
    Reviewed-by: Caolán McNamara <[email protected]>
    Tested-by: Jenkins

diff --git a/vcl/source/window/window.cxx b/vcl/source/window/window.cxx
index df228aa50fd1..543c888fc0ca 100644
--- a/vcl/source/window/window.cxx
+++ b/vcl/source/window/window.cxx
@@ -3414,25 +3414,16 @@ void Window::DumpAsPropertyTree(tools::JsonWriter& 
rJsonWriter)
     if (pAccLabelledBy)
         rJsonWriter.put("labelledBy", pAccLabelledBy->get_id());
 
-    OUString sAccName = GetAccessibleName();
+    OUString sAccName = (!pAccLabelFor && !pAccLabelledBy) ? 
GetAccessibleName() : OUString();
     OUString sAccDesc = GetAccessibleDescription();
 
     if (!sAccName.isEmpty() || !sAccDesc.isEmpty())
     {
         auto aAria = rJsonWriter.startNode("aria");
-
         if (!sAccDesc.isEmpty())
-        {
             rJsonWriter.put("description", sAccDesc);
-        }
-
-        if(!pAccLabelFor && !pAccLabelledBy)
-        {
-            if (!sAccName.isEmpty())
-            {
-                rJsonWriter.put("label", sAccName);
-            }
-        }
+        if (!sAccName.isEmpty())
+            rJsonWriter.put("label", sAccName);
     }
 
     mpWindowImpl->maDumpAsPropertyTreeHdl.Call(rJsonWriter);
commit b10672ec9e0b3bd006f8e502a8b62ee60ff88cef
Author:     Henry Castro <[email protected]>
AuthorDate: Tue Dec 16 10:41:03 2025 -0400
Commit:     Caolán McNamara <[email protected]>
CommitDate: Mon Jan 5 09:29:02 2026 +0100

    lok: a11y: fix the accessible description property
    
    The accessible description is useful for setting the
    image alt attribute on the client side.
    
    Change-Id: I86f4e8b6486d89c446019339699ab030dccb6c0f
    Signed-off-by: Henry Castro <[email protected]>
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/195725
    Tested-by: Caolán McNamara <[email protected]>
    Reviewed-by: Caolán McNamara <[email protected]>
    Tested-by: Jenkins CollaboraOffice <[email protected]>
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/196524
    Tested-by: Jenkins

diff --git a/vcl/source/window/window.cxx b/vcl/source/window/window.cxx
index ccf97442ceb3..df228aa50fd1 100644
--- a/vcl/source/window/window.cxx
+++ b/vcl/source/window/window.cxx
@@ -3414,18 +3414,24 @@ void Window::DumpAsPropertyTree(tools::JsonWriter& 
rJsonWriter)
     if (pAccLabelledBy)
         rJsonWriter.put("labelledBy", pAccLabelledBy->get_id());
 
-    if(!pAccLabelFor && !pAccLabelledBy)
+    OUString sAccName = GetAccessibleName();
+    OUString sAccDesc = GetAccessibleDescription();
+
+    if (!sAccName.isEmpty() || !sAccDesc.isEmpty())
     {
-        OUString sAccName = GetAccessibleName();
-        OUString sAccDesc = GetAccessibleDescription();
+        auto aAria = rJsonWriter.startNode("aria");
+
+        if (!sAccDesc.isEmpty())
+        {
+            rJsonWriter.put("description", sAccDesc);
+        }
 
-        if (!sAccName.isEmpty() || !sAccDesc.isEmpty())
+        if(!pAccLabelFor && !pAccLabelledBy)
         {
-            auto aAria = rJsonWriter.startNode("aria");
             if (!sAccName.isEmpty())
+            {
                 rJsonWriter.put("label", sAccName);
-            if (!sAccDesc.isEmpty())
-                rJsonWriter.put("description", sAccDesc);
+            }
         }
     }
 
commit e52374c5f8a8d5e905c9983e8b2a43b1095a961c
Author:     Caolán McNamara <[email protected]>
AuthorDate: Thu Dec 11 11:50:40 2025 +0000
Commit:     Caolán McNamara <[email protected]>
CommitDate: Mon Jan 5 09:28:53 2026 +0100

    add the names of the writer dialog .ui files that are missing from coverage
    
    Change-Id: I1f54dc2197ced0d941df3581bfe6b1db2e357274
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/195451
    Reviewed-by: Miklos Vajna <[email protected]>
    Tested-by: Jenkins CollaboraOffice <[email protected]>
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/196523
    Tested-by: Jenkins
    Reviewed-by: Caolán McNamara <[email protected]>

diff --git a/vcl/inc/jsdialog/enabled.hxx b/vcl/inc/jsdialog/enabled.hxx
index 65ccc5b14897..857585a9c58d 100644
--- a/vcl/inc/jsdialog/enabled.hxx
+++ b/vcl/inc/jsdialog/enabled.hxx
@@ -26,7 +26,8 @@ bool isBuilderEnabledForNavigator(std::u16string_view 
rUIFile);
 bool isBuilderEnabledForQuickFind(std::u16string_view rUIFile);
 bool isInterimBuilderEnabledForNotebookbar(std::u16string_view rUIFile);
 
-bool completeWriterDialogList(const o3tl::sorted_vector<OUString>& entries);
+// returns vector of .ui files not seen that should be seen to have complete 
coverage
+std::vector<OUString> completeWriterDialogList(const 
o3tl::sorted_vector<OUString>& entries);
 }
 
 /* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s 
cinkeys+=0=break: */
diff --git a/vcl/jsdialog/enabled.cxx b/vcl/jsdialog/enabled.cxx
index 6dfe480fe3b2..cd0fd4d23339 100644
--- a/vcl/jsdialog/enabled.cxx
+++ b/vcl/jsdialog/enabled.cxx
@@ -627,14 +627,16 @@ bool isBuilderEnabledForFormulabar(std::u16string_view 
rUIFile)
     return isInMap(FormulabarList, rUIFile);
 }
 
-bool completeWriterDialogList(const o3tl::sorted_vector<OUString>& entries)
+std::vector<OUString> completeWriterDialogList(const 
o3tl::sorted_vector<OUString>& entries)
 {
+    std::vector<OUString> missing;
     for (const auto& entry : SwriterDialogList)
     {
-        if (!entries.contains(OUString(entry)))
-            return false;
+        OUString sEntry(entry);
+        if (!entries.contains(sEntry))
+            missing.push_back(sEntry);
     }
-    return true;
+    return missing;
 }
 
 } // end of jsdialog
diff --git a/vcl/source/window/builder.cxx b/vcl/source/window/builder.cxx
index 1812d57e3e7b..5bdad316e2e0 100644
--- a/vcl/source/window/builder.cxx
+++ b/vcl/source/window/builder.cxx
@@ -197,13 +197,21 @@ void Application::UICoverageReport(tools::JsonWriter& 
rJson)
     auto resultNode = rJson.startNode("result");
 
     const auto& entries = ImplGetSVData()->mpDefInst->getUsedUIList();
+    if (!entries.empty())
     {
         auto childrenNode = rJson.startArray("used");
         for (const auto& entry : entries)
             rJson.putSimpleValue(entry);
     }
 
-    rJson.put("CompleteWriterDialogCoverage", 
jsdialog::completeWriterDialogList(entries));
+    std::vector<OUString> missingWriterDialogUIs = 
jsdialog::completeWriterDialogList(entries);
+    rJson.put("CompleteWriterDialogCoverage", missingWriterDialogUIs.empty());
+    if (!missingWriterDialogUIs.empty())
+    {
+        auto childrenNode = rJson.startArray("MissingWriterDialogCoverage");
+        for (const auto& entry : missingWriterDialogUIs)
+            rJson.putSimpleValue(entry);
+    }
 }
 
 std::unique_ptr<weld::Builder> Application::CreateBuilder(weld::Widget* 
pParent, const OUString &rUIFile, bool bMobile, sal_uInt64 nLOKWindowId)

Reply via email to