File kde-auto-comp.diff of Package compiz
--- a/kde/window-decorator-kde4/decorator.cpp
+++ b/kde/window-decorator-kde4/decorator.cpp
@@ -90,6 +90,15 @@ KWD::PluginManager::PluginManager (KSharedConfigPtr config):
"kwin3_oxygen" : "kwin3_plastik";
}
+static int redirectError;
+
+static int
+redirectErrorHandler (Display *dpy,
+ XErrorEvent *e)
+{
+ redirectError++;
+ return 0;
+}
KWD::Decorator::Decorator (Display* display,
Qt::HANDLE visual,
@@ -169,8 +178,16 @@ KWD::Decorator::Decorator (Display* display,
CopyFromParent,
CWOverrideRedirect, &attr);
+ redirectError = 0;
+ int (*oldErrorHandler) (Display *, XErrorEvent *) =
+ XSetErrorHandler (redirectErrorHandler);
XCompositeRedirectSubwindows (QX11Info::display(), mCompositeWindow,
- CompositeRedirectManual);
+ CompositeRedirectManual);
+ syncX ();
+ XSetErrorHandler (oldErrorHandler);
+ if (redirectError)
+ XCompositeRedirectSubwindows (QX11Info::display(), mCompositeWindow,
+ CompositeRedirectAutomatic);
XMapWindow (QX11Info::display(), mCompositeWindow);
}
diff --git a/kde/window-decorator/decorator.cpp b/kde/window-decorator/decorator.cpp
index 03819dc..7f630ea 100644
--- a/kde/window-decorator/decorator.cpp
+++ b/kde/window-decorator/decorator.cpp
@@ -188,6 +188,16 @@ dbusHandleMessage (DBusConnection *connection,
return result;
}
+static int redirectError;
+
+static int
+redirectErrorHandler (Display *dpy,
+ XErrorEvent *e)
+{
+ redirectError++;
+ return 0;
+}
+
KWD::Decorator::Decorator (void) : DCOPObject ("KWinInterface"),
KApplication (),
mConfig (0),
@@ -242,8 +252,16 @@ KWD::Decorator::Decorator (void) : DCOPObject ("KWinInterface"),
CopyFromParent,
CWOverrideRedirect, &attr);
+ redirectError = 0;
+ int (*oldErrorHandler) (Display *, XErrorEvent *) =
+ XSetErrorHandler (redirectErrorHandler);
XCompositeRedirectSubwindows (qt_xdisplay (), mCompositeWindow,
CompositeRedirectManual);
+ syncX ();
+ XSetErrorHandler (oldErrorHandler);
+ if (redirectError)
+ XCompositeRedirectSubwindows (qt_xdisplay (), mCompositeWindow,
+ CompositeRedirectAutomatic);
XMapWindow (qt_xdisplay (), mCompositeWindow);
}