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