diff options
author | Caolán McNamara <caolanm@redhat.com> | 2017-06-13 18:09:08 +0100 |
---|---|---|
committer | Caolán McNamara <caolanm@redhat.com> | 2017-06-13 22:06:04 +0200 |
commit | 277395b6266c57a7709c3c47986f135f6789c8e7 (patch) | |
tree | f2435b78c0f27658e67f9219dc56de070da2b0aa /vcl/unx/generic/window/salobj.cxx | |
parent | 60763a9551bea003271de9307923327e7a39b63e (diff) |
make opengl transitions under X flicker free on enter/leave
Change-Id: I109637dc6b3d23c0beca21f3cf0c7ba918ecb4f8
Reviewed-on: https://gerrit.libreoffice.org/38749
Tested-by: Jenkins <ci@libreoffice.org>
Reviewed-by: Caolán McNamara <caolanm@redhat.com>
Tested-by: Caolán McNamara <caolanm@redhat.com>
Diffstat (limited to 'vcl/unx/generic/window/salobj.cxx')
-rw-r--r-- | vcl/unx/generic/window/salobj.cxx | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/vcl/unx/generic/window/salobj.cxx b/vcl/unx/generic/window/salobj.cxx index e3ec1b467290..b10e8f645201 100644 --- a/vcl/unx/generic/window/salobj.cxx +++ b/vcl/unx/generic/window/salobj.cxx @@ -243,6 +243,9 @@ X11SalObject::~X11SalObject() rObjects.remove( this ); GetGenericData()->ErrorTrapPush(); + const SystemEnvData* pEnv = mpParent->GetSystemData(); + ::Window aObjectParent = (::Window)pEnv->aWindow; + XSetWindowBackgroundPixmap(static_cast<Display*>(maSystemChildData.pDisplay), aObjectParent, None); if ( maSecondary ) XDestroyWindow( static_cast<Display*>(maSystemChildData.pDisplay), maSecondary ); if ( maPrimary ) @@ -468,4 +471,40 @@ bool X11SalObject::Dispatch( XEvent* pEvent ) return false; } +void X11SalObject::SetLeaveEnterBackgrounds(const css::uno::Sequence<css::uno::Any>& rLeaveArgs, const css::uno::Sequence<css::uno::Any>& rEnterArgs) +{ + SalDisplay* pSalDisp = vcl_sal::getSalDisplay(GetGenericData()); + const SystemEnvData* pEnv = mpParent->GetSystemData(); + Display* pDisp = pSalDisp->GetDisplay(); + ::Window aObjectParent = (::Window)pEnv->aWindow; + + bool bFreePixmap = false; + Pixmap aPixmap = None; + if (rEnterArgs.getLength() == 3) + { + rEnterArgs[0] >>= bFreePixmap; + long pixmapHandle = None; + rEnterArgs[1] >>= pixmapHandle; + aPixmap = pixmapHandle; + } + + XSetWindowBackgroundPixmap(pDisp, aObjectParent, aPixmap); + if (bFreePixmap) + XFreePixmap(pDisp, aPixmap); + + bFreePixmap = false; + aPixmap = None; + if (rLeaveArgs.getLength() == 3) + { + rLeaveArgs[0] >>= bFreePixmap; + long pixmapHandle = None; + rLeaveArgs[1] >>= pixmapHandle; + aPixmap = pixmapHandle; + } + + XSetWindowBackgroundPixmap(pDisp, maSecondary, aPixmap); + if (bFreePixmap) + XFreePixmap(pDisp, aPixmap); +} + /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ |