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();
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();
+2 -5
View File
@@ -1212,11 +1212,8 @@ IMPL_STATIC_LINK( SvxScriptErrorDialog, ShowDialog, void*, p, void )
message = CuiResId( RID_CUISTR_ERROR_TITLE );
std::shared_ptr<weld::MessageDialog> 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));
+2 -1
View File
@@ -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();
+2 -1
View File
@@ -1328,7 +1328,8 @@ public:
static std::unique_ptr<weld::Builder>
CreateInterimBuilder(vcl::Window* pParent, const OUString& rUIFile, bool bAllowCycleFocusOut);
static weld::MessageDialog* CreateMessageDialog(weld::Widget* pParent, VclMessageType eMessageType,
static std::unique_ptr<weld::MessageDialog>
CreateMessageDialog(weld::Widget* pParent, VclMessageType eMessageType,
VclButtonsType eButtonType, const OUString& rPrimaryMessage);
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;
}
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();
+2 -3
View File
@@ -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));
+3 -6
View File
@@ -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<weld::MessageDialog> xBox;
xBox.reset(Application::CreateMessageDialog(
pViewFrame ? pViewFrame->GetFrameWeld() : nullptr,
VclMessageType::Error,
VclButtonsType::Ok,
aError));
std::shared_ptr<weld::MessageDialog> xBox = Application::CreateMessageDialog(
pViewFrame ? pViewFrame->GetFrameWeld() : nullptr, VclMessageType::Error,
VclButtonsType::Ok, aError);
xBox->runAsync(xBox, [](sal_Int32 /*nResult*/) {});
}
+2 -2
View File
@@ -2076,8 +2076,8 @@ bool SfxObjectShell::PrepareForSigning(weld::Window* pDialogParent)
if (!bRememberSignature)
{
xQuestion = std::unique_ptr<weld::MessageDialog>(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 ) )
+9 -8
View File
@@ -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);
+3 -4
View File
@@ -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<weld::MessageDialog>
CreateMessageDialog(weld::Widget* pParent, VclMessageType eMessageType,
VclButtonsType eButtonType, const OUString& rPrimaryMessage) override;
virtual std::unique_ptr<weld::ColorChooserDialog>
CreateColorChooserDialog(weld::Window* pParent, vcl::ColorPickerMode eMode) override;
+2 -1
View File
@@ -189,7 +189,8 @@ public:
const OUString& rUIRoot,
const OUString& rUIFile,
bool bAllowCycleFocusOut);
virtual weld::MessageDialog* CreateMessageDialog(weld::Widget* pParent, VclMessageType eMessageType,
virtual std::unique_ptr<weld::MessageDialog>
CreateMessageDialog(weld::Widget* pParent, VclMessageType eMessageType,
VclButtonsType eButtonType, const OUString& rPrimaryMessage);
virtual std::unique_ptr<weld::ColorChooserDialog>
CreateColorChooserDialog(weld::Window* pParent, vcl::ColorPickerMode eMode);
+3 -1
View File
@@ -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<weld::MessageDialog>
CreateMessageDialog(weld::Widget* pParent, VclMessageType eMessageType,
VclButtonsType eButtonType, const OUString& rPrimaryMessage) override;
std::unique_ptr<weld::ColorChooserDialog>
CreateColorChooserDialog(weld::Window* pParent, vcl::ColorPickerMode eMode) 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);
}
weld::MessageDialog* QtInstance::CreateMessageDialog(weld::Widget* pParent,
VclMessageType eMessageType,
VclButtonsType eButtonsType,
const OUString& rPrimaryMessage)
std::unique_ptr<weld::MessageDialog>
QtInstance::CreateMessageDialog(weld::Widget* pParent, VclMessageType eMessageType,
VclButtonsType eButtonsType, const OUString& rPrimaryMessage)
{
SolarMutexGuard g;
if (!IsMainThread())
{
weld::MessageDialog* pDialog = nullptr;
std::unique_ptr<weld::MessageDialog> 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<QtInstanceMessageDialog> pDialog
= std::make_unique<QtInstanceMessageDialog>(pMessageBox);
pDialog->addStandardButtons(eButtonsType);
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);
}
weld::MessageDialog* SalInstance::CreateMessageDialog(weld::Widget* pParent,
VclMessageType eMessageType,
VclButtonsType eButtonsType,
const OUString& rPrimaryMessage)
std::unique_ptr<weld::MessageDialog>
SalInstance::CreateMessageDialog(weld::Widget* pParent, VclMessageType eMessageType,
VclButtonsType eButtonsType, const OUString& rPrimaryMessage)
{
SalInstanceWidget* pParentInstance = dynamic_cast<SalInstanceWidget*>(pParent);
SystemWindow* pParentWidget = pParentInstance ? pParentInstance->getSystemWindow() : nullptr;
VclPtrInstance<MessageDialog> xMessageDialog(pParentWidget, rPrimaryMessage, eMessageType,
eButtonsType);
return new SalInstanceMessageDialog(xMessageDialog, nullptr, true);
return std::make_unique<SalInstanceMessageDialog>(xMessageDialog, nullptr, true);
}
std::unique_ptr<weld::ColorChooserDialog>
+3 -1
View File
@@ -56,6 +56,7 @@
#include <vcl/settings.hxx>
#include <slider.hxx>
#include <vcl/weld/Builder.hxx>
#include <vcl/weld/MessageDialog.hxx>
#include <vcl/weld/weldutils.hxx>
#include <vcl/commandinfoprovider.hxx>
#include <iconview.hxx>
@@ -199,7 +200,8 @@ std::unique_ptr<weld::Builder> Application::CreateInterimBuilder(vcl::Window* pP
bAllowCycleFocusOut);
}
weld::MessageDialog* Application::CreateMessageDialog(weld::Widget* pParent, VclMessageType eMessageType,
std::unique_ptr<weld::MessageDialog>
Application::CreateMessageDialog(weld::Widget* pParent, VclMessageType eMessageType,
VclButtonsType eButtonType, const OUString& 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);
}
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);
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<GtkInstanceMessageDialog>(pMessageDialog, nullptr, true);
}
std::unique_ptr<weld::ColorChooserDialog>