vcl/README.lifecycle          |   12 ++----------
 vcl/source/window/window.cxx  |    5 +++--
 vcl/source/window/window2.cxx |    2 +-
 3 files changed, 6 insertions(+), 13 deletions(-)

New commits:
commit 82613b809e858bebb13425c4b264f5f0ce964684
Author:     Michael Meeks <michael.me...@collabora.com>
AuthorDate: Mon Aug 2 13:38:31 2021 +0100
Commit:     Michael Stahl <michael.st...@allotropia.de>
CommitDate: Tue Aug 10 19:16:15 2021 +0200

    vcl: avoid native widget pieces for disposed BorderWindow.
    
    Fixes crash around help windows:
            vcl::Window::IsCompoundControl() const
                    vcl/source/window/window2.cxx:1200
            vcl::Window::Show(bool, ShowFlags)
                    vcl/source/window/window.cxx:2243 (discriminator 3)
            vcl::Window::Show(bool, ShowFlags)
                    vcl/source/window/window.cxx:2298
            HelpTextWindow::ImplShow()
                    vcl/source/app/help.cxx:371
            Scheduler::ProcessTaskScheduling()
                    vcl/source/app/scheduler.cxx:495
    
    Change-Id: Ia0205813f3e9d306314577d59d6cdd1bdfa0ee71
    Signed-off-by: Michael Meeks <michael.me...@collabora.com>
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/119854
    Tested-by: Jenkins
    (cherry picked from commit ab281c561f7fa7a3512875a22423693dca84316a)
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/119868
    Reviewed-by: Michael Stahl <michael.st...@allotropia.de>

diff --git a/vcl/README.lifecycle b/vcl/README.lifecycle
index a309b65ef9ea..9933e40f0955 100644
--- a/vcl/README.lifecycle
+++ b/vcl/README.lifecycle
@@ -73,8 +73,8 @@ to lingering pointers to freed objects.
        VclPtr<PushButton> pButton;
        ...
        assert (pButton == nullptr || !pButton);    // null
-       assert (pButton && !pButton->IsDisposed()); // alive
-       assert (pButton &&  pButton->IsDisposed()); // disposed
+       assert (pButton && !pButton->isDisposed()); // alive
+       assert (pButton &&  pButton->isDisposed()); // disposed
 
 ** ScopedVclPtr - making disposes easier
 
@@ -189,8 +189,6 @@ ways and often both.
 
 ---------- What remains to be done ? ----------
 
-       * Cleanup DogTags
-
        * Expand the VclPtr pattern to many other less
          than safe VCL types.
 
@@ -214,12 +212,6 @@ ways and often both.
                  in 'get()' calls - to avoid needing explicit 'clear'
                  code in destructors.
 
-       * VclBuilder 'makeFoo' methods
-               + these should return VclPtr<> types and have their
-                 signatures adjusted en-masse.
-               + currently we use a VclPtr<> constructor with
-                 SAL_NO_ACQUIRE inside the builder.
-
 ---------- FAQ / debugging hints ----------
 
 ** Compile with dbgutil
diff --git a/vcl/source/window/window.cxx b/vcl/source/window/window.cxx
index 88c618dd1254..e08e31763566 100644
--- a/vcl/source/window/window.cxx
+++ b/vcl/source/window/window.cxx
@@ -2272,7 +2272,8 @@ void Window::Show(bool bVisible, ShowFlags nFlags)
         // inherit native widget flag for form controls
         // required here, because frames never show up in the child hierarchy 
- which should be fixed...
         // eg, the drop down of a combobox which is a system floating window
-        if( mpWindowImpl->mbFrame && GetParent() && 
GetParent()->IsCompoundControl() &&
+        if( mpWindowImpl->mbFrame && GetParent() && !GetParent()->isDisposed() 
&&
+            GetParent()->IsCompoundControl() &&
             GetParent()->IsNativeWidgetEnabled() != IsNativeWidgetEnabled() &&
             !(GetStyle() & WB_TOOLTIPWIN) )
         {
@@ -3692,7 +3693,7 @@ void Window::EnableNativeWidget( bool bEnable )
 
 bool Window::IsNativeWidgetEnabled() const
 {
-    return ImplGetWinData()->mbEnableNativeWidget;
+    return mpWindowImpl && ImplGetWinData()->mbEnableNativeWidget;
 }
 
 Reference< css::rendering::XCanvas > WindowOutputDevice::ImplGetCanvas( bool 
bSpriteCanvas ) const
diff --git a/vcl/source/window/window2.cxx b/vcl/source/window/window2.cxx
index 5477e98be940..8f3d624c5d3f 100644
--- a/vcl/source/window/window2.cxx
+++ b/vcl/source/window/window2.cxx
@@ -1190,7 +1190,7 @@ GetFocusFlags Window::GetGetFocusFlags() const
 
 bool Window::IsCompoundControl() const
 {
-    return mpWindowImpl->mbCompoundControl;
+    return mpWindowImpl && mpWindowImpl->mbCompoundControl;
 }
 
 bool Window::IsWait() const

Reply via email to