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);
 }
openSUSE Build Service is sponsored by