This ensures that configure event serials generated by frame updates in the case of unity's undecoration are correctly added to the event queue so that they will be cleared later on when compiz gets the event for them.
/* Remove events from the queue
* even if they didn't match what
-@@ -2399,7 +2466,6 @@
+@@ -2399,7 +2482,6 @@
xwc.x = priv->serverFrameGeometry.x ();
xwc.y = priv->serverFrameGeometry.y ();
Proposed follow up fix pending verification:
=== modified file 'debian/ patches/ fix-864330. patch' patches/ fix-864330. patch 2011-10-12 10:06:03 +0000 patches/ fix-864330. patch 2011-10-17 07:10:33 +0000 move/src/ move.cpp' 0.9.6+bzr201109 29/plugins/ move/src/ move.cpp ======= ======= ======= ======= ======= ======= ======= ======= ===== 0.9.6+bzr201109 29.orig/ plugins/ move/src/ move.cpp 2011-10-12 17:00:11.359395413 +0800 0.9.6+bzr201109 29/plugins/ move/src/ move.cpp 2011-10-12 17:00:22.599451570 +0800 0.9.6+bzr201109 29.orig/ plugins/ move/src/ move.cpp 2011-10-17 15:09:58.353653059 +0800 0.9.6+bzr201109 29/plugins/ move/src/ move.cpp 2011-10-17 15:10:07.081696339 +0800 :getIntOptionNa med (options, "window", 0); :getIntOptionNa med (options, "active", 0); 0.9.6+bzr201109 29/src/ privatescreen. h ======= ======= ======= ======= ======= ======= ======= ======= ===== 0.9.6+bzr201109 29.orig/ src/privatescre en.h 2011-10-12 17:00:11.319395193 +0800 0.9.6+bzr201109 29/src/ privatescreen. h 2011-10-12 17:00:22.599451570 +0800 0.9.6+bzr201109 29.orig/ src/privatescre en.h 2011-10-17 15:09:58.369653137 +0800 0.9.6+bzr201109 29/src/ privatescreen. h 2011-10-17 15:10:07.081696339 +0800
--- debian/
+++ debian/
@@ -1,8 +1,8 @@
=== modified file 'plugins/
Index: compiz-
======
---- compiz-
-+++ compiz-
+--- compiz-
++++ compiz-
@@ -525,7 +525,7 @@
Window xid = CompOption:
int lock = CompOption:
@@ -14,8 +14,8 @@
}
Index: compiz-
======
---- compiz-
-+++ compiz-
+--- compiz-
++++ compiz-
@@ -111,6 +111,8 @@
virtual ~PendingEvent ();
@@ -45,8 +45,8 @@ 0.9.6+bzr201109 29/src/ privatewindow. h ======= ======= ======= ======= ======= ======= ======= ======= ===== 0.9.6+bzr201109 29.orig/ src/privatewind ow.h 2011-10-12 17:00:11.243394758 +0800 0.9.6+bzr201109 29/src/ privatewindow. h 2011-10-12 17:00:22.599451570 +0800 0.9.6+bzr201109 29.orig/ src/privatewind ow.h 2011-10-17 15:09:58.385653215 +0800 0.9.6+bzr201109 29/src/ privatewindow. h 2011-10-17 15:10:07.125696557 +0800
bool removeIfMatching (const PendingEvent::Ptr &p, XEvent *);
Index: compiz-
======
---- compiz-
-+++ compiz-
+--- compiz-
++++ compiz-
@@ -211,7 +211,7 @@
void readIconHint (); quest;
@@ -66,8 +66,8 @@
struct timeval lastConfigureRe
Index: compiz- 0.9.6+bzr201109 29/src/ window. cpp ======= ======= ======= ======= ======= ======= ======= ======= ===== 0.9.6+bzr201109 29.orig/ src/window. cpp 2011-10-12 17:00:11.283395067 +0800 0.9.6+bzr201109 29/src/ window. cpp 2011-10-12 17:02:55.120207454 +0800 0.9.6+bzr201109 29.orig/ src/window. cpp 2011-10-17 15:09:58.357653075 +0800 0.9.6+bzr201109 29/src/ window. cpp 2011-10-17 15:10:29.229806152 +0800
======
---- compiz-
-+++ compiz-
+--- compiz-
++++ compiz-
@@ -868,13 +868,16 @@
}
@@ -116,7 +116,25 @@
if (serverFrameGeo metry.x () == xwc.x) :X11::PendingEv ent::Ptr pc = shared_ static_ cast<compiz: :X11::PendingEv ent> (compiz: :X11::PendingCo nfigureEvent: :Ptr ( :X11::PendingCo nfigureEvent ( es.add (pc); mClearCheckTime out.active ()) ckTimeout. stop (); ckTimeout. start (boost::bind (&PrivateWindow ::checkClear, priv), ifyMask, (XEvent *) &xev);
compiz: :X11::PendingEv ent::Ptr pc =
boost: :shared_ static_ cast<compiz: :X11::PendingEv ent> (compiz: :X11::PendingCo nfigureEvent: :Ptr (
new compiz: :X11::PendingCo nfigureEvent ( es.add (pc); mClearCheckTime out.active ()) ckTimeout. stop (); ckTimeout. start (boost::bind (&PrivateWindow ::checkClear, priv),
valueMask &= ~(CWX);
-@@ -1012,7 +1015,6 @@
+@@ -1004,6 +1007,17 @@
+
+ }
+
++ compiz:
++ boost::
++ new compiz:
++ screen->dpy (), serverFrame, valueMask, &xwc)));
++
++ pendingConfigur
++ if (priv->
++ priv->mClearChe
++ priv->mClearChe
++ 2000, 2500);
++
+ XSendEvent (screen->dpy (), screen->root (), false,
+ SubstructureNot
+
+@@ -1012,13 +1026,17 @@
}
else
{
@@ -124,7 +142,18 @@
-@@ -2051,7 +2053,7 @@
+ screen->dpy (), serverFrame, valueMask, &xwc)));
+
+ pendingConfigur
++ if (priv->
++ priv->mClearChe
++ priv->mClearChe
++ 2000, 2500);
++
+ XConfigureWindow (screen->dpy (), serverFrame, valueMask, &xwc);
+ }
+
This ensures that configure event serials generated by frame updates in the case of unity's undecoration are correctly added to the event queue so that they will be cleared later on when compiz gets the event for them.
+@@ -2051,7 +2069,7 @@
#ifdef DEBUG
abort ();
#else
@@ -133,7 +162,7 @@
#endif
}
-@@ -2160,28 +2162,13 @@
XWindowChanges xwc;
+@@ -2160,28 +2178,13 @@
{
unsigned int valueMask = CWX | CWY;
@@ -163,7 +192,7 @@
}
}
}
-@@ -2192,16 +2179,59 @@
+@@ -2192,16 +2195,59 @@
return !mEvents.empty ();
}
@@ -224,7 +253,7 @@
}
bool
-@@ -2227,8 +2257,21 @@
+@@ -2227,8 +2273,21 @@
return false;
}
@@ -246,7 +275,7 @@
}
compiz: :X11::PendingEv entQueue: :~PendingEventQ ueue () :X11::PendingCo nfigureEvent: :matchVM (unsigned int valueMask)
-@@ -2271,7 +2314,44 @@
+@@ -2271,7 +2330,44 @@
bool
compiz:
{
@@ -292,7 +321,7 @@
}
bool :X11::PendingEv ent::match (event))
-@@ -2283,29 +2363,16 @@
+@@ -2283,29 +2379,16 @@
if (!compiz:
return false;
@@ -332,7 +361,7 @@
/* Remove events from the queue meGeometry. x (); meGeometry. y ();
* even if they didn't match what
-@@ -2399,7 +2466,6 @@
+@@ -2399,7 +2482,6 @@
xwc.x = priv->serverFra
xwc.y = priv->serverFra
@@ -340,7 +369,7 @@
compiz: :X11::PendingEv ent::Ptr pc =
boost: :shared_ static_ cast<compiz: :X11::PendingEv ent> (compiz: :X11::PendingCo nfigureEvent: :Ptr (
new compiz: :X11::PendingCo nfigureEvent (
-@@ -2407,6 +2473,11 @@
+@@ -2407,6 +2489,11 @@
@@ -352,7 +381,7 @@
XConfigureWindo w (screen->dpy (), ROOTPARENT (this), valueMask, &xwc);
if (priv->serverFrame)
-@@ -3218,11 +3289,18 @@
+@@ -3218,11 +3305,18 @@
return pc->matchVM (CWStackMode | CWSibling);
}
@@ -372,7 +401,7 @@
/* Immediately sync window position
* if plugins were updating w->geometry () directly
-@@ -3232,28 +3310,37 @@
+@@ -3232,28 +3326,37 @@
/* Remove redundant bits */
@@ -406,19 +435,19 @@ nfigures. forEachIf (boost::bind (isExistingRequest, _1, *xwc, valueMask)); >serverPrev- >priv-> pendingConfigur es.forEachIf (boost::bind (isPendingRestack, _1));
+ bool matchingRequest = priv->pendingCo
+ bool restackPending = window-
+ bool remove = matchingRequest;
++
++ if (!remove)
++ remove = !restackPending;
- if (window- >serverPrev- >priv-> pendingConfigur es.forEachIf (boost::bind (isPendingRestack, _1)))
- valueMask &= ~(CWSibling | CWStackMode);
-+ if (!remove)
-+ remove = !restackPending;
-+
+ if (remove)
+ valueMask &= ~(CWSibling | CWStackMode);
+ }
}
if (valueMask & CWBorderWidth)
compLogMessage ("core", CompLogLevelWarn, "restack_mode not Above");
-@@ -3289,13 +3376,18 @@
+@@ -3289,13 +3392,18 @@
}
@@ -440,7 +469,7 @@
+ serverInput.left + serverInput.right)
frameValueMask &= ~(CWWidth);
-@@ -3305,13 +3397,15 @@
+@@ -3305,13 +3413,15 @@
if (shaded)
frameValueMask &= ~(CWHeight); etry.width (); etry.height ();
{
@@ -458,7 +487,7 @@
+ serverInput.top + serverInput.bottom)
}
-@@ -3354,14 +3448,16 @@
+@@ -3354,14 +3464,16 @@
wc.width = serverFrameGeom
wc.height = serverFrameGeom
@@ -477,7 +506,7 @@
}
-@@ -4053,13 +4149,16 @@
+@@ -4055,13 +4167,16 @@
if (serverFrame)
{
@@ -495,7 +524,7 @@
}
/* Below with no sibling puts the window at the bottom
-@@ -4072,8 +4171,15 @@
+@@ -4074,8 +4189,15 @@
}
else if (sibling)
{
@@ -512,7 +541,7 @@
{
mask |= CWSibling | CWStackMode;
-@@ -6150,8 +6256,6 @@ >overrideRedire ctRestack (priv->id, aboveId);
+@@ -6152,8 +6274,6 @@
if (dbg)
dbg-
@@ -521,7 +550,7 @@ >serverGeometry .set (priv->attrib.x, priv->attrib.y,
priv- >attrib. width, priv->attrib. height, indow (screen->dpy (), wrapper);
priv->attrib = wa;
priv-
-@@ -7085,9 +7189,15 @@
+@@ -7087,9 +7207,15 @@
XUnmapWindow (screen->dpy (), serverFrame);
XDestroyW