desktop/source/lib/init.cxx       |   30 ++++++++++++++++++------------
 filter/source/pdf/pdfinteract.cxx |    7 +++----
 include/vcl/svapp.hxx             |    2 +-
 vcl/inc/jsdialog/enabled.hxx      |    3 ++-
 vcl/jsdialog/enabled.cxx          |   15 +++++++++++++--
 vcl/source/window/builder.cxx     |    4 ++--
 6 files changed, 39 insertions(+), 22 deletions(-)

New commits:
commit 6ec591f9223825265b230271308daccd85cea4d1
Author:     Caolán McNamara <[email protected]>
AuthorDate: Mon Jan 26 21:18:53 2026 +0000
Commit:     Caolán McNamara <[email protected]>
CommitDate: Fri Feb 13 12:58:13 2026 +0100

    make the PDF export warning dialog async
    
    Change-Id: I19715102a1db7fb4f3f996cb02d1309caa2d0a4a
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/198170
    Tested-by: Jenkins CollaboraOffice <[email protected]>
    Reviewed-by: Miklos Vajna <[email protected]>
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/199325
    Tested-by: Jenkins
    Reviewed-by: Caolán McNamara <[email protected]>

diff --git a/filter/source/pdf/pdfinteract.cxx 
b/filter/source/pdf/pdfinteract.cxx
index 10977eb3689f..ed96b34255e9 100644
--- a/filter/source/pdf/pdfinteract.cxx
+++ b/filter/source/pdf/pdfinteract.cxx
@@ -59,15 +59,14 @@ sal_Bool SAL_CALL 
PDFInteractionHandler::handleInteractionRequest( const Referen
         for (const sal_Int32 nErrorCode : aExc.ErrorCodes)
             
aCodes.insert(static_cast<vcl::pdf::PDFWriter::ErrorCode>(nErrorCode));
 
-        ImplErrorDialog aDlg(Application::GetFrameWeld(m_xParent), aCodes);
-        aDlg.run();
+        auto xDialog = 
std::make_shared<ImplErrorDialog>(Application::GetFrameWeld(m_xParent), aCodes);
+        weld::DialogController::runAsync(xDialog, [](sal_uInt32 /*nResult*/) 
{});
+
         bHandled = true;
     }
     return bHandled;
 }
 
