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 <m.weghorn@posteo.de>
Tested-by: Jenkins
This commit is contained in:
Michael Weghorn
2026-09-16 10:35:19 +02:00
parent 508dfcabb8
commit 6a023bacb9
16 changed files with 58 additions and 58 deletions
+6 -6
View File
@@ -36,9 +36,9 @@ IMPL_LINK_NOARG(PasswordToOpenModifyDialog, OkBtnClickHdl, weld::Button&, void)
m_xPasswdToModifyED->get_text().isEmpty(); m_xPasswdToModifyED->get_text().isEmpty();
if (bInvalidState) if (bInvalidState)
{ {
m_xErrorBox.reset(Application::CreateMessageDialog(m_xDialog.get(), m_xErrorBox = Application::CreateMessageDialog(
VclMessageType::Warning, VclButtonsType::Ok, m_xDialog.get(), VclMessageType::Warning, VclButtonsType::Ok,
m_bIsPasswordToModify? m_aInvalidStateForOkButton : m_aInvalidStateForOkButton_v2)); m_bIsPasswordToModify ? m_aInvalidStateForOkButton : m_aInvalidStateForOkButton_v2);
m_xErrorBox->runAsync(m_xErrorBox, [](sal_Int32 /*nResult*/) {}); m_xErrorBox->runAsync(m_xErrorBox, [](sal_Int32 /*nResult*/) {});
} }
else // check for mismatched passwords and password policy 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); const int nMismatch = (bToOpenMatch? 0 : 1) + (bToModifyMatch? 0 : 1);
if (nMismatch > 0) if (nMismatch > 0)
{ {
m_xErrorBox.reset(Application::CreateMessageDialog(m_xDialog.get(), m_xErrorBox = Application::CreateMessageDialog(
VclMessageType::Warning, VclButtonsType::Ok, m_xDialog.get(), VclMessageType::Warning, VclButtonsType::Ok,
nMismatch == 1 ? m_aOneMismatch : m_aTwoMismatch)); nMismatch == 1 ? m_aOneMismatch : m_aTwoMismatch);
m_xErrorBox->runAsync(m_xErrorBox, [this, bToOpenMatch, nMismatch](sal_Int32 /*nResult*/) m_xErrorBox->runAsync(m_xErrorBox, [this, bToOpenMatch, nMismatch](sal_Int32 /*nResult*/)
{ {
weld::Entry* pEdit = !bToOpenMatch ? m_xPasswdToOpenED.get() : m_xPasswdToModifyED.get(); weld::Entry* pEdit = !bToOpenMatch ? m_xPasswdToOpenED.get() : m_xPasswdToModifyED.get();
+2 -5
View File
@@ -1212,11 +1212,8 @@ IMPL_STATIC_LINK( SvxScriptErrorDialog, ShowDialog, void*, p, void )
message = CuiResId( RID_CUISTR_ERROR_TITLE ); message = CuiResId( RID_CUISTR_ERROR_TITLE );
std::shared_ptr<weld::MessageDialog> xBox; std::shared_ptr<weld::MessageDialog> xBox;
xBox.reset(Application::CreateMessageDialog( xBox = Application::CreateMessageDialog(xData->pParent, VclMessageType::Warning,
xData->pParent, VclButtonsType::Ok, message);
VclMessageType::Warning,
VclButtonsType::Ok,
message));
xBox->set_title(CuiResId(RID_CUISTR_ERROR_TITLE)); xBox->set_title(CuiResId(RID_CUISTR_ERROR_TITLE));
+2 -1
View File
@@ -525,7 +525,8 @@ void OSQLMessageBox::Construct(weld::Window* pParent, MessBoxStyle _nStyle, Mess
break; 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"); m_xDialog->set_title(utl::ConfigManager::getProductName() + " Base");
impl_fillMessages(); impl_fillMessages();
+3 -2
View File
@@ -1328,8 +1328,9 @@ public:
static std::unique_ptr<weld::Builder> static std::unique_ptr<weld::Builder>
CreateInterimBuilder(vcl::Window* pParent, const OUString& rUIFile, bool bAllowCycleFocusOut); CreateInterimBuilder(vcl::Window* pParent, const OUString& rUIFile, bool bAllowCycleFocusOut);
static weld::MessageDialog* CreateMessageDialog(weld::Widget* pParent, VclMessageType eMessageType, static std::unique_ptr<weld::MessageDialog>
VclButtonsType eButtonType, const OUString& rPrimaryMessage); CreateMessageDialog(weld::Widget* pParent, VclMessageType eMessageType,
VclButtonsType eButtonType, const OUString& rPrimaryMessage);
static weld::Window* GetFrameWeld(const css::uno::Reference<css::awt::XWindow>& rWindow); static weld::Window* GetFrameWeld(const css::uno::Reference<css::awt::XWindow>& rWindow);
+2 -3
View File
@@ -177,9 +177,8 @@ void ScSolverDlg::RaiseError( ScSolverErr eError )
break; break;
} }
m_xMessageBox.reset(Application::CreateMessageDialog(m_xDialog.get(), m_xMessageBox = Application::CreateMessageDialog(m_xDialog.get(), VclMessageType::Warning,
VclMessageType::Warning, VclButtonsType::Ok, VclButtonsType::Ok, sMessage);
sMessage));
m_xMessageBox->runAsync(m_xMessageBox, [this](sal_Int32 /*nResult*/) { m_xMessageBox->runAsync(m_xMessageBox, [this](sal_Int32 /*nResult*/) {
m_xEdTargetVal->grab_focus(); m_xEdTargetVal->grab_focus();
m_xMessageBox.reset(); m_xMessageBox.reset();
+2 -3
View File
@@ -1661,9 +1661,8 @@ void ScTabView::ErrorMessage(TranslateId pGlobStrId)
} }
} }
m_xMessageBox.reset(Application::CreateMessageDialog(pParent, m_xMessageBox = Application::CreateMessageDialog(pParent, VclMessageType::Info,
VclMessageType::Info, VclButtonsType::Ok, VclButtonsType::Ok, ScResId(pGlobStrId));
ScResId(pGlobStrId)));
if (comphelper::LibreOfficeKit::isActive()) if (comphelper::LibreOfficeKit::isActive())
m_xMessageBox->SetInstallLOKNotifierHdl(LINK(this, ScTabView, InstallLOKNotifierHdl)); m_xMessageBox->SetInstallLOKNotifierHdl(LINK(this, ScTabView, InstallLOKNotifierHdl));
+3 -6
View File
@@ -380,12 +380,9 @@ IMPL_STATIC_LINK( SfxApplication, GlobalBasicErrorHdl_Impl, StarBASIC*, pStarBas
if (ErrorStringFactory::CreateString(nErr, aError)) if (ErrorStringFactory::CreateString(nErr, aError))
{ {
const SfxViewFrame* pViewFrame = SfxViewFrame::Current(); const SfxViewFrame* pViewFrame = SfxViewFrame::Current();
std::shared_ptr<weld::MessageDialog> xBox; std::shared_ptr<weld::MessageDialog> xBox = Application::CreateMessageDialog(
xBox.reset(Application::CreateMessageDialog( pViewFrame ? pViewFrame->GetFrameWeld() : nullptr, VclMessageType::Error,
pViewFrame ? pViewFrame->GetFrameWeld() : nullptr, VclButtonsType::Ok, aError);
VclMessageType::Error,
VclButtonsType::Ok,
aError));
xBox->runAsync(xBox, [](sal_Int32 /*nResult*/) {}); xBox->runAsync(xBox, [](sal_Int32 /*nResult*/) {});
} }
+2 -2
View File
@@ -2076,8 +2076,8 @@ bool SfxObjectShell::PrepareForSigning(weld::Window* pDialogParent)
if (!bRememberSignature) if (!bRememberSignature)
{ {
xQuestion = std::unique_ptr<weld::MessageDialog>(Application::CreateMessageDialog(pDialogParent, xQuestion = Application::CreateMessageDialog(
VclMessageType::Question, VclButtonsType::YesNo, sQuestion)); pDialogParent, VclMessageType::Question, VclButtonsType::YesNo, sQuestion);
} }
if ( bRememberSignature || ( xQuestion != nullptr && xQuestion->run() == RET_YES ) ) if ( bRememberSignature || ( xQuestion != nullptr && xQuestion->run() == RET_YES ) )
+9 -8
View File
@@ -76,20 +76,21 @@ executeErrorDialog(
switch (eClassification) switch (eClassification)
{ {
case task::InteractionClassification_ERROR: case task::InteractionClassification_ERROR:
xBox.reset(Application::CreateMessageDialog(pParent, xBox = Application::CreateMessageDialog(
VclMessageType::Error, VclButtonsType::NONE, aText.makeStringAndClear())); pParent, VclMessageType::Error, VclButtonsType::NONE, aText.makeStringAndClear());
break; break;
case task::InteractionClassification_WARNING: case task::InteractionClassification_WARNING:
xBox.reset(Application::CreateMessageDialog(pParent, xBox = Application::CreateMessageDialog(
VclMessageType::Warning, VclButtonsType::NONE, aText.makeStringAndClear())); pParent, VclMessageType::Warning, VclButtonsType::NONE, aText.makeStringAndClear());
break; break;
case task::InteractionClassification_INFO: case task::InteractionClassification_INFO:
xBox.reset(Application::CreateMessageDialog(pParent, xBox = Application::CreateMessageDialog(
VclMessageType::Info, VclButtonsType::NONE, aText.makeStringAndClear())); pParent, VclMessageType::Info, VclButtonsType::NONE, aText.makeStringAndClear());
break; break;
case task::InteractionClassification_QUERY: case task::InteractionClassification_QUERY:
xBox.reset(Application::CreateMessageDialog(pParent, xBox = Application::CreateMessageDialog(pParent, VclMessageType::Question,
VclMessageType::Question, VclButtonsType::NONE, aText.makeStringAndClear())); VclButtonsType::NONE,
aText.makeStringAndClear());
break; break;
default: default:
assert(false); assert(false);
+3 -4
View File
@@ -190,10 +190,9 @@ public:
const OUString& rUIRoot, const OUString& rUIRoot,
const OUString& rUIFile, const OUString& rUIFile,
bool bAllowCycleFocusOut) override; bool bAllowCycleFocusOut) override;
virtual weld::MessageDialog* CreateMessageDialog(weld::Widget* pParent, virtual std::unique_ptr<weld::MessageDialog>
VclMessageType eMessageType, CreateMessageDialog(weld::Widget* pParent, VclMessageType eMessageType,
VclButtonsType eButtonType, VclButtonsType eButtonType, const OUString& rPrimaryMessage) override;
const OUString& rPrimaryMessage) override;
virtual std::unique_ptr<weld::ColorChooserDialog> virtual std::unique_ptr<weld::ColorChooserDialog>
CreateColorChooserDialog(weld::Window* pParent, vcl::ColorPickerMode eMode) override; CreateColorChooserDialog(weld::Window* pParent, vcl::ColorPickerMode eMode) override;
+3 -2
View File
@@ -189,8 +189,9 @@ public:
const OUString& rUIRoot, const OUString& rUIRoot,
const OUString& rUIFile, const OUString& rUIFile,
bool bAllowCycleFocusOut); bool bAllowCycleFocusOut);
virtual weld::MessageDialog* CreateMessageDialog(weld::Widget* pParent, VclMessageType eMessageType, virtual std::unique_ptr<weld::MessageDialog>
VclButtonsType eButtonType, const OUString& rPrimaryMessage); CreateMessageDialog(weld::Widget* pParent, VclMessageType eMessageType,
VclButtonsType eButtonType, const OUString& rPrimaryMessage);
virtual std::unique_ptr<weld::ColorChooserDialog> virtual std::unique_ptr<weld::ColorChooserDialog>
CreateColorChooserDialog(weld::Window* pParent, vcl::ColorPickerMode eMode); CreateColorChooserDialog(weld::Window* pParent, vcl::ColorPickerMode eMode);
virtual weld::Window* GetFrameWeld(const css::uno::Reference<css::awt::XWindow>& rWindow); virtual weld::Window* GetFrameWeld(const css::uno::Reference<css::awt::XWindow>& rWindow);
+3 -1
View File
@@ -285,7 +285,9 @@ public:
const OUString& rUIRoot, const OUString& rUIRoot,
const OUString& rUIFile, const OUString& rUIFile,
bool bAllowCycleFocusOut) override; bool bAllowCycleFocusOut) override;
virtual weld::MessageDialog* CreateMessageDialog(weld::Widget* pParent, VclMessageType eMessageType, VclButtonsType eButtonType, const OUString &rPrimaryMessage) override; virtual std::unique_ptr<weld::MessageDialog>
CreateMessageDialog(weld::Widget* pParent, VclMessageType eMessageType,
VclButtonsType eButtonType, const OUString& rPrimaryMessage) override;
std::unique_ptr<weld::ColorChooserDialog> std::unique_ptr<weld::ColorChooserDialog>
CreateColorChooserDialog(weld::Window* pParent, vcl::ColorPickerMode eMode) override; CreateColorChooserDialog(weld::Window* pParent, vcl::ColorPickerMode eMode) override;
virtual weld::Window* GetFrameWeld(const css::uno::Reference<css::awt::XWindow>& rWindow) override; virtual weld::Window* GetFrameWeld(const css::uno::Reference<css::awt::XWindow>& rWindow) override;
+6 -6
View File
@@ -944,15 +944,14 @@ std::unique_ptr<weld::Builder> QtInstance::CreateInterimBuilder(vcl::Window* pPa
return std::make_unique<QtInstanceBuilder>(pWidget, rUIRoot, rUIFile); return std::make_unique<QtInstanceBuilder>(pWidget, rUIRoot, rUIFile);
} }
weld::MessageDialog* QtInstance::CreateMessageDialog(weld::Widget* pParent, std::unique_ptr<weld::MessageDialog>
VclMessageType eMessageType, QtInstance::CreateMessageDialog(weld::Widget* pParent, VclMessageType eMessageType,
VclButtonsType eButtonsType, VclButtonsType eButtonsType, const OUString& rPrimaryMessage)
const OUString& rPrimaryMessage)
{ {
SolarMutexGuard g; SolarMutexGuard g;
if (!IsMainThread()) if (!IsMainThread())
{ {
weld::MessageDialog* pDialog = nullptr; std::unique_ptr<weld::MessageDialog> pDialog;
RunInMainThread([&] { RunInMainThread([&] {
pDialog = CreateMessageDialog(pParent, eMessageType, eButtonsType, rPrimaryMessage); pDialog = CreateMessageDialog(pParent, eMessageType, eButtonsType, rPrimaryMessage);
}); });
@@ -971,7 +970,8 @@ weld::MessageDialog* QtInstance::CreateMessageDialog(weld::Widget* pParent,
pMessageBox->setText(toQString(rPrimaryMessage)); pMessageBox->setText(toQString(rPrimaryMessage));
pMessageBox->setIcon(vclMessageTypeToQtIcon(eMessageType)); pMessageBox->setIcon(vclMessageTypeToQtIcon(eMessageType));
pMessageBox->setWindowTitle(toQString(GetStandardMessageDialogText(eMessageType))); pMessageBox->setWindowTitle(toQString(GetStandardMessageDialogText(eMessageType)));
QtInstanceMessageDialog* pDialog = new QtInstanceMessageDialog(pMessageBox); std::unique_ptr<QtInstanceMessageDialog> pDialog
= std::make_unique<QtInstanceMessageDialog>(pMessageBox);
pDialog->addStandardButtons(eButtonsType); pDialog->addStandardButtons(eButtonsType);
return pDialog; return pDialog;
} }
+4 -5
View File
@@ -92,16 +92,15 @@ std::unique_ptr<weld::Builder> SalInstance::CreateInterimBuilder(vcl::Window* pP
return std::make_unique<SalInstanceBuilder>(pParent, rUIRoot, rUIFile); return std::make_unique<SalInstanceBuilder>(pParent, rUIRoot, rUIFile);
} }
weld::MessageDialog* SalInstance::CreateMessageDialog(weld::Widget* pParent, std::unique_ptr<weld::MessageDialog>
VclMessageType eMessageType, SalInstance::CreateMessageDialog(weld::Widget* pParent, VclMessageType eMessageType,
VclButtonsType eButtonsType, VclButtonsType eButtonsType, const OUString& rPrimaryMessage)
const OUString& rPrimaryMessage)
{ {
SalInstanceWidget* pParentInstance = dynamic_cast<SalInstanceWidget*>(pParent); SalInstanceWidget* pParentInstance = dynamic_cast<SalInstanceWidget*>(pParent);
SystemWindow* pParentWidget = pParentInstance ? pParentInstance->getSystemWindow() : nullptr; SystemWindow* pParentWidget = pParentInstance ? pParentInstance->getSystemWindow() : nullptr;
VclPtrInstance<MessageDialog> xMessageDialog(pParentWidget, rPrimaryMessage, eMessageType, VclPtrInstance<MessageDialog> xMessageDialog(pParentWidget, rPrimaryMessage, eMessageType,
eButtonsType); eButtonsType);
return new SalInstanceMessageDialog(xMessageDialog, nullptr, true); return std::make_unique<SalInstanceMessageDialog>(xMessageDialog, nullptr, true);
} }
std::unique_ptr<weld::ColorChooserDialog> std::unique_ptr<weld::ColorChooserDialog>
+4 -2
View File
@@ -56,6 +56,7 @@
#include <vcl/settings.hxx> #include <vcl/settings.hxx>
#include <slider.hxx> #include <slider.hxx>
#include <vcl/weld/Builder.hxx> #include <vcl/weld/Builder.hxx>
#include <vcl/weld/MessageDialog.hxx>
#include <vcl/weld/weldutils.hxx> #include <vcl/weld/weldutils.hxx>
#include <vcl/commandinfoprovider.hxx> #include <vcl/commandinfoprovider.hxx>
#include <iconview.hxx> #include <iconview.hxx>
@@ -199,8 +200,9 @@ std::unique_ptr<weld::Builder> Application::CreateInterimBuilder(vcl::Window* pP
bAllowCycleFocusOut); bAllowCycleFocusOut);
} }
weld::MessageDialog* Application::CreateMessageDialog(weld::Widget* pParent, VclMessageType eMessageType, std::unique_ptr<weld::MessageDialog>
VclButtonsType eButtonType, const OUString& rPrimaryMessage) Application::CreateMessageDialog(weld::Widget* pParent, VclMessageType eMessageType,
VclButtonsType eButtonType, const OUString& rPrimaryMessage)
{ {
return GetSalInstance()->CreateMessageDialog(pParent, eMessageType, eButtonType, rPrimaryMessage); return GetSalInstance()->CreateMessageDialog(pParent, eMessageType, eButtonType, rPrimaryMessage);
} }
+4 -2
View File
@@ -24296,14 +24296,16 @@ std::unique_ptr<weld::Builder> GtkInstance::CreateInterimBuilder(vcl::Window* pP
return std::make_unique<GtkInstanceBuilder>(pWindow, rUIRoot, rUIFile, xEmbedWindow.get(), bAllowCycleFocusOut); return std::make_unique<GtkInstanceBuilder>(pWindow, rUIRoot, rUIFile, xEmbedWindow.get(), bAllowCycleFocusOut);
} }
weld::MessageDialog* GtkInstance::CreateMessageDialog(weld::Widget* pParent, VclMessageType eMessageType, VclButtonsType eButtonsType, const OUString &rPrimaryMessage) std::unique_ptr<weld::MessageDialog>
GtkInstance::CreateMessageDialog(weld::Widget* pParent, VclMessageType eMessageType,
VclButtonsType eButtonsType, const OUString& rPrimaryMessage)
{ {
GtkInstanceWidget* pParentInstance = dynamic_cast<GtkInstanceWidget*>(pParent); GtkInstanceWidget* pParentInstance = dynamic_cast<GtkInstanceWidget*>(pParent);
GtkWindow* pParentWindow = pParentInstance ? pParentInstance->getWindow() : nullptr; GtkWindow* pParentWindow = pParentInstance ? pParentInstance->getWindow() : nullptr;
GtkMessageDialog* pMessageDialog = GTK_MESSAGE_DIALOG(gtk_message_dialog_new(pParentWindow, GTK_DIALOG_MODAL, GtkMessageDialog* pMessageDialog = GTK_MESSAGE_DIALOG(gtk_message_dialog_new(pParentWindow, GTK_DIALOG_MODAL,
VclToGtk(eMessageType), VclToGtk(eButtonsType), "%s", VclToGtk(eMessageType), VclToGtk(eButtonsType), "%s",
OUStringToOString(rPrimaryMessage, RTL_TEXTENCODING_UTF8).getStr())); OUStringToOString(rPrimaryMessage, RTL_TEXTENCODING_UTF8).getStr()));
return new GtkInstanceMessageDialog(pMessageDialog, nullptr, true); return std::make_unique<GtkInstanceMessageDialog>(pMessageDialog, nullptr, true);
} }
std::unique_ptr<weld::ColorChooserDialog> std::unique_ptr<weld::ColorChooserDialog>