From 6a023bacb95cbe3e60787e6a86644390ebdf05a7 Mon Sep 17 00:00:00 2001 From: Michael Weghorn Date: Tue, 15 Sep 2026 23:00:06 +0200 Subject: [PATCH] Return std::unique_ptr in Application::CreateMessageDialog The caller of Application::CreateMessageDialog owns the returned message dialog. So far, it was returned by a plain weld::MessageDialog*. Return a unique_ptr instead, to make clear the ownership semantics. (Also adjust SalInstance::CreateMessageDialog accordingly, which is called by Application::CreateMessageDialog and implements the actual logic to create a message dialog.) Adjust callers where needed. Most callers were already using a smart pointer for the returned message dialog anyway. Change-Id: I7c06bb24b611bd67f5af89800adb13bf22dcc6fa Reviewed-on: https://gerrit.libreoffice.org/c/core/+/211013 Reviewed-by: Michael Weghorn Tested-by: Jenkins --- cui/source/dialogs/passwdomdlg.cxx | 12 ++++++------ cui/source/dialogs/scriptdlg.cxx | 7 ++----- dbaccess/source/ui/dlg/sqlmessage.cxx | 3 ++- include/vcl/svapp.hxx | 5 +++-- sc/source/ui/miscdlgs/solvrdlg.cxx | 5 ++--- sc/source/ui/view/tabview2.cxx | 5 ++--- sfx2/source/appl/app.cxx | 9 +++------ sfx2/source/doc/objserv.cxx | 4 ++-- uui/source/iahndl-errorhandler.cxx | 17 +++++++++-------- vcl/inc/qt5/QtInstance.hxx | 7 +++---- vcl/inc/salinst.hxx | 5 +++-- vcl/inc/unx/gtk/gtkinst.hxx | 4 +++- vcl/qt5/QtInstance.cxx | 12 ++++++------ vcl/source/app/salinst.cxx | 9 ++++----- vcl/source/window/builder.cxx | 6 ++++-- vcl/unx/gtk3/gtkinst.cxx | 6 ++++-- 16 files changed, 58 insertions(+), 58 deletions(-) diff --git a/cui/source/dialogs/passwdomdlg.cxx b/cui/source/dialogs/passwdomdlg.cxx index 961114f71f4f..6d13c881ef06 100644 --- a/cui/source/dialogs/passwdomdlg.cxx +++ b/cui/source/dialogs/passwdomdlg.cxx @@ -36,9 +36,9 @@ IMPL_LINK_NOARG(PasswordToOpenModifyDialog, OkBtnClickHdl, weld::Button&, void) m_xPasswdToModifyED->get_text().isEmpty(); if (bInvalidState) { - m_xErrorBox.reset(Application::CreateMessageDialog(m_xDialog.get(), - VclMessageType::Warning, VclButtonsType::Ok, - m_bIsPasswordToModify? m_aInvalidStateForOkButton : m_aInvalidStateForOkButton_v2)); + m_xErrorBox = Application::CreateMessageDialog( + m_xDialog.get(), VclMessageType::Warning, VclButtonsType::Ok, + m_bIsPasswordToModify ? m_aInvalidStateForOkButton : m_aInvalidStateForOkButton_v2); m_xErrorBox->runAsync(m_xErrorBox, [](sal_Int32 /*nResult*/) {}); } else // check for mismatched passwords and password policy @@ -66,9 +66,9 @@ IMPL_LINK_NOARG(PasswordToOpenModifyDialog, OkBtnClickHdl, weld::Button&, void) const int nMismatch = (bToOpenMatch? 0 : 1) + (bToModifyMatch? 0 : 1); if (nMismatch > 0) { - m_xErrorBox.reset(Application::CreateMessageDialog(m_xDialog.get(), - VclMessageType::Warning, VclButtonsType::Ok, - nMismatch == 1 ? m_aOneMismatch : m_aTwoMismatch)); + m_xErrorBox = Application::CreateMessageDialog( + m_xDialog.get(), VclMessageType::Warning, VclButtonsType::Ok, + nMismatch == 1 ? m_aOneMismatch : m_aTwoMismatch); m_xErrorBox->runAsync(m_xErrorBox, [this, bToOpenMatch, nMismatch](sal_Int32 /*nResult*/) { weld::Entry* pEdit = !bToOpenMatch ? m_xPasswdToOpenED.get() : m_xPasswdToModifyED.get(); diff --git a/cui/source/dialogs/scriptdlg.cxx b/cui/source/dialogs/scriptdlg.cxx index 84e12634e80f..f41ad68b54d2 100644 --- a/cui/source/dialogs/scriptdlg.cxx +++ b/cui/source/dialogs/scriptdlg.cxx @@ -1212,11 +1212,8 @@ IMPL_STATIC_LINK( SvxScriptErrorDialog, ShowDialog, void*, p, void ) message = CuiResId( RID_CUISTR_ERROR_TITLE ); std::shared_ptr xBox; - xBox.reset(Application::CreateMessageDialog( - xData->pParent, - VclMessageType::Warning, - VclButtonsType::Ok, - message)); + xBox = Application::CreateMessageDialog(xData->pParent, VclMessageType::Warning, + VclButtonsType::Ok, message); xBox->set_title(CuiResId(RID_CUISTR_ERROR_TITLE)); diff --git a/dbaccess/source/ui/dlg/sqlmessage.cxx b/dbaccess/source/ui/dlg/sqlmessage.cxx index a6217471cb77..4de72b97aceb 100644 --- a/dbaccess/source/ui/dlg/sqlmessage.cxx +++ b/dbaccess/source/ui/dlg/sqlmessage.cxx @@ -525,7 +525,8 @@ void OSQLMessageBox::Construct(weld::Window* pParent, MessBoxStyle _nStyle, Mess break; } - m_xDialog.reset(Application::CreateMessageDialog(pParent, eMessageType, VclButtonsType::NONE, u""_ustr)); + m_xDialog + = Application::CreateMessageDialog(pParent, eMessageType, VclButtonsType::NONE, u""_ustr); m_xDialog->set_title(utl::ConfigManager::getProductName() + " Base"); impl_fillMessages(); diff --git a/include/vcl/svapp.hxx b/include/vcl/svapp.hxx index 4549cb889a92..288758ee70a7 100644 --- a/include/vcl/svapp.hxx +++ b/include/vcl/svapp.hxx @@ -1328,8 +1328,9 @@ public: static std::unique_ptr CreateInterimBuilder(vcl::Window* pParent, const OUString& rUIFile, bool bAllowCycleFocusOut); - static weld::MessageDialog* CreateMessageDialog(weld::Widget* pParent, VclMessageType eMessageType, - VclButtonsType eButtonType, const OUString& rPrimaryMessage); + static std::unique_ptr + CreateMessageDialog(weld::Widget* pParent, VclMessageType eMessageType, + VclButtonsType eButtonType, const OUString& rPrimaryMessage); static weld::Window* GetFrameWeld(const css::uno::Reference& rWindow); diff --git a/sc/source/ui/miscdlgs/solvrdlg.cxx b/sc/source/ui/miscdlgs/solvrdlg.cxx index 557c3fad91ac..eea70b17a17d 100644 --- a/sc/source/ui/miscdlgs/solvrdlg.cxx +++ b/sc/source/ui/miscdlgs/solvrdlg.cxx @@ -177,9 +177,8 @@ void ScSolverDlg::RaiseError( ScSolverErr eError ) break; } - m_xMessageBox.reset(Application::CreateMessageDialog(m_xDialog.get(), - VclMessageType::Warning, VclButtonsType::Ok, - sMessage)); + m_xMessageBox = Application::CreateMessageDialog(m_xDialog.get(), VclMessageType::Warning, + VclButtonsType::Ok, sMessage); m_xMessageBox->runAsync(m_xMessageBox, [this](sal_Int32 /*nResult*/) { m_xEdTargetVal->grab_focus(); m_xMessageBox.reset(); diff --git a/sc/source/ui/view/tabview2.cxx b/sc/source/ui/view/tabview2.cxx index a18f4281446d..f637aaa930a0 100644 --- a/sc/source/ui/view/tabview2.cxx +++ b/sc/source/ui/view/tabview2.cxx @@ -1661,9 +1661,8 @@ void ScTabView::ErrorMessage(TranslateId pGlobStrId) } } - m_xMessageBox.reset(Application::CreateMessageDialog(pParent, - VclMessageType::Info, VclButtonsType::Ok, - ScResId(pGlobStrId))); + m_xMessageBox = Application::CreateMessageDialog(pParent, VclMessageType::Info, + VclButtonsType::Ok, ScResId(pGlobStrId)); if (comphelper::LibreOfficeKit::isActive()) m_xMessageBox->SetInstallLOKNotifierHdl(LINK(this, ScTabView, InstallLOKNotifierHdl)); diff --git a/sfx2/source/appl/app.cxx b/sfx2/source/appl/app.cxx index 9953fb0913e3..360b20fd3d63 100644 --- a/sfx2/source/appl/app.cxx +++ b/sfx2/source/appl/app.cxx @@ -380,12 +380,9 @@ IMPL_STATIC_LINK( SfxApplication, GlobalBasicErrorHdl_Impl, StarBASIC*, pStarBas if (ErrorStringFactory::CreateString(nErr, aError)) { const SfxViewFrame* pViewFrame = SfxViewFrame::Current(); - std::shared_ptr xBox; - xBox.reset(Application::CreateMessageDialog( - pViewFrame ? pViewFrame->GetFrameWeld() : nullptr, - VclMessageType::Error, - VclButtonsType::Ok, - aError)); + std::shared_ptr xBox = Application::CreateMessageDialog( + pViewFrame ? pViewFrame->GetFrameWeld() : nullptr, VclMessageType::Error, + VclButtonsType::Ok, aError); xBox->runAsync(xBox, [](sal_Int32 /*nResult*/) {}); } diff --git a/sfx2/source/doc/objserv.cxx b/sfx2/source/doc/objserv.cxx index b8056528d5bb..081237724c03 100644 --- a/sfx2/source/doc/objserv.cxx +++ b/sfx2/source/doc/objserv.cxx @@ -2076,8 +2076,8 @@ bool SfxObjectShell::PrepareForSigning(weld::Window* pDialogParent) if (!bRememberSignature) { - xQuestion = std::unique_ptr(Application::CreateMessageDialog(pDialogParent, - VclMessageType::Question, VclButtonsType::YesNo, sQuestion)); + xQuestion = Application::CreateMessageDialog( + pDialogParent, VclMessageType::Question, VclButtonsType::YesNo, sQuestion); } if ( bRememberSignature || ( xQuestion != nullptr && xQuestion->run() == RET_YES ) ) diff --git a/uui/source/iahndl-errorhandler.cxx b/uui/source/iahndl-errorhandler.cxx index 1e501e802bf3..8aa1821e456a 100644 --- a/uui/source/iahndl-errorhandler.cxx +++ b/uui/source/iahndl-errorhandler.cxx @@ -76,20 +76,21 @@ executeErrorDialog( switch (eClassification) { case task::InteractionClassification_ERROR: - xBox.reset(Application::CreateMessageDialog(pParent, - VclMessageType::Error, VclButtonsType::NONE, aText.makeStringAndClear())); + xBox = Application::CreateMessageDialog( + pParent, VclMessageType::Error, VclButtonsType::NONE, aText.makeStringAndClear()); break; case task::InteractionClassification_WARNING: - xBox.reset(Application::CreateMessageDialog(pParent, - VclMessageType::Warning, VclButtonsType::NONE, aText.makeStringAndClear())); + xBox = Application::CreateMessageDialog( + pParent, VclMessageType::Warning, VclButtonsType::NONE, aText.makeStringAndClear()); break; case task::InteractionClassification_INFO: - xBox.reset(Application::CreateMessageDialog(pParent, - VclMessageType::Info, VclButtonsType::NONE, aText.makeStringAndClear())); + xBox = Application::CreateMessageDialog( + pParent, VclMessageType::Info, VclButtonsType::NONE, aText.makeStringAndClear()); break; case task::InteractionClassification_QUERY: - xBox.reset(Application::CreateMessageDialog(pParent, - VclMessageType::Question, VclButtonsType::NONE, aText.makeStringAndClear())); + xBox = Application::CreateMessageDialog(pParent, VclMessageType::Question, + VclButtonsType::NONE, + aText.makeStringAndClear()); break; default: assert(false); diff --git a/vcl/inc/qt5/QtInstance.hxx b/vcl/inc/qt5/QtInstance.hxx index 7d129f6d74dd..ac599297f15d 100644 --- a/vcl/inc/qt5/QtInstance.hxx +++ b/vcl/inc/qt5/QtInstance.hxx @@ -190,10 +190,9 @@ public: const OUString& rUIRoot, const OUString& rUIFile, bool bAllowCycleFocusOut) override; - virtual weld::MessageDialog* CreateMessageDialog(weld::Widget* pParent, - VclMessageType eMessageType, - VclButtonsType eButtonType, - const OUString& rPrimaryMessage) override; + virtual std::unique_ptr + CreateMessageDialog(weld::Widget* pParent, VclMessageType eMessageType, + VclButtonsType eButtonType, const OUString& rPrimaryMessage) override; virtual std::unique_ptr CreateColorChooserDialog(weld::Window* pParent, vcl::ColorPickerMode eMode) override; diff --git a/vcl/inc/salinst.hxx b/vcl/inc/salinst.hxx index 06807f2c36ca..79b3057056bd 100644 --- a/vcl/inc/salinst.hxx +++ b/vcl/inc/salinst.hxx @@ -189,8 +189,9 @@ public: const OUString& rUIRoot, const OUString& rUIFile, bool bAllowCycleFocusOut); - virtual weld::MessageDialog* CreateMessageDialog(weld::Widget* pParent, VclMessageType eMessageType, - VclButtonsType eButtonType, const OUString& rPrimaryMessage); + virtual std::unique_ptr + CreateMessageDialog(weld::Widget* pParent, VclMessageType eMessageType, + VclButtonsType eButtonType, const OUString& rPrimaryMessage); virtual std::unique_ptr CreateColorChooserDialog(weld::Window* pParent, vcl::ColorPickerMode eMode); virtual weld::Window* GetFrameWeld(const css::uno::Reference& rWindow); diff --git a/vcl/inc/unx/gtk/gtkinst.hxx b/vcl/inc/unx/gtk/gtkinst.hxx index d7a8b8f66e9b..1c6d9e24970d 100644 --- a/vcl/inc/unx/gtk/gtkinst.hxx +++ b/vcl/inc/unx/gtk/gtkinst.hxx @@ -285,7 +285,9 @@ public: const OUString& rUIRoot, const OUString& rUIFile, bool bAllowCycleFocusOut) override; - virtual weld::MessageDialog* CreateMessageDialog(weld::Widget* pParent, VclMessageType eMessageType, VclButtonsType eButtonType, const OUString &rPrimaryMessage) override; + virtual std::unique_ptr + CreateMessageDialog(weld::Widget* pParent, VclMessageType eMessageType, + VclButtonsType eButtonType, const OUString& rPrimaryMessage) override; std::unique_ptr CreateColorChooserDialog(weld::Window* pParent, vcl::ColorPickerMode eMode) override; virtual weld::Window* GetFrameWeld(const css::uno::Reference& rWindow) override; diff --git a/vcl/qt5/QtInstance.cxx b/vcl/qt5/QtInstance.cxx index 51c63100b5a9..09fcbcc6764a 100644 --- a/vcl/qt5/QtInstance.cxx +++ b/vcl/qt5/QtInstance.cxx @@ -944,15 +944,14 @@ std::unique_ptr QtInstance::CreateInterimBuilder(vcl::Window* pPa return std::make_unique(pWidget, rUIRoot, rUIFile); } -weld::MessageDialog* QtInstance::CreateMessageDialog(weld::Widget* pParent, - VclMessageType eMessageType, - VclButtonsType eButtonsType, - const OUString& rPrimaryMessage) +std::unique_ptr +QtInstance::CreateMessageDialog(weld::Widget* pParent, VclMessageType eMessageType, + VclButtonsType eButtonsType, const OUString& rPrimaryMessage) { SolarMutexGuard g; if (!IsMainThread()) { - weld::MessageDialog* pDialog = nullptr; + std::unique_ptr pDialog; RunInMainThread([&] { pDialog = CreateMessageDialog(pParent, eMessageType, eButtonsType, rPrimaryMessage); }); @@ -971,7 +970,8 @@ weld::MessageDialog* QtInstance::CreateMessageDialog(weld::Widget* pParent, pMessageBox->setText(toQString(rPrimaryMessage)); pMessageBox->setIcon(vclMessageTypeToQtIcon(eMessageType)); pMessageBox->setWindowTitle(toQString(GetStandardMessageDialogText(eMessageType))); - QtInstanceMessageDialog* pDialog = new QtInstanceMessageDialog(pMessageBox); + std::unique_ptr pDialog + = std::make_unique(pMessageBox); pDialog->addStandardButtons(eButtonsType); return pDialog; } diff --git a/vcl/source/app/salinst.cxx b/vcl/source/app/salinst.cxx index 88740e39c9b2..eef2587b95da 100644 --- a/vcl/source/app/salinst.cxx +++ b/vcl/source/app/salinst.cxx @@ -92,16 +92,15 @@ std::unique_ptr SalInstance::CreateInterimBuilder(vcl::Window* pP return std::make_unique(pParent, rUIRoot, rUIFile); } -weld::MessageDialog* SalInstance::CreateMessageDialog(weld::Widget* pParent, - VclMessageType eMessageType, - VclButtonsType eButtonsType, - const OUString& rPrimaryMessage) +std::unique_ptr +SalInstance::CreateMessageDialog(weld::Widget* pParent, VclMessageType eMessageType, + VclButtonsType eButtonsType, const OUString& rPrimaryMessage) { SalInstanceWidget* pParentInstance = dynamic_cast(pParent); SystemWindow* pParentWidget = pParentInstance ? pParentInstance->getSystemWindow() : nullptr; VclPtrInstance xMessageDialog(pParentWidget, rPrimaryMessage, eMessageType, eButtonsType); - return new SalInstanceMessageDialog(xMessageDialog, nullptr, true); + return std::make_unique(xMessageDialog, nullptr, true); } std::unique_ptr diff --git a/vcl/source/window/builder.cxx b/vcl/source/window/builder.cxx index 9862030f912f..706f2ecb8b1d 100644 --- a/vcl/source/window/builder.cxx +++ b/vcl/source/window/builder.cxx @@ -56,6 +56,7 @@ #include #include #include +#include #include #include #include @@ -199,8 +200,9 @@ std::unique_ptr Application::CreateInterimBuilder(vcl::Window* pP bAllowCycleFocusOut); } -weld::MessageDialog* Application::CreateMessageDialog(weld::Widget* pParent, VclMessageType eMessageType, - VclButtonsType eButtonType, const OUString& rPrimaryMessage) +std::unique_ptr +Application::CreateMessageDialog(weld::Widget* pParent, VclMessageType eMessageType, + VclButtonsType eButtonType, const OUString& rPrimaryMessage) { return GetSalInstance()->CreateMessageDialog(pParent, eMessageType, eButtonType, rPrimaryMessage); } diff --git a/vcl/unx/gtk3/gtkinst.cxx b/vcl/unx/gtk3/gtkinst.cxx index d2fe26d3cb86..e31dc40ac10f 100644 --- a/vcl/unx/gtk3/gtkinst.cxx +++ b/vcl/unx/gtk3/gtkinst.cxx @@ -24296,14 +24296,16 @@ std::unique_ptr GtkInstance::CreateInterimBuilder(vcl::Window* pP return std::make_unique(pWindow, rUIRoot, rUIFile, xEmbedWindow.get(), bAllowCycleFocusOut); } -weld::MessageDialog* GtkInstance::CreateMessageDialog(weld::Widget* pParent, VclMessageType eMessageType, VclButtonsType eButtonsType, const OUString &rPrimaryMessage) +std::unique_ptr +GtkInstance::CreateMessageDialog(weld::Widget* pParent, VclMessageType eMessageType, + VclButtonsType eButtonsType, const OUString& rPrimaryMessage) { GtkInstanceWidget* pParentInstance = dynamic_cast(pParent); GtkWindow* pParentWindow = pParentInstance ? pParentInstance->getWindow() : nullptr; GtkMessageDialog* pMessageDialog = GTK_MESSAGE_DIALOG(gtk_message_dialog_new(pParentWindow, GTK_DIALOG_MODAL, VclToGtk(eMessageType), VclToGtk(eButtonsType), "%s", OUStringToOString(rPrimaryMessage, RTL_TEXTENCODING_UTF8).getStr())); - return new GtkInstanceMessageDialog(pMessageDialog, nullptr, true); + return std::make_unique(pMessageDialog, nullptr, true); } std::unique_ptr