summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCaolán McNamara <caolanm@redhat.com>2018-05-28 10:48:32 +0100
committerChristian Lohmaier <lohmaier+LibreOffice@googlemail.com>2018-05-29 21:47:00 +0200
commitd9c5e7f4aef8da58b2b59e3259d1704296648cbf (patch)
tree32ea02e8997ca6eb78044f635d0504383f9deddc
parent08e45e11a0e74cdb4a17ec29df9d03ad03b7f7c0 (diff)
tdf#117628 crash after closing media player with X11 backend
Change-Id: I812da5ddf7343573f93ea64e592442edb31cad2d Reviewed-on: https://gerrit.libreoffice.org/54912 Tested-by: Jenkins <ci@libreoffice.org> Reviewed-by: Christian Lohmaier <lohmaier+LibreOffice@googlemail.com>
-rw-r--r--vcl/inc/unx/salobj.h1
-rw-r--r--vcl/unx/generic/window/salobj.cxx12
2 files changed, 6 insertions, 7 deletions
diff --git a/vcl/inc/unx/salobj.h b/vcl/inc/unx/salobj.h
index 8eb91b917efe..4a0535507dc2 100644
--- a/vcl/inc/unx/salobj.h
+++ b/vcl/inc/unx/salobj.h
@@ -56,6 +56,7 @@ class VCLPLUG_GEN_PUBLIC X11SalObject : public SalObject
public:
SystemEnvData maSystemChildData;
SalFrame* mpParent;
+ ::Window maParentWin;
::Window maPrimary;
::Window maSecondary;
Colormap maColormap;
diff --git a/vcl/unx/generic/window/salobj.cxx b/vcl/unx/generic/window/salobj.cxx
index 9d0833094c1d..de41bc8bf8cb 100644
--- a/vcl/unx/generic/window/salobj.cxx
+++ b/vcl/unx/generic/window/salobj.cxx
@@ -62,7 +62,8 @@ X11SalObject* X11SalObject::CreateObject( SalFrame* pParent, SystemWindowData* p
SalDisplay* pSalDisp = vcl_sal::getSalDisplay(GetGenericUnixSalData());
const SystemEnvData* pEnv = pParent->GetSystemData();
Display* pDisp = pSalDisp->GetDisplay();
- ::Window aObjectParent = (::Window)pEnv->aWindow;
+ ::Window aObjectParent = static_cast<::Window>(pEnv->aWindow);
+ pObject->maParentWin = aObjectParent;
// find out on which screen that window is
XWindowAttributes aParentAttr;
@@ -235,8 +236,7 @@ X11SalObject::~X11SalObject()
rObjects.remove( this );
GetGenericUnixSalData()->ErrorTrapPush();
- const SystemEnvData* pEnv = mpParent->GetSystemData();
- ::Window aObjectParent = (::Window)pEnv->aWindow;
+ ::Window aObjectParent = maParentWin;
XSetWindowBackgroundPixmap(static_cast<Display*>(maSystemChildData.pDisplay), aObjectParent, None);
if ( maSecondary )
XDestroyWindow( static_cast<Display*>(maSystemChildData.pDisplay), maSecondary );
@@ -400,12 +400,11 @@ bool X11SalObject::Dispatch( XEvent* pEvent )
)
{
SalMouseEvent aEvt;
- const SystemEnvData* pParentData = pObject->mpParent->GetSystemData();
int dest_x, dest_y;
::Window aChild = None;
XTranslateCoordinates( pEvent->xbutton.display,
pEvent->xbutton.root,
- pParentData->aWindow,
+ pObject->maParentWin,
pEvent->xbutton.x_root,
pEvent->xbutton.y_root,
&dest_x, &dest_y,
@@ -466,9 +465,8 @@ bool X11SalObject::Dispatch( XEvent* pEvent )
void X11SalObject::SetLeaveEnterBackgrounds(const css::uno::Sequence<css::uno::Any>& rLeaveArgs, const css::uno::Sequence<css::uno::Any>& rEnterArgs)
{
SalDisplay* pSalDisp = vcl_sal::getSalDisplay(GetGenericUnixSalData());
- const SystemEnvData* pEnv = mpParent->GetSystemData();
Display* pDisp = pSalDisp->GetDisplay();
- ::Window aObjectParent = (::Window)pEnv->aWindow;
+ ::Window aObjectParent = maParentWin;
bool bFreePixmap = false;
Pixmap aPixmap = None;