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)
