Kaydet (Commit) ec7f0c0d authored tarafından Caolán McNamara's avatar Caolán McNamara

ensure [Message]Dialog dispose order on direct .ui hackery

Change-Id: I31f190a1232331dd2076cdb8583e2036887f4f9f
Reviewed-on: https://gerrit.libreoffice.org/50441Reviewed-by: 's avatarCaolán McNamara <caolanm@redhat.com>
Tested-by: 's avatarCaolán McNamara <caolanm@redhat.com>
üst 6ef1bc04
...@@ -40,6 +40,7 @@ class MessageDialog; ...@@ -40,6 +40,7 @@ class MessageDialog;
class NumericFormatter; class NumericFormatter;
class PopupMenu; class PopupMenu;
class SalInstanceBuilder; class SalInstanceBuilder;
class ScreenshotTest;
class ScrollBar; class ScrollBar;
class Slider; class Slider;
class DateField; class DateField;
...@@ -486,6 +487,7 @@ protected: ...@@ -486,6 +487,7 @@ protected:
std::unique_ptr<VclBuilder> m_pUIBuilder; std::unique_ptr<VclBuilder> m_pUIBuilder;
friend class ::SalInstanceBuilder; friend class ::SalInstanceBuilder;
friend class ::ScreenshotTest;
}; };
/* /*
......
...@@ -184,19 +184,30 @@ void ScreenshotTest::dumpDialogToPath(const OString& rUIXMLDescription) ...@@ -184,19 +184,30 @@ void ScreenshotTest::dumpDialogToPath(const OString& rUIXMLDescription)
VclPtrInstance<Dialog> pDialog(Application::GetDefDialogParent(), WB_STDDIALOG | WB_SIZEABLE, Dialog::InitFlag::NoParent); VclPtrInstance<Dialog> pDialog(Application::GetDefDialogParent(), WB_STDDIALOG | WB_SIZEABLE, Dialog::InitFlag::NoParent);
{ {
VclBuilder aBuilder(pDialog, VclBuilderContainer::getUIRootDir(), OStringToOUString(rUIXMLDescription, RTL_TEXTENCODING_UTF8)); VclPtr<vcl::Window> aOwnedToplevel;
vcl::Window *pRoot = aBuilder.get_widget_root();
std::unique_ptr<VclBuilder> xBuilder(new VclBuilder(pDialog, VclBuilderContainer::getUIRootDir(), OStringToOUString(rUIXMLDescription, RTL_TEXTENCODING_UTF8)));
vcl::Window *pRoot = xBuilder->get_widget_root();
Dialog *pRealDialog = dynamic_cast<Dialog*>(pRoot); Dialog *pRealDialog = dynamic_cast<Dialog*>(pRoot);
if (!pRealDialog) if (!pRealDialog)
{ {
pRealDialog = pDialog; pRealDialog = pDialog;
} }
else
{
aOwnedToplevel.set(pRoot);
xBuilder->drop_ownership(pRoot);
}
pRealDialog->SetText(utl::ConfigManager::getProductName()); pRealDialog->SetText(utl::ConfigManager::getProductName());
pRealDialog->SetStyle(pDialog->GetStyle() | WB_CLOSEABLE); pRealDialog->SetStyle(pDialog->GetStyle() | WB_CLOSEABLE);
dumpDialogToPath(*pRealDialog); dumpDialogToPath(*pRealDialog);
if (VclBuilderContainer* pOwnedToplevel = dynamic_cast<VclBuilderContainer*>(aOwnedToplevel.get()))
pOwnedToplevel->m_pUIBuilder = std::move(xBuilder);
aOwnedToplevel.disposeAndClear();
} }
pDialog.disposeAndClear(); pDialog.disposeAndClear();
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment