avmedia/source/viewer/mediawindow.cxx             |    5 ++++-
 slideshow/source/engine/shapes/viewmediashape.cxx |   18 ++++++++++--------
 slideshow/source/engine/shapes/viewmediashape.hxx |    4 ++--
 3 files changed, 16 insertions(+), 11 deletions(-)

New commits:
commit c2d65e08c9f6e35875eed1a4eea3af614478b801
Author: Noel Grandin <[email protected]>
Date:   Thu Jun 11 16:00:03 2015 +0200

    tdf#91960 presentation causes Impress crash
    
    The SystenChildWindow in question is owned by ViewMediaShape
    Fixed ViewMediaShape to dispose the vcl objects it creates correctly.
    Also fix another crash in MediaWindowImpl child window correctly disposing 
its children.
    
    Change-Id: If4aebcb6e5824266c154416f7246d73c6cb3509c
    Reviewed-on: https://gerrit.libreoffice.org/16230
    Reviewed-by: Michael Meeks <[email protected]>
    Tested-by: Michael Meeks <[email protected]>

diff --git a/avmedia/source/viewer/mediawindow.cxx 
b/avmedia/source/viewer/mediawindow.cxx
index 3108df4..6e79348 100644
--- a/avmedia/source/viewer/mediawindow.cxx
+++ b/avmedia/source/viewer/mediawindow.cxx
@@ -51,7 +51,10 @@ MediaWindow::MediaWindow( vcl::Window* parent, bool 
bInternalMediaControl ) :
 
 
 
-MediaWindow::~MediaWindow() {}
+MediaWindow::~MediaWindow()
+{
+    mpImpl.disposeAndClear();
+}
 
 
 
diff --git a/slideshow/source/engine/shapes/viewmediashape.cxx 
b/slideshow/source/engine/shapes/viewmediashape.cxx
index 6e481d3..654f91c 100644
--- a/slideshow/source/engine/shapes/viewmediashape.cxx
+++ b/slideshow/source/engine/shapes/viewmediashape.cxx
@@ -148,8 +148,8 @@ namespace slideshow
                 mxPlayerWindow.clear();
             }
 
-            mpMediaWindow.reset();
-            mpEventHandlerParent.reset();
+            mpMediaWindow.disposeAndClear();
+            mpEventHandlerParent.disposeAndClear();
 
             // shutdown player
             if( mxPlayer.is() )
@@ -471,20 +471,23 @@ namespace slideshow
 #else
                             if( avmedia::IsModel(rMimeType) )
                             {
-                                
mpEventHandlerParent.reset(VclPtr<vcl::Window>::Create(pWindow, 
WB_NOBORDER|WB_NODIALOGCONTROL));
+                                mpMediaWindow.disposeAndClear();
+                                mpEventHandlerParent.disposeAndClear();
+                                mpEventHandlerParent = 
VclPtr<vcl::Window>::Create(pWindow, WB_NOBORDER|WB_NODIALOGCONTROL);
                                 mpEventHandlerParent->SetPosSizePixel( Point( 
aAWTRect.X, aAWTRect.Y ),
                                                            Size( 
aAWTRect.Width, aAWTRect.Height ) );
                                 mpEventHandlerParent->EnablePaint(false);
                                 mpEventHandlerParent->Show();
                                 SystemWindowData aWinData = 
OpenGLContext::generateWinData(mpEventHandlerParent.get(), false);
-                                
mpMediaWindow.reset(VclPtr<SystemChildWindow>::Create(mpEventHandlerParent.get(),
 0, &aWinData));
+                                mpMediaWindow = 
VclPtr<SystemChildWindow>::Create(mpEventHandlerParent.get(), 0, &aWinData);
                                 mpMediaWindow->SetPosSizePixel( Point( 0, 0 ),
                                                            Size( 
aAWTRect.Width, aAWTRect.Height ) );
                             }
                             else
 #endif
                             {
-                                mpMediaWindow.reset( 
VclPtr<SystemChildWindow>::Create( pWindow, WB_CLIPCHILDREN ) );
+                                mpMediaWindow.disposeAndClear();
+                                mpMediaWindow = 
VclPtr<SystemChildWindow>::Create( pWindow, WB_CLIPCHILDREN );
                                 mpMediaWindow->SetPosSizePixel( Point( 
aAWTRect.X, aAWTRect.Y ),
                                                            Size( 
aAWTRect.Width, aAWTRect.Height ) );
                             }
@@ -503,7 +506,6 @@ namespace slideshow
 
                                 aAWTRect.X = aAWTRect.Y = 0;
                                 aArgs[ 1 ] = uno::makeAny( aAWTRect );
-
                                 aArgs[ 2 ] = uno::makeAny( reinterpret_cast< 
sal_IntPtr >( mpMediaWindow.get() ) );
 
                                 mxPlayerWindow.set( 
mxPlayer->createPlayerWindow( aArgs ) );
@@ -519,8 +521,8 @@ namespace slideshow
                             {
                                 //if there was no playerwindow, then clear the 
mpMediaWindow too
                                 //so that we can draw a placeholder instead in 
that space
-                                mpMediaWindow.reset();
-                                mpEventHandlerParent.reset();
+                                mpMediaWindow.disposeAndClear();
+                                mpEventHandlerParent.disposeAndClear();
                             }
                         }
                     }
diff --git a/slideshow/source/engine/shapes/viewmediashape.hxx 
b/slideshow/source/engine/shapes/viewmediashape.hxx
index 13eba7f..fe0462c 100644
--- a/slideshow/source/engine/shapes/viewmediashape.hxx
+++ b/slideshow/source/engine/shapes/viewmediashape.hxx
@@ -148,8 +148,8 @@ namespace slideshow
                                                      const 
::com::sun::star::uno::Sequence< ::com::sun::star::uno::Any >& rVCLDeviceParams,
                                                      const OUString& rMimeType 
);
             ViewLayerSharedPtr                    mpViewLayer;
-            VclPtr< SystemChildWindow >  mpMediaWindow;
-            VclPtr< vcl::Window >    mpEventHandlerParent;
+            VclPtr< SystemChildWindow >           mpMediaWindow;
+            VclPtr< vcl::Window >                 mpEventHandlerParent;
             mutable ::com::sun::star::awt::Point  maWindowOffset;
             mutable ::basegfx::B2DRectangle       maBounds;
 
_______________________________________________
Libreoffice-commits mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits

Reply via email to