Port (un)redirecting (sub)windows to XCB

This commit is contained in:
Martin Gräßlin 2012-12-11 22:49:16 +01:00
parent a798a2d3d6
commit aa34e8ec18

View file

@ -70,11 +70,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#include <kactioncollection.h> #include <kactioncollection.h>
#include <klocale.h> #include <klocale.h>
#include <X11/extensions/shape.h>
#include <X11/extensions/Xcomposite.h>
#include <X11/extensions/Xrandr.h>
#include <xcb/composite.h> #include <xcb/composite.h>
#include <xcb/damage.h> #include <xcb/damage.h>
@ -247,7 +242,7 @@ void Compositor::slotCompositingOptionsInitialized()
vBlankInterval = 1 << 10; // no sync - DO NOT set "0", would cause div-by-zero segfaults. vBlankInterval = 1 << 10; // no sync - DO NOT set "0", would cause div-by-zero segfaults.
m_timeSinceLastVBlank = fpsInterval - 1; // means "start now" - we don't have even a slight idea when the first vsync will occur m_timeSinceLastVBlank = fpsInterval - 1; // means "start now" - we don't have even a slight idea when the first vsync will occur
scheduleRepaint(); scheduleRepaint();
XCompositeRedirectSubwindows(display(), rootWindow(), CompositeRedirectManual); xcb_composite_redirect_subwindows(connection(), rootWindow(), XCB_COMPOSITE_REDIRECT_MANUAL);
new EffectsHandlerImpl(this, m_scene); // sets also the 'effects' pointer new EffectsHandlerImpl(this, m_scene); // sets also the 'effects' pointer
connect(effects, SIGNAL(screenGeometryChanged(QSize)), SLOT(addRepaintFull())); connect(effects, SIGNAL(screenGeometryChanged(QSize)), SLOT(addRepaintFull()));
addRepaintFull(); addRepaintFull();
@ -298,7 +293,7 @@ void Compositor::finish()
c->finishCompositing(); c->finishCompositing();
foreach (Deleted * c, Workspace::self()->deletedList()) foreach (Deleted * c, Workspace::self()->deletedList())
c->finishCompositing(); c->finishCompositing();
XCompositeUnredirectSubwindows(display(), rootWindow(), CompositeRedirectManual); xcb_composite_unredirect_subwindows(connection(), rootWindow(), XCB_COMPOSITE_REDIRECT_MANUAL);
delete effects; delete effects;
effects = NULL; effects = NULL;
delete m_scene; delete m_scene;
@ -1126,12 +1121,12 @@ bool Toplevel::updateUnredirectedState()
if (should && !unredirect) { if (should && !unredirect) {
unredirect = true; unredirect = true;
kDebug(1212) << "Unredirecting:" << this; kDebug(1212) << "Unredirecting:" << this;
XCompositeUnredirectWindow(display(), frameId(), CompositeRedirectManual); xcb_composite_unredirect_window(connection(), frameId(), XCB_COMPOSITE_REDIRECT_MANUAL);
return true; return true;
} else if (!should && unredirect) { } else if (!should && unredirect) {
unredirect = false; unredirect = false;
kDebug(1212) << "Redirecting:" << this; kDebug(1212) << "Redirecting:" << this;
XCompositeRedirectWindow(display(), frameId(), CompositeRedirectManual); xcb_composite_redirect_window(connection(), frameId(), XCB_COMPOSITE_REDIRECT_MANUAL);
discardWindowPixmap(); discardWindowPixmap();
return true; return true;
} }