desktop/source/lib/init.cxx    |    2 -
 include/vcl/svapp.hxx          |    4 ++
 sc/source/ui/view/tabvwshb.cxx |    7 +++-
 vcl/inc/jsdialog/enabled.hxx   |    1 
 vcl/jsdialog/enabled.cxx       |   23 +++++++++++++++
 vcl/source/window/builder.cxx  |   60 +++++++++++++++++++++--------------------
 6 files changed, 65 insertions(+), 32 deletions(-)

New commits:
commit 250fdd2d70fa30ba39431515f7809686f40c14ad
Author:     Caolán McNamara <[email protected]>
AuthorDate: Fri Feb 6 14:53:52 2026 +0000
Commit:     Caolán McNamara <[email protected]>
CommitDate: Tue Feb 24 09:22:27 2026 +0100

    make calc QrCode dialog async
    
    Change-Id: I8f54f2cc6067db142f287ebbc902c0ce929cdf5c
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/198844
    Tested-by: Jenkins CollaboraOffice <[email protected]>
    Reviewed-by: Miklos Vajna <[email protected]>
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/200113
    Reviewed-by: Caolán McNamara <[email protected]>

diff --git a/sc/source/ui/view/tabvwshb.cxx b/sc/source/ui/view/tabvwshb.cxx
index e8a6a903c25f..4ab6c8ecafd4 100644
--- a/sc/source/ui/view/tabvwshb.cxx
+++ b/sc/source/ui/view/tabvwshb.cxx
@@ -460,9 +460,12 @@ void ScTabViewShell::ExecDrawIns(SfxRequest& rReq)
                 const uno::Reference<frame::XModel> xModel( 
GetViewData().GetDocShell()->GetBaseModel() );
 
                 VclAbstractDialogFactory* pFact = 
VclAbstractDialogFactory::Create();
-                ScopedVclPtr<AbstractQrCodeGenDialog> 
pDialog(pFact->CreateQrCodeGenDialog(
+                VclPtr<AbstractQrCodeGenDialog> 
pDialog(pFact->CreateQrCodeGenDialog(
                     pWin->GetFrameWeld(), xModel, rReq.GetSlot() == 
SID_EDIT_QRCODE));
-                pDialog->Execute();
+                pDialog->StartExecuteAsync([pDialog](sal_Int32) {
+                    pDialog->disposeOnce();
+                });
+
                 break;
             }
 
commit 37af74b8f108e4414ee9c8ef148b24f5ee35c652
Author:     Caolán McNamara <[email protected]>
AuthorDate: Tue Feb 3 16:34:36 2026 +0000
Commit:     Caolán McNamara <[email protected]>
CommitDate: Tue Feb 24 09:22:17 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]>
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/200111
    Tested-by: Jenkins CollaboraOffice <[email protected]>
    Reviewed-by: Caolán McNamara <[email protected]>

diff --git a/desktop/source/lib/init.cxx b/desktop/source/lib/init.cxx
index 8d4e348edc99..d6dca7641d3c 100644
--- a/desktop/source/lib/init.cxx
+++ b/desktop/source/lib/init.cxx
@@ -5666,7 +5666,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 52997670f767..75e6777fedfa 100644
--- a/include/vcl/svapp.hxx
+++ b/include/vcl/svapp.hxx
@@ -1242,7 +1242,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 825e682f5f27..766cadf80ad7 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
@@ -756,6 +758,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;
@@ -772,6 +775,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 80a782b2db95..360ffba07231 100644
--- a/vcl/source/window/builder.cxx
+++ b/vcl/source/window/builder.cxx
@@ -84,6 +84,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>
@@ -194,7 +195,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");
 
@@ -206,43 +209,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