diff options
author | Caolán McNamara <caolanm@redhat.com> | 2012-10-03 13:03:49 +0100 |
---|---|---|
committer | Caolán McNamara <caolanm@redhat.com> | 2012-10-04 12:49:26 +0100 |
commit | ddd0e56cd787c2f86e9a154cbb0b4ad09ee40f80 (patch) | |
tree | 731d348d9bc82917109e8bb0b74d20d40f8ed8d7 /vcl/source/window/builder.cxx | |
parent | 7263bfec9a6511fc8f5c79135a7c853156560755 (diff) |
handle children of deferred dialog better
Change-Id: I86f0a23408c031a99a31cd309defec519a2e91ec
Diffstat (limited to 'vcl/source/window/builder.cxx')
-rw-r--r-- | vcl/source/window/builder.cxx | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/vcl/source/window/builder.cxx b/vcl/source/window/builder.cxx index 67bf87159a8c..63fce3934281 100644 --- a/vcl/source/window/builder.cxx +++ b/vcl/source/window/builder.cxx @@ -57,6 +57,8 @@ VclBuilder::VclBuilder(Window *pParent, OUString sUIDir, OUString sUIFile, OStri , m_pParent(pParent) , m_pParserState(new ParserState) { + m_bToplevelHasDeferredInit = (pParent && pParent->IsDialog()) ? ((Dialog*)pParent)->isDeferredInit() : false; + sal_Int32 nIdx = m_sHelpRoot.lastIndexOf('.'); if (nIdx != -1) m_sHelpRoot = m_sHelpRoot.copy(0, nIdx); @@ -685,6 +687,7 @@ Window *VclBuilder::insertObject(Window *pParent, const OString &rClass, const O { Dialog *pDialog = (Dialog*)pCurrentChild; pDialog->doDeferredInit(extractResizable(rMap)); + m_bToplevelHasDeferredInit = false; } if (pCurrentChild->GetHelpId().isEmpty()) { @@ -696,6 +699,11 @@ Window *VclBuilder::insertObject(Window *pParent, const OString &rClass, const O } else { + //if we're being inserting under a toplevel dialog whose init is + //deferred due to waiting to encounter it in this .ui, and it hasn't + //been seen yet, then make unattached widgets parent-less toplevels + if (pParent == m_pParent && m_bToplevelHasDeferredInit) + pParent = NULL; pCurrentChild = makeObject(pParent, rClass, rID, rMap); } |