-
-
 OUString SAL_CALL PDFInteractionHandler::getImplementationName()
 {
     return u"com.sun.star.comp.PDF.PDFExportInteractionHandler"_ustr;
commit 8607638c6fd642f076c8ec2333e818ee67a2cec6
Author:     Caolán McNamara <[email protected]>
AuthorDate: Mon Jan 26 12:27:36 2026 +0000
Commit:     Caolán McNamara <[email protected]>
CommitDate: Fri Feb 13 12:58:04 2026 +0100

    handle coverage for a self-build without dictionaries submodule
    
    Change-Id: Ifb22e1132b96f51cd754a57ec4b1dfc08cf7ff8e
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/198142
    Tested-by: Jenkins CollaboraOffice <[email protected]>
    Reviewed-by: Miklos Vajna <[email protected]>
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/199324
    Tested-by: Caolán McNamara <[email protected]>
    Reviewed-by: Caolán McNamara <[email protected]>

diff --git a/desktop/source/lib/init.cxx b/desktop/source/lib/init.cxx
index 091a38376ace..12f024652cf5 100644
--- a/desktop/source/lib/init.cxx
+++ b/desktop/source/lib/init.cxx
@@ -5643,29 +5643,35 @@ static void doc_postUnoCommand(LibreOfficeKitDocument* 
pThis, const char* pComma
     }
     else if (gImpl && aCommand == ".uno:UICoverage")
     {
+        bool report(true), linguisticDataAvailable(true);
+        std::optional<bool> applyTracking;
+
         for (const beans::PropertyValue& rPropValue : aPropertyValuesVector)
         {
             if (rPropValue.Name == "Report")
-            {
-                bool report(true);
                 rPropValue.Value >>= report;
-                if (report)
-                {
-                    tools::JsonWriter aJson;
-                    aJson.put("commandName", aCommand);
-                    aJson.put("success", true);
-                    Application::UICoverageReport(aJson);
-                    
pDocument->mpCallbackFlushHandlers[nView]->queue(LOK_CALLBACK_UNO_COMMAND_RESULT,
 aJson.finishAndGetAsOString());
-                }
-            }
+            else if (rPropValue.Name == "LinguisticDataAvailable")
+                rPropValue.Value >>= linguisticDataAvailable;
             else if (rPropValue.Name == "Track")
             {
                 bool track(false);
                 rPropValue.Value >>= track;
-                Application::EnableUICoverage(track);
+                applyTracking = track;
             }
         }
 
+        if (report)
+        {
+            tools::JsonWriter aJson;
+            aJson.put("commandName", aCommand);
+            aJson.put("success", true);
+            Application::UICoverageReport(aJson, linguisticDataAvailable);
+            
pDocument->mpCallbackFlushHandlers[nView]->queue(LOK_CALLBACK_UNO_COMMAND_RESULT,
 aJson.finishAndGetAsOString());
+        }
+
+        if (applyTracking)
+            Application::EnableUICoverage(*applyTracking);
+
         return;
     }
     else if (gImpl && aCommand == ".uno:ReportWhenIdle")
diff --git a/include/vcl/svapp.hxx b/include/vcl/svapp.hxx
index 07834f05d509..31d46b04cdd3 100644
--- a/include/vcl/svapp.hxx
+++ b/include/vcl/svapp.hxx
@@ -1247,7 +1247,7 @@ public:
     static void                 EnableUICoverage(bool bEnable);
 
     /** Report on what .ui files were used*/
-    static void UICoverageReport(tools::JsonWriter& rJson);
+    static void UICoverageReport(tools::JsonWriter& rJson, bool 
linguisticDataAvailable);
 
     ///@}
 
diff --git a/vcl/inc/jsdialog/enabled.hxx b/vcl/inc/jsdialog/enabled.hxx
index d5a6e13e9b1c..d4347a7e5ebd 100644
--- a/vcl/inc/jsdialog/enabled.hxx
+++ b/vcl/inc/jsdialog/enabled.hxx
@@ -31,7 +31,8 @@ std::vector<OUString> completeWriterDialogList(const 
o3tl::sorted_vector<OUStrin
 // returns vector of writer sidebar .ui files not seen that should be seen to 
have complete coverage
 std::vector<OUString> completeWriterSidebarList(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);
+std::vector<OUString> completeCommonDialogList(const 
o3tl::sorted_vector<OUString>& entries,
+                                               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 f162f00c227a..d333b7d38fb5 100644
--- a/vcl/jsdialog/enabled.cxx
+++ b/vcl/jsdialog/enabled.cxx
@@ -701,12 +701,23 @@ std::vector<OUString> completeCommonSidebarList(const 
o3tl::sorted_vector<OUStri
     return missing;
 }
 
-std::vector<OUString> completeCommonDialogList(const 
o3tl::sorted_vector<OUString>& entries)
+std::vector<OUString> completeCommonDialogList(const 
o3tl::sorted_vector<OUString>& entries,
+                                               bool linguisticDataAvailable)
 {
     std::vector<OUString> missing;
     auto processCategory = [&](const auto& category) {
         for (const auto& entry : category)
         {
+            if (!linguisticDataAvailable && (
+                entry == u"cui/ui/thesaurus.ui" ||
+                entry == u"cui/ui/spellingdialog.ui" ||
+                entry == u"cui/ui/spelloptionsdialog.ui"))
+            {
+                // Skip the dialogs that can't be reached in the absense of
+                // linguistic data.
+                continue;
+            }
+
             // Skip this one, I don't think it can appear in practice
             if (entry == u"sfx/ui/cmisinfopage.ui")
                 continue;
@@ -744,8 +755,8 @@ std::vector<OUString> completeCommonDialogList(const 
o3tl::sorted_vector<OUStrin
                 missing.push_back(sEntry);
         }
     };
-    processCategory(SfxDialogList);
     processCategory(CuiDialogList);
+    processCategory(SfxDialogList);
     return missing;
 }
 
diff --git a/vcl/source/window/builder.cxx b/vcl/source/window/builder.cxx
index de630a1d4cb5..afe6aaf68bb2 100644
--- a/vcl/source/window/builder.cxx
+++ b/vcl/source/window/builder.cxx
@@ -193,7 +193,7 @@ void Application::EnableUICoverage(bool bEnable)
         ImplGetSVData()->mpDefInst->getUsedUIList().clear();
 }
 
-void Application::UICoverageReport(tools::JsonWriter& rJson)
+void Application::UICoverageReport(tools::JsonWriter& rJson, bool 
linguisticDataAvailable)
 {
     auto resultNode = rJson.startNode("result");
 
@@ -223,7 +223,7 @@ void Application::UICoverageReport(tools::JsonWriter& rJson)
             rJson.putSimpleValue(entry);
     }
 
-    std::vector<OUString> missingCommonDialogUIs = 
jsdialog::completeCommonDialogList(entries);
+    std::vector<OUString> missingCommonDialogUIs = 
jsdialog::completeCommonDialogList(entries, linguisticDataAvailable);
     rJson.put("CompleteCommonDialogCoverage", missingCommonDialogUIs.empty());
     if (!missingCommonDialogUIs.empty())
     {

Reply via email to