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())
     {

Reply via email to