From a643ff2b002f1a62dc65d7b5fa765eed47476b98 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lubo=C5=A1=20Lu=C5=88=C3=A1k?= Date: Sun, 3 Dec 2006 13:38:16 +0000 Subject: [PATCH] Try to use XComposite overlay also with XRender. svn path=/branches/work/kwin_composite/; revision=610137 --- composite.cpp | 7 +++++-- scene_xrender.cpp | 15 ++++++++++++--- 2 files changed, 17 insertions(+), 5 deletions(-) diff --git a/composite.cpp b/composite.cpp index e0c6d40af6..710ffa00d4 100644 --- a/composite.cpp +++ b/composite.cpp @@ -261,8 +261,11 @@ void Workspace::setupOverlay( Window w ) { assert( overlay != None ); XShapeCombineRectangles( display(), overlay, ShapeInput, 0, 0, NULL, 0, ShapeSet, Unsorted ); - XShapeCombineRectangles( display(), w, ShapeInput, 0, 0, NULL, 0, ShapeSet, Unsorted ); - XMapWindow( display(), w ); + if( w != None ) + { + XShapeCombineRectangles( display(), w, ShapeInput, 0, 0, NULL, 0, ShapeSet, Unsorted ); + XMapWindow( display(), w ); + } XMapRaised( display(), overlay ); } diff --git a/scene_xrender.cpp b/scene_xrender.cpp index 17a8f7f554..3f604defae 100644 --- a/scene_xrender.cpp +++ b/scene_xrender.cpp @@ -77,9 +77,17 @@ SceneXrender::SceneXrender( Workspace* ws ) { // create XRender picture for the root window format = XRenderFindVisualFormat( display(), DefaultVisual( display(), DefaultScreen( display()))); - XRenderPictureAttributes pa; - pa.subwindow_mode = IncludeInferiors; - front = XRenderCreatePicture( display(), rootWindow(), format, CPSubwindowMode, &pa ); + if( wspace->createOverlay()) + { + wspace->setupOverlay( None ); + front = XRenderCreatePicture( display(), wspace->overlayWindow(), format, 0, NULL ); + } + else + { + XRenderPictureAttributes pa; + pa.subwindow_mode = IncludeInferiors; + front = XRenderCreatePicture( display(), rootWindow(), format, CPSubwindowMode, &pa ); + } createBuffer(); } @@ -87,6 +95,7 @@ SceneXrender::~SceneXrender() { XRenderFreePicture( display(), front ); XRenderFreePicture( display(), buffer ); + wspace->destroyOverlay(); for( QMap< Toplevel*, Window >::Iterator it = windows.begin(); it != windows.end(); ++it )