[Libreoffice-commits] core.git: Branch 'libreoffice-5-0' - avmedia/source slideshow/source
Noel Grandin
noel at peralex.com
Sat Jun 13 09:54:53 PDT 2015
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 5a617461a77abaca69a335901c3e5d7b084cc73f
Author: Noel Grandin <noel at peralex.com>
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 <michael.meeks at collabora.com>
Tested-by: Michael Meeks <michael.meeks at collabora.com>
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 f026b21..60d86d0 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;
More information about the Libreoffice-commits
mailing list