desktop/source/lib/init.cxx | 2 - include/vcl/svapp.hxx | 4 ++ vcl/inc/jsdialog/enabled.hxx | 1 vcl/jsdialog/enabled.cxx | 23 ++++++++++++++++ vcl/source/window/builder.cxx | 60 ++++++++++++++++++++++-------------------- 5 files changed, 60 insertions(+), 30 deletions(-)
New commits: commit 96716647614d94097ec250d91f2257aaaae12d95 Author: Caolán McNamara <[email protected]> AuthorDate: Tue Feb 3 16:34:36 2026 +0000 Commit: Caolán McNamara <[email protected]> CommitDate: Thu Feb 5 16:33:44 2026 +0100 various 'common' dialogs only appear in specific applications. set: a) the 'writerperfect' .uis b) svx/ui/acceptrejectchangesdialog.ui to the writer a11y testing category exclude: a) svx/ui/gotopagedialog.ui b) cui/ui/splitcellsdialog.ui from the calc a11y testing Change-Id: I78822177fe70b7f9c2d5b8910462ad92e9eac565 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/198617 Reviewed-by: Miklos Vajna <[email protected]> Tested-by: Caolán McNamara <[email protected]> diff --git a/desktop/source/lib/init.cxx b/desktop/source/lib/init.cxx index 795ac916c07c..edcd91ba0cd8 100644 --- a/desktop/source/lib/init.cxx +++ b/desktop/source/lib/init.cxx @@ -5669,7 +5669,7 @@ static void doc_postUnoCommand(LibreOfficeKitDocument* pThis, const char* pComma tools::JsonWriter aJson; aJson.put("commandName", aCommand); aJson.put("success", true); - Application::UICoverageReport(aJson, linguisticDataAvailable); + Application::UICoverageReport(aJson, getDocumentType(pThis), linguisticDataAvailable); pDocument->mpCallbackFlushHandlers[nView]->queue(LOK_CALLBACK_UNO_COMMAND_RESULT, aJson.finishAndGetAsOString()); } diff --git a/include/vcl/svapp.hxx b/include/vcl/svapp.hxx index 41abc6b2f0d4..209650bce438 100644 --- a/include/vcl/svapp.hxx +++ b/include/vcl/svapp.hxx @@ -1239,7 +1239,9 @@ public: static void EnableUICoverage(bool bEnable); /** Report on what .ui files were used*/ - static void UICoverageReport(tools::JsonWriter& rJson, bool linguisticDataAvailable); + static void UICoverageReport(tools::JsonWriter& rJson, + /*LibreOfficeKitDocumentType*/ int eDocType, + bool linguisticDataAvailable); ///@} diff --git a/vcl/inc/jsdialog/enabled.hxx b/vcl/inc/jsdialog/enabled.hxx index 4d4a6e2fcd27..7122c4215945 100644 --- a/vcl/inc/jsdialog/enabled.hxx +++ b/vcl/inc/jsdialog/enabled.hxx @@ -36,6 +36,7 @@ std::vector<OUString> completeCalcDialogList(const o3tl::sorted_vector<OUString> std::vector<OUString> completeCalcSidebarList(const o3tl::sorted_vector<OUString>& entries); // returns vector of common/shared dialog .ui files not seen that should be seen to have complete coverage std::vector<OUString> completeCommonDialogList(const o3tl::sorted_vector<OUString>& entries, + /*LibreOfficeKitDocumentType*/ int docType, bool linguisticDataAvailable); // returns vector of common/shared sidebar .ui files not seen that should be seen to have complete coverage std::vector<OUString> completeCommonSidebarList(const o3tl::sorted_vector<OUString>& entries); diff --git a/vcl/jsdialog/enabled.cxx b/vcl/jsdialog/enabled.cxx index c720f032e6d9..57a36e817038 100644 --- a/vcl/jsdialog/enabled.cxx +++ b/vcl/jsdialog/enabled.cxx @@ -12,6 +12,8 @@ #include <frozen/bits/elsa_std.h> #include <frozen/unordered_set.h> #include <jsdialog/enabled.hxx> +#include <o3tl/string_view.hxx> +#include <LibreOfficeKit/LibreOfficeKitEnums.h> #include <vector> namespace @@ -758,6 +760,7 @@ std::vector<OUString> completeCommonSidebarList(const o3tl::sorted_vector<OUStri } std::vector<OUString> completeCommonDialogList(const o3tl::sorted_vector<OUString>& entries, + /*LibreOfficeKitDocumentType*/ int docType, bool linguisticDataAvailable) { std::vector<OUString> missing; @@ -774,6 +777,26 @@ std::vector<OUString> completeCommonDialogList(const o3tl::sorted_vector<OUStrin continue; } + if (docType != LOK_DOCTYPE_TEXT) + { + // The 'writerperfect' ones are writer only + if (o3tl::starts_with(entry, u"writerperfect")) + continue; + // The manage changes dialog is only enabled in writer + else if (entry == u"svx/ui/acceptrejectchangesdialog.ui") + continue; + } + + if (docType == LOK_DOCTYPE_SPREADSHEET) + { + // Not supported in Calc + if (entry == u"svx/ui/gotopagedialog.ui" || + entry == u"cui/ui/splitcellsdialog.ui") + { + continue; + } + } + // Skip this one, I don't think it can appear in practice if (entry == u"sfx/ui/cmisinfopage.ui") continue; diff --git a/vcl/source/window/builder.cxx b/vcl/source/window/builder.cxx index 2a634aff4555..01fbbc9c5fe1 100644 --- a/vcl/source/window/builder.cxx +++ b/vcl/source/window/builder.cxx @@ -82,6 +82,7 @@ #include <wizdlg.hxx> #include <tools/svlibrary.h> #include <jsdialog/jsdialogbuilder.hxx> +#include <LibreOfficeKit/LibreOfficeKitEnums.h> #if defined(DISABLE_DYNLOADING) || defined(LINUX) #include <dlfcn.h> @@ -192,7 +193,9 @@ void Application::EnableUICoverage(bool bEnable) ImplGetSVData()->mpDefInst->getUsedUIList().clear(); } -void Application::UICoverageReport(tools::JsonWriter& rJson, bool linguisticDataAvailable) +void Application::UICoverageReport(tools::JsonWriter& rJson, + /*LibreOfficeKitDocumentType*/ int docType, + bool linguisticDataAvailable) { auto resultNode = rJson.startNode("result"); @@ -204,43 +207,44 @@ void Application::UICoverageReport(tools::JsonWriter& rJson, bool linguisticData rJson.putSimpleValue(entry); } - std::vector<OUString> missingWriterDialogUIs = jsdialog::completeWriterDialogList(entries); - rJson.put("CompleteWriterDialogCoverage", missingWriterDialogUIs.empty()); - if (!missingWriterDialogUIs.empty()) + std::string sAppName; + std::vector<OUString> missingAppDialogUIs, missingAppSidebarUIs; + switch (docType) { - auto childrenNode = rJson.startArray("MissingWriterDialogCoverage"); - for (const auto& entry : missingWriterDialogUIs) - rJson.putSimpleValue(entry); - } - - std::vector<OUString> missingWriterSidebarUIs = jsdialog::completeWriterSidebarList(entries); - rJson.put("CompleteWriterSidebarCoverage", missingWriterSidebarUIs.empty()); - if (!missingWriterSidebarUIs.empty()) - { - auto childrenNode = rJson.startArray("MissingWriterSidebarCoverage"); - for (const auto& entry : missingWriterSidebarUIs) - rJson.putSimpleValue(entry); - } + case LOK_DOCTYPE_TEXT: + sAppName = "Writer"; + missingAppDialogUIs = jsdialog::completeWriterDialogList(entries); + missingAppSidebarUIs = jsdialog::completeWriterSidebarList(entries); + break; + case LOK_DOCTYPE_SPREADSHEET: + sAppName = "Calc"; + missingAppDialogUIs = jsdialog::completeCalcDialogList(entries); + missingAppSidebarUIs = jsdialog::completeCalcSidebarList(entries); + break; + default: + sAppName = "Unknown"; + SAL_WARN("vcl", "Impress coverage not implemented"); + break; + }; - std::vector<OUString> missingCalcDialogUIs = jsdialog::completeCalcDialogList(entries); - rJson.put("CompleteCalcDialogCoverage", missingCalcDialogUIs.empty()); - if (!missingCalcDialogUIs.empty()) + rJson.put("Complete" + sAppName + "DialogCoverage", missingAppDialogUIs.empty()); + if (!missingAppDialogUIs.empty()) { - auto childrenNode = rJson.startArray("MissingCalcDialogCoverage"); - for (const auto& entry : missingCalcDialogUIs) + auto childrenNode = rJson.startArray("Missing" + sAppName + "DialogCoverage"); + for (const auto& entry : missingAppDialogUIs) rJson.putSimpleValue(entry); } - std::vector<OUString> missingCalcSidebarUIs = jsdialog::completeCalcSidebarList(entries); - rJson.put("CompleteCalcSidebarCoverage", missingCalcSidebarUIs.empty()); - if (!missingCalcSidebarUIs.empty()) + rJson.put("Complete" + sAppName + "SidebarCoverage", missingAppSidebarUIs.empty()); + if (!missingAppSidebarUIs.empty()) { - auto childrenNode = rJson.startArray("MissingCalcSidebarCoverage"); - for (const auto& entry : missingCalcSidebarUIs) + auto childrenNode = rJson.startArray("Missing" + sAppName + "SidebarCoverage"); + for (const auto& entry : missingAppSidebarUIs) rJson.putSimpleValue(entry); } - std::vector<OUString> missingCommonDialogUIs = jsdialog::completeCommonDialogList(entries, linguisticDataAvailable); + std::vector<OUString> missingCommonDialogUIs = jsdialog::completeCommonDialogList(entries, + docType, linguisticDataAvailable); rJson.put("CompleteCommonDialogCoverage", missingCommonDialogUIs.empty()); if (!missingCommonDialogUIs.empty()) {
