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
