compiz team mailing list archive
-
compiz team
-
Mailing list archive
-
Message #23126
[Merge] lp:~smspillaz/compcomm-plugins-main/compcomm-plugins-main.SRU1 into lp:~compiz/compcomm-plugins-main/ubuntu
Sam Spilsbury has proposed merging lp:~smspillaz/compcomm-plugins-main/compcomm-plugins-main.SRU1 into lp:~compiz/compcomm-plugins-main/ubuntu.
Requested reviews:
compiz packagers (compiz)
For more details, see:
https://code.launchpad.net/~smspillaz/compcomm-plugins-main/compcomm-plugins-main.SRU1/+merge/78630
--
https://code.launchpad.net/~smspillaz/compcomm-plugins-main/compcomm-plugins-main.SRU1/+merge/78630
Your team compiz packagers is requested to review the proposed merge of lp:~smspillaz/compcomm-plugins-main/compcomm-plugins-main.SRU1 into lp:~compiz/compcomm-plugins-main/ubuntu.
=== modified file 'debian/compiz-plugins-main-default.install'
--- debian/compiz-plugins-main-default.install 2011-08-23 19:21:20 +0000
+++ debian/compiz-plugins-main-default.install 2011-10-07 16:27:28 +0000
@@ -1,22 +1,33 @@
debian/tmp/usr/*/compiz/*animation.*
debian/tmp/usr/share/gconf/schemas/*animation.*
+debian/tmp/usr/share/glib-2.0/schemas/*animation.*
debian/tmp/usr/*/compiz/*expo.*
debian/tmp/usr/share/gconf/schemas/*expo.*
+debian/tmp/usr/share/glib-2.0/schemas/*expo.*
debian/tmp/usr/*/compiz/*ezoom.*
debian/tmp/usr/share/gconf/schemas/*ezoom.*
+debian/tmp/usr/share/glib-2.0/schemas/*ezoom.*
debian/tmp/usr/*/compiz/*grid.*
debian/tmp/usr/share/gconf/schemas/*grid.*
+debian/tmp/usr/share/glib-2.0/schemas/*grid.*
debian/tmp/usr/*/compiz/*mousepoll.*
debian/tmp/usr/share/gconf/schemas/*mousepoll.*
+debian/tmp/usr/share/glib-2.0/schemas/*mousepoll.*
debian/tmp/usr/*/compiz/*session.*
debian/tmp/usr/share/gconf/schemas/*session.*
+debian/tmp/usr/share/glib-2.0/schemas/*session.*
debian/tmp/usr/*/compiz/*snap.*
debian/tmp/usr/share/gconf/schemas/*snap.*
+debian/tmp/usr/share/glib-2.0/schemas/*snap.*
debian/tmp/usr/*/compiz/*staticswitcher.*
debian/tmp/usr/share/gconf/schemas/*staticswitcher.*
+debian/tmp/usr/share/glib-2.0/schemas/*staticswitcher.*
debian/tmp/usr/*/compiz/*vpswitch.*
debian/tmp/usr/share/gconf/schemas/*vpswitch.*
+debian/tmp/usr/share/glib-2.0/schemas/*vpswitch.*
debian/tmp/usr/*/compiz/*wall.*
debian/tmp/usr/share/gconf/schemas/*wall.*
+debian/tmp/usr/share/glib-2.0/schemas/*wall.*
debian/tmp/usr/*/compiz/*workarounds.*
debian/tmp/usr/share/gconf/schemas/*workarounds.*
+debian/tmp/usr/share/glib-2.0/schemas/*workarounds.*
=== modified file 'debian/compiz-plugins-main.install'
--- debian/compiz-plugins-main.install 2011-08-23 19:21:20 +0000
+++ debian/compiz-plugins-main.install 2011-10-07 16:27:28 +0000
@@ -1,30 +1,44 @@
debian/tmp/usr/*/compiz/*colorfilter.*
debian/tmp/usr/share/gconf/schemas/*colorfilter.*
+debian/tmp/usr/share/glib-2.0/schemas/*colorfilter.*
debian/tmp/usr/share/compiz/colorfilter
debian/tmp/usr/*/compiz/*imgjpeg.*
debian/tmp/usr/share/gconf/schemas/*imgjpeg.*
+debian/tmp/usr/share/glib-2.0/schemas/*imgjpeg.*
debian/tmp/usr/*/compiz/*kdecompat.*
debian/tmp/usr/share/gconf/schemas/*kdecompat.*
+debian/tmp/usr/share/glib-2.0/schemas/*kdecompat.*
debian/tmp/usr/*/compiz/*mag.*
debian/tmp/usr/share/gconf/schemas/*mag.*
+debian/tmp/usr/share/glib-2.0/schemas/*mag.*
debian/tmp/usr/share/compiz/mag
debian/tmp/usr/*/compiz/*neg.*
debian/tmp/usr/share/gconf/schemas/*neg.*
+debian/tmp/usr/share/glib-2.0/schemas/*neg.*
debian/tmp/usr/*/compiz/*opacify.*
debian/tmp/usr/share/gconf/schemas/*opacify.*
+debian/tmp/usr/share/glib-2.0/schemas/*opacify.*
debian/tmp/usr/*/compiz/*put.*
debian/tmp/usr/share/gconf/schemas/*put.*
+debian/tmp/usr/share/glib-2.0/schemas/*put.*
debian/tmp/usr/*/compiz/*resizeinfo.*
debian/tmp/usr/share/gconf/schemas/*resizeinfo.*
+debian/tmp/usr/share/glib-2.0/schemas/*resizeinfo.*
debian/tmp/usr/*/compiz/*ring.*
debian/tmp/usr/share/gconf/schemas/*ring.*
+debian/tmp/usr/share/glib-2.0/schemas/*ring.*
debian/tmp/usr/*/compiz/*scaleaddon.*
debian/tmp/usr/share/gconf/schemas/*scaleaddon.*
+debian/tmp/usr/share/glib-2.0/schemas/*scaleaddon.*
debian/tmp/usr/*/compiz/*shift.*
debian/tmp/usr/share/gconf/schemas/*shift.*
+debian/tmp/usr/share/glib-2.0/schemas/*shift.*
debian/tmp/usr/*/compiz/*text.*
debian/tmp/usr/share/gconf/schemas/*text.*
+debian/tmp/usr/share/glib-2.0/schemas/*text.*
debian/tmp/usr/*/compiz/*thumbnail.*
debian/tmp/usr/share/gconf/schemas/*thumbnail.*
+debian/tmp/usr/share/glib-2.0/schemas/*thumbnail.*
debian/tmp/usr/*/compiz/*winrules.*
debian/tmp/usr/share/gconf/schemas/*winrules.*
+debian/tmp/usr/share/glib-2.0/schemas/*winrules.*
=== added file 'debian/patches/fix-827560.patch'
--- debian/patches/fix-827560.patch 1970-01-01 00:00:00 +0000
+++ debian/patches/fix-827560.patch 2011-10-07 16:27:28 +0000
@@ -0,0 +1,297 @@
+=== modified file 'src/grid.cpp'
+Index: compiz-plugins-main-0.9.6/grid/src/grid.cpp
+===================================================================
+--- compiz-plugins-main-0.9.6.orig/grid/src/grid.cpp 2011-09-28 16:58:20.000000000 +0800
++++ compiz-plugins-main-0.9.6/grid/src/grid.cpp 2011-10-08 00:14:22.616441019 +0800
+@@ -24,6 +24,8 @@
+
+ #include "grid.h"
+
++using namespace GridWindowType;
++
+ static const GridProps gridProps[] =
+ {
+ {0,1, 1,1},
+@@ -145,12 +147,23 @@
+ xid = CompOption::getIntOptionNamed (option, "window");
+ cw = screen->findWindow (xid);
+
+- if (where == GridUnknown || screen->otherGrabExist ("move", NULL))
+- return false;
+-
+ if (cw)
+ {
+ XWindowChanges xwc;
++ bool maximizeH = where & (GridBottom | GridTop | GridMaximize);
++ bool maximizeV = where & (GridLeft | GridRight | GridMaximize);
++
++ if (!(cw->actions () & CompWindowActionResizeMask))
++ return false;
++
++ if (maximizeH && !(cw->actions () & CompWindowActionMaximizeHorzMask))
++ return false;
++
++ if (maximizeV && !(cw->actions () & CompWindowActionMaximizeVertMask))
++ return false;
++
++ if (where == GridUnknown)
++ return false;
+
+ GRID_WINDOW (cw);
+
+@@ -339,13 +352,42 @@
+ /* TODO: animate move+resize */
+ if (resize)
+ {
+- cw->configureXWindow (CWX | CWY | CWWidth | CWHeight, &xwc);
+- gw->isGridResized = true;
+- gw->isGridMaximized = false;
+- for (unsigned int i = 0; i < animations.size (); i++)
+- animations.at (i).fadingOut = true;
++ unsigned int valueMask = CWX | CWY | CWWidth | CWHeight;
+ gw->lastTarget = where;
+ gw->currentSize = CompRect (wc.x, wc.y, wc.width, wc.height);
++
++ /* Special case for left and right, actually vertically maximize
++ * the window */
++ if (where == GridLeft || where == GridRight)
++ {
++ /* First restore the window to its original size */
++ XWindowChanges rwc;
++
++ rwc.x = gw->originalSize.x ();
++ rwc.y = gw->originalSize.y ();
++ rwc.width = gw->originalSize.width ();
++ rwc.height = gw->originalSize.height ();
++
++ cw->configureXWindow (CWX | CWY | CWWidth | CWHeight, &rwc);
++
++ gw->isGridMaximized = true;
++ gw->isGridResized = false;
++
++ gw->lastBorder = cw->border ();
++ /* Maximize the window */
++ cw->maximize (CompWindowStateMaximizedVertMask);
++ }
++ else
++ {
++ gw->isGridResized = true;
++ gw->isGridMaximized = false;
++ }
++
++ /* Make window the size that we want */
++ cw->configureXWindow (valueMask, &xwc);
++
++ for (unsigned int i = 0; i < animations.size (); i++)
++ animations.at (i).fadingOut = true;
+ }
+
+ /* This centers a window if it could not be resized to the desired
+@@ -621,20 +663,23 @@
+ if (edge != NoEdge && check)
+ {
+ CompWindow *cw = screen->findWindow (screen->activeWindow ());
+- animations.push_back (Animation ());
+- int current = animations.size () - 1;
+- animations.at (current).fromRect = cw->serverBorderRect ();
+- animations.at (current).currentRect = cw->serverBorderRect ();
+- animations.at (current).timer = animations.at (current).duration;
+- animations.at (current).targetRect = desiredSlot;
+-
+- if (lastEdge == NoEdge || !animating)
++ if (cw)
+ {
++ animations.push_back (Animation ());
++ int current = animations.size () - 1;
++ animations.at (current).fromRect = cw->serverBorderRect ();
++ animations.at (current).currentRect = cw->serverBorderRect ();
++ animations.at (current).timer = animations.at (current).duration;
++ animations.at (current).targetRect = desiredSlot;
++
++ if (lastEdge == NoEdge || !animating)
++ {
+ /* Cursor has entered edge region from non-edge region */
+ animating = true;
+ glScreen->glPaintOutputSetEnabled (this, true);
+ cScreen->preparePaintSetEnabled (this, true);
+ cScreen->donePaintSetEnabled (this, true);
++ }
+ }
+ }
+ }
+@@ -664,21 +709,22 @@
+ unsigned int state,
+ unsigned int mask)
+ {
+- if (screen->grabExist ("move"))
++ if (mask & (CompWindowGrabMoveMask | CompWindowGrabButtonMask))
+ {
+ gScreen->o[0].value ().set ((int) window->id ());
+
+ screen->handleEventSetEnabled (gScreen, true);
+ gScreen->mGrabWindow = window;
+ pointerBufDx = pointerBufDy = 0;
++ grabMask = mask;
+
+- if (!isGridResized && gScreen->optionGetSnapbackWindows ())
++ if (!isGridResized && !isGridMaximized && gScreen->optionGetSnapbackWindows ())
+ /* Store size not including borders when grabbing with cursor */
+ originalSize = gScreen->slotToRect(window,
+ window->serverBorderRect ());
+ }
+
+- if (screen->grabExist ("resize"))
++ if (mask & CompWindowGrabResizeMask)
+ {
+ isGridResized = false;
+ resizeCount = 0;
+@@ -697,6 +743,7 @@
+ gScreen->edge != gScreen->lastResizeEdge);
+
+ screen->handleEventSetEnabled (gScreen, false);
++ grabMask = 0;
+ gScreen->mGrabWindow = NULL;
+ gScreen->o[0].value ().set (0);
+ gScreen->cScreen->damageRegion (gScreen->desiredSlot);
+@@ -715,7 +762,7 @@
+
+ if (isGridResized && !isGridMaximized && !GridScreen::get (screen)->mSwitchingVp)
+ {
+- if (window->grabbed ())
++ if (window->grabbed () && (grabMask & CompWindowGrabMoveMask))
+ {
+ pointerBufDx += dx;
+ pointerBufDy += dy;
+@@ -738,11 +785,49 @@
+ lastTarget = GridUnknown;
+ else if (!(lastState & MAXIMIZE_STATE) &&
+ window->state () & MAXIMIZE_STATE)
++ {
+ lastTarget = GridMaximize;
++ if (window->grabbed ())
++ {
++ originalSize = gScreen->slotToRect (window,
++ window->serverBorderRect ());
++ }
++ }
+
+ window->stateChangeNotify (lastState);
+-}
++}
++
++void
++GridWindow::windowNotify (CompWindowNotify n)
++{
++ if (n == CompWindowNotifyFrameUpdate)
++ {
++ if (isGridMaximized && !((window->state () & MAXIMIZE_STATE) == MAXIMIZE_STATE))
++ {
++ unsigned int valueMask = 0;
++ XWindowChanges xwc;
++
++ int dw = (lastBorder.left + lastBorder.right) -
++ (window->border ().left + window->border ().right);
++
++ int dh = (lastBorder.top + lastBorder.bottom) -
++ (window->border ().top + window->border ().bottom);
++
++ if (dw != 0)
++ valueMask |= CWWidth;
++ if (dh != 0)
++ valueMask |= CWHeight;
++ xwc.width = window->serverGeometry ().width () + dw;
++ xwc.height = window->serverGeometry ().height () + dh;
+
++ window->configureXWindow (valueMask, &xwc);
++ }
++
++ lastBorder = window->border ();
++ }
++
++ window->windowNotify (n);
++}
+ bool
+ GridScreen::restoreWindow (CompAction *action,
+ CompAction::State state,
+@@ -929,6 +1014,7 @@
+ gScreen (GridScreen::get (screen)),
+ isGridResized (false),
+ isGridMaximized (false),
++ grabMask (0),
+ pointerBufDx (0),
+ pointerBufDy (0),
+ resizeCount (0),
+Index: compiz-plugins-main-0.9.6/grid/src/grid.h
+===================================================================
+--- compiz-plugins-main-0.9.6.orig/grid/src/grid.h 2011-09-28 16:58:20.000000000 +0800
++++ compiz-plugins-main-0.9.6/grid/src/grid.h 2011-10-08 00:14:22.616441019 +0800
+@@ -32,20 +32,22 @@
+
+ #define SNAPOFF_THRESHOLD 50
+
+-typedef enum
++namespace GridWindowType
+ {
+- GridUnknown = 0,
+- GridBottomLeft = 1,
+- GridBottom = 2,
+- GridBottomRight = 3,
+- GridLeft = 4,
+- GridCenter = 5,
+- GridRight = 6,
+- GridTopLeft = 7,
+- GridTop = 8,
+- GridTopRight = 9,
+- GridMaximize = 10
+-} GridType;
++ static const unsigned int GridUnknown = (1 << 0);
++ static const unsigned int GridBottomLeft = (1 << 1);
++ static const unsigned int GridBottom = (1 << 2);
++ static const unsigned int GridBottomRight = (1 << 3);
++ static const unsigned int GridLeft = (1 << 4);
++ static const unsigned int GridCenter = (1 << 5);
++ static const unsigned int GridRight = (1 << 6);
++ static const unsigned int GridTopLeft = (1 << 7);
++ static const unsigned int GridTop = (1 << 8);
++ static const unsigned int GridTopRight = (1 << 9);
++ static const unsigned int GridMaximize = (1 << 10);
++};
++
++typedef unsigned int GridType;
+
+ typedef struct _GridProps
+ {
+@@ -160,11 +162,13 @@
+
+ bool isGridResized;
+ bool isGridMaximized;
++ unsigned int grabMask;
+ int pointerBufDx;
+ int pointerBufDy;
+ int resizeCount;
+ CompRect currentSize;
+ CompRect originalSize;
++ CompWindowExtents lastBorder;
+ GridType lastTarget;
+
+ void grabNotify (int, int, unsigned int, unsigned int);
+@@ -174,6 +178,8 @@
+ void moveNotify (int, int, bool);
+
+ void stateChangeNotify (unsigned int);
++
++ void windowNotify (CompWindowNotify n);
+ };
+
+ #define GRID_WINDOW(w) \
+Index: compiz-plugins-main-0.9.6/grid/CMakeLists.txt
+===================================================================
+--- compiz-plugins-main-0.9.6.orig/grid/CMakeLists.txt 2011-10-08 00:15:04.064646551 +0800
++++ compiz-plugins-main-0.9.6/grid/CMakeLists.txt 2011-10-08 00:15:24.224746544 +0800
+@@ -2,4 +2,6 @@
+
+ include (CompizPlugin)
+
++set (CMAKE_CXX_FLAGS --std=c++0x)
++
+ compiz_plugin(grid PLUGINDEPS composite opengl)
=== added file 'debian/patches/fix-834585.patch'
--- debian/patches/fix-834585.patch 1970-01-01 00:00:00 +0000
+++ debian/patches/fix-834585.patch 2011-10-07 16:27:28 +0000
@@ -0,0 +1,37 @@
+=== modified file 'src/grid.cpp'
+Index: compiz-plugins-main-0.9.6/grid/src/grid.cpp
+===================================================================
+--- compiz-plugins-main-0.9.6.orig/grid/src/grid.cpp 2011-10-08 00:03:01.301062568 +0800
++++ compiz-plugins-main-0.9.6/grid/src/grid.cpp 2011-10-08 00:03:28.497197395 +0800
+@@ -663,23 +663,20 @@
+ if (edge != NoEdge && check)
+ {
+ CompWindow *cw = screen->findWindow (screen->activeWindow ());
+- if (cw)
+- {
+- animations.push_back (Animation ());
+- int current = animations.size () - 1;
+- animations.at (current).fromRect = cw->serverBorderRect ();
+- animations.at (current).currentRect = cw->serverBorderRect ();
+- animations.at (current).timer = animations.at (current).duration;
+- animations.at (current).targetRect = desiredSlot;
++ animations.push_back (Animation ());
++ int current = animations.size () - 1;
++ animations.at (current).fromRect = cw->serverBorderRect ();
++ animations.at (current).currentRect = cw->serverBorderRect ();
++ animations.at (current).timer = animations.at (current).duration;
++ animations.at (current).targetRect = desiredSlot;
+
+- if (lastEdge == NoEdge || !animating)
+- {
++ if (lastEdge == NoEdge || !animating)
++ {
+ /* Cursor has entered edge region from non-edge region */
+ animating = true;
+ glScreen->glPaintOutputSetEnabled (this, true);
+ cScreen->preparePaintSetEnabled (this, true);
+ cScreen->donePaintSetEnabled (this, true);
+- }
+ }
+ }
+ }
=== added file 'debian/patches/fix-853951.patch'
--- debian/patches/fix-853951.patch 1970-01-01 00:00:00 +0000
+++ debian/patches/fix-853951.patch 2011-10-07 16:27:28 +0000
@@ -0,0 +1,180 @@
+=== modified file 'src/expo.cpp'
+Index: compiz-plugins-main-0.9.6/expo/src/expo.cpp
+===================================================================
+--- compiz-plugins-main-0.9.6.orig/expo/src/expo.cpp 2011-10-04 01:21:03.253549136 +0800
++++ compiz-plugins-main-0.9.6/expo/src/expo.cpp 2011-10-04 01:21:22.253643351 +0800
+@@ -274,7 +274,7 @@
+ screen->vp ().y () - selectedVp.y (), true);
+
+ /* update saved window attributes in case we moved the
+- window to a new viewport */
++ window to a new viewport */
+ if (dndWindow->saveMask () & CWX)
+ {
+ dndWindow->saveWc ().x = dndWindow->saveWc ().x % screen->width ();
+@@ -289,11 +289,13 @@
+ }
+
+ /* update window attibutes to make sure a moved maximized window
+- is properly snapped to the work area */
++ is properly snapped to the work area */
+ if (dndWindow->state () & MAXIMIZE_STATE)
+ dndWindow->updateAttributes (CompStackingUpdateModeNone);
+ }
+ }
++
++ dndWindows.clear ();
+ }
+
+ void
+@@ -394,29 +396,6 @@
+ else
+ expoCam = MAX (0.0, expoCam - val);
+
+- if (dndState == DnDDuring)
+- {
+- foreach (CompWindow *w, dndWindows)
+- ExpoWindow::get (w)->dndOpacity = MIN (1.0, ExpoWindow::get (w)->dndOpacity + val);
+- }
+- else if (dndState == DnDNone)
+- {
+- CompWindowList::iterator it = dndWindows.begin ();
+-
+- while (it != dndWindows.end ())
+- {
+- ExpoWindow::get ((*it))->dndOpacity = MAX (0.0, ExpoWindow::get ((*it))->dndOpacity - val);
+-
+- if (ExpoWindow::get ((*it))->dndOpacity <= 0.0f)
+- {
+- dndWindows.erase (it);
+- it = dndWindows.begin ();
+- }
+- else
+- it++;
+- }
+- }
+-
+ if (expoCam)
+ {
+ unsigned int i, j, vp;
+@@ -545,11 +524,6 @@
+ foreach (float& vp, vpActivity)
+ if (vp != 0.0 && vp != 1.0)
+ cScreen->damageScreen ();
+-
+- foreach (CompWindow *w, dndWindows)
+- if (ExpoWindow::get (w)->dndOpacity != 0.0f &&
+- ExpoWindow::get (w)->dndOpacity != 1.0f)
+- cScreen->damageScreen ();
+ }
+
+ if (grabIndex && expoCam <= 0.0f && !expoMode)
+@@ -557,6 +531,7 @@
+ screen->removeGrab (grabIndex, NULL);
+ grabIndex = 0;
+ updateWraps (false);
++ cScreen->damageScreen ();
+ }
+
+ cScreen->donePaint ();
+@@ -640,7 +615,9 @@
+ break;
+
+ dndState = DnDDuring;
+- dndWindows.push_back (w);
++
++ if (std::find (dndWindows.begin (), dndWindows.end (), w) == dndWindows.end ())
++ dndWindows.push_back (w);
+
+ w->grabNotify (nx, ny, 0,
+ CompWindowGrabMoveMask |
+@@ -808,7 +785,6 @@
+ }
+
+ cScreen->getWindowPaintListSetEnabled (this, paintingDndWindow);
+-
+ gScreen->glPaintTransformedOutput (attrib, sTransform3,
+ screen->region (), output,
+ mask);
+@@ -1053,7 +1029,7 @@
+ while (vp.y () < 0)
+ vp.setY (screen->vpSize ().height () + vp.y ());
+
+- paintViewport (attrib, sTransform, infiniteRegion, output, mask, vp, vpCamPos, reflection);
++ paintViewport (attrib, sTransform, region, output, mask, vp, vpCamPos, reflection);
+ }
+
+ paintingDndWindow = false;
+@@ -1228,7 +1204,7 @@
+ }
+ }
+
+- if (vp == eScreen->paintingVp || window->onAllViewports ())
++ if ((vp == eScreen->paintingVp || window->onAllViewports ()) && !eScreen->paintingDndWindow)
+ {
+ fA.setBrightness (fragment.getBrightness () * eScreen->vpBrightness);
+ fA.setSaturation (fragment.getSaturation () * eScreen->vpSaturation);
+@@ -1316,7 +1292,6 @@
+ }
+
+ }
+-
+ return status;
+
+ }
+@@ -1463,6 +1438,7 @@
+ GLMatrix wTransform (transform);
+ GLWindowPaintAttrib wAttrib (attrib);
+ CompPoint vp;
++ CompRegion clip (region);
+
+ screen->viewportForGeometry (window->geometry (), vp);
+
+@@ -1505,6 +1481,7 @@
+
+ /* Stretch maximized windows a little so that you don't
+ * have an awkward gap */
++
+ if (window->state () & MAXIMIZE_STATE)
+ {
+ CompOutput *o = &screen->outputDevs ()[screen->outputDeviceForGeometry(window->geometry())];
+@@ -1522,27 +1499,21 @@
+
+ mask |= PAINT_WINDOW_TRANSFORMED_MASK;
+ }
+-
++
+ if (std::find (eScreen->dndWindows.begin(), eScreen->dndWindows.end (), window) != eScreen->dndWindows.end ())
+ {
+ if (!eScreen->paintingDndWindow)
+ {
+- if ((1.0f - dndOpacity) <= 0.0f || (eScreen->paintingVp == vp &&
+- eScreen->dndState != ExpoScreen::DnDNone))
+- mask |= PAINT_WINDOW_NO_CORE_INSTANCE_MASK;
+- else if (!window->region ().subtracted (screen->region ()).isEmpty () &&
+- eScreen->paintingVp != vp)
+- wAttrib.opacity = wAttrib.opacity * (1.0f - dndOpacity);
++ mask |= PAINT_WINDOW_NO_CORE_INSTANCE_MASK;
+ }
+ else
+ {
+ mask |= PAINT_WINDOW_TRANSFORMED_MASK;
+- if (!window->region ().subtracted (screen->region ()).isEmpty ())
+- wAttrib.opacity = wAttrib.opacity * dndOpacity;
++ clip = infiniteRegion;
+ }
+ }
+
+- bool status = gWindow->glPaint (wAttrib, wTransform, region, mask);
++ bool status = gWindow->glPaint (wAttrib, wTransform, clip, mask);
+
+ return status;
+ }
+@@ -1661,7 +1632,6 @@
+ cWindow (CompositeWindow::get (w)),
+ gWindow (GLWindow::get (w)),
+ eScreen (ExpoScreen::get (screen)),
+- dndOpacity (0.0f),
+ mGlowQuads (NULL)
+ {
+ CompositeWindowInterface::setHandler (cWindow, false);
=== added file 'debian/patches/fix-856177-865179.patch'
--- debian/patches/fix-856177-865179.patch 1970-01-01 00:00:00 +0000
+++ debian/patches/fix-856177-865179.patch 2011-10-07 16:27:28 +0000
@@ -0,0 +1,53 @@
+=== modified file 'src/grid.cpp'
+Index: compiz-plugins-main-0.9.6/grid/src/grid.cpp
+===================================================================
+--- compiz-plugins-main-0.9.6.orig/grid/src/grid.cpp 2011-10-07 20:49:30.011485286 +0800
++++ compiz-plugins-main-0.9.6/grid/src/grid.cpp 2011-10-07 20:51:50.544182148 +0800
+@@ -239,7 +239,7 @@
+
+ if (desiredRect.y () == currentRect.y () &&
+ desiredRect.height () == currentRect.height () &&
+- where != GridMaximize && gw->lastTarget == where)
++ where & ~(GridMaximize | GridLeft | GridRight) && gw->lastTarget & where)
+ {
+ int slotWidth25 = workarea.width () / 4;
+ int slotWidth33 = (workarea.width () / 3) + cw->border ().left;
+@@ -376,6 +376,12 @@
+ gw->lastBorder = cw->border ();
+ /* Maximize the window */
+ cw->maximize (CompWindowStateMaximizedVertMask);
++ /* Be evil */
++ if (cw->sizeHints ().flags & PResizeInc)
++ {
++ gw->sizeHintsFlags |= PResizeInc;
++ gw->window->sizeHints ().flags &= ~(PResizeInc);
++ }
+ }
+ else
+ {
+Index: compiz-plugins-main-0.9.6/grid/src/grid.h
+===================================================================
+--- compiz-plugins-main-0.9.6.orig/grid/src/grid.h 2011-10-07 20:49:30.011485286 +0800
++++ compiz-plugins-main-0.9.6/grid/src/grid.h 2011-10-07 20:51:08.995976136 +0800
+@@ -168,8 +168,8 @@
+ int resizeCount;
+ CompRect currentSize;
+ CompRect originalSize;
+- CompWindowExtents lastBorder;
+ GridType lastTarget;
++ unsigned int sizeHintsFlags;
+
+ void grabNotify (int, int, unsigned int, unsigned int);
+
+@@ -178,8 +178,9 @@
+ void moveNotify (int, int, bool);
+
+ void stateChangeNotify (unsigned int);
+-
+- void windowNotify (CompWindowNotify n);
++ void validateResizeRequest (unsigned int &valueMask,
++ XWindowChanges *xwc,
++ unsigned int source);
+ };
+
+ #define GRID_WINDOW(w) \
=== added file 'debian/patches/fix-862260.patch'
--- debian/patches/fix-862260.patch 1970-01-01 00:00:00 +0000
+++ debian/patches/fix-862260.patch 2011-10-07 16:27:28 +0000
@@ -0,0 +1,270 @@
+=== modified file 'CMakeLists.txt'
+Index: compiz-plugins-main-0.9.6/grid/src/grid.cpp
+===================================================================
+--- compiz-plugins-main-0.9.6.orig/grid/src/grid.cpp 2011-10-07 20:51:50.544182148 +0800
++++ compiz-plugins-main-0.9.6/grid/src/grid.cpp 2011-10-07 20:52:34.088398081 +0800
+@@ -26,24 +26,7 @@
+
+ using namespace GridWindowType;
+
+-static const GridProps gridProps[] =
+-{
+- {0,1, 1,1},
+-
+- {0,1, 2,2},
+- {0,1, 1,2},
+- {1,1, 2,2},
+-
+- {0,0, 2,1},
+- {0,0, 1,1},
+- {1,0, 2,1},
+-
+- {0,0, 2,2},
+- {0,0, 1,2},
+- {1,0, 2,2},
+-
+- {0,0, 1,1},
+-};
++static std::map <unsigned int, GridProps> gridProps;
+
+ void
+ GridScreen::handleCompizEvent(const char* plugin,
+@@ -102,7 +85,7 @@
+ void
+ GridScreen::getPaintRectangle (CompRect &cRect)
+ {
+- if (edgeToGridType () != GridUnknown && optionGetDrawIndicator ())
++ if (typeToMask (edgeToGridType ()) != GridUnknown && optionGetDrawIndicator ())
+ cRect = desiredSlot;
+ else
+ cRect.setGeometry (0, 0, 0, 0);
+@@ -137,7 +120,7 @@
+ GridScreen::initiateCommon (CompAction *action,
+ CompAction::State state,
+ CompOption::Vector &option,
+- GridType where,
++ unsigned int where,
+ bool resize,
+ bool key)
+ {
+@@ -162,12 +145,12 @@
+ if (maximizeV && !(cw->actions () & CompWindowActionMaximizeVertMask))
+ return false;
+
+- if (where == GridUnknown)
++ if (where & GridUnknown)
+ return false;
+
+ GRID_WINDOW (cw);
+
+- if (gw->lastTarget != where)
++ if (gw->lastTarget & ~(where))
+ gw->resizeCount = 0;
+ else if (!key)
+ return false;
+@@ -197,7 +180,7 @@
+ cw->maximize (0);
+ }
+
+- if (where == GridMaximize && resize)
++ if ((where & GridMaximize) && resize)
+ {
+ /* move the window to the correct output */
+ if (cw == mGrabWindow)
+@@ -358,7 +341,7 @@
+
+ /* Special case for left and right, actually vertically maximize
+ * the window */
+- if (where == GridLeft || where == GridRight)
++ if (where & GridLeft || where & GridRight)
+ {
+ /* First restore the window to its original size */
+ XWindowChanges rwc;
+@@ -539,39 +522,72 @@
+ return status;
+ }
+
+-GridType
++unsigned int
++GridScreen::typeToMask (int t)
++{
++ typedef struct {
++ unsigned int mask;
++ int type;
++ } GridTypeMask;
++
++ std::vector <GridTypeMask> type =
++ {
++ { GridWindowType::GridUnknown, 0 },
++ { GridWindowType::GridBottomLeft, 1 },
++ { GridWindowType::GridBottom, 2 },
++ { GridWindowType::GridBottomRight, 3 },
++ { GridWindowType::GridLeft, 4 },
++ { GridWindowType::GridCenter, 5 },
++ { GridWindowType::GridRight, 6 },
++ { GridWindowType::GridTopLeft, 7 },
++ { GridWindowType::GridTop, 8 },
++ { GridWindowType::GridTopRight, 9 },
++ { GridWindowType::GridMaximize, 10 }
++ };
++
++ for (unsigned int i = 0; i < type.size (); i++)
++ {
++ GridTypeMask &tm = type[i];
++ if (tm.type == t)
++ return tm.mask;
++ }
++
++ return GridWindowType::GridUnknown;
++}
++
++int
+ GridScreen::edgeToGridType ()
+ {
+- GridType ret;
++ int ret;
+
+ switch (edge) {
+ case Left:
+- ret = (GridType) optionGetLeftEdgeAction ();
++ ret = (int) optionGetLeftEdgeAction ();
+ break;
+ case Right:
+- ret = (GridType) optionGetRightEdgeAction ();
++ ret = (int) optionGetRightEdgeAction ();
+ break;
+ case Top:
+- ret = (GridType) optionGetTopEdgeAction ();
++ ret = (int) optionGetTopEdgeAction ();
+ break;
+ case Bottom:
+- ret = (GridType) optionGetBottomEdgeAction ();
++ ret = (int) optionGetBottomEdgeAction ();
+ break;
+ case TopLeft:
+- ret = (GridType) optionGetTopLeftCornerAction ();
++ ret = (int) optionGetTopLeftCornerAction ();
+ break;
+ case TopRight:
+- ret = (GridType) optionGetTopRightCornerAction ();
++ ret = (int) optionGetTopRightCornerAction ();
+ break;
+ case BottomLeft:
+- ret = (GridType) optionGetBottomLeftCornerAction ();
++ ret = (int) optionGetBottomLeftCornerAction ();
+ break;
+ case BottomRight:
+- ret = (GridType) optionGetBottomRightCornerAction ();
++ ret = (int) optionGetBottomRightCornerAction ();
+ break;
+ case NoEdge:
+ default:
+- ret = GridUnknown;
++ ret = -1;
+ break;
+ }
+
+@@ -637,7 +653,7 @@
+ if (cScreen)
+ cScreen->damageRegion (desiredSlot);
+
+- initiateCommon (0, 0, o, edgeToGridType (), false, false);
++ initiateCommon (0, 0, o, typeToMask (edgeToGridType ()), false, false);
+
+ if (cScreen)
+ cScreen->damageRegion (desiredSlot);
+@@ -655,7 +671,7 @@
+ if (cScreen)
+ cScreen->damageRegion (desiredSlot);
+
+- check = initiateCommon (0, 0, o, edgeToGridType (), false, false);
++ check = initiateCommon (NULL, 0, o, typeToMask (edgeToGridType ()), false, false);
+
+ if (cScreen)
+ cScreen->damageRegion (desiredSlot);
+@@ -742,7 +758,7 @@
+ if (window == gScreen->mGrabWindow)
+ {
+ gScreen->initiateCommon
+- (0, 0, gScreen->o, gScreen->edgeToGridType (), true,
++ (NULL, 0, gScreen->o, gScreen->typeToMask (gScreen->edgeToGridType ()), true,
+ gScreen->edge != gScreen->lastResizeEdge);
+
+ screen->handleEventSetEnabled (gScreen, false);
+@@ -776,6 +792,8 @@
+ dx = currentSize.x () - window->geometry ().x ();
+ dy = currentSize.y () - window->geometry ().y ();
+
++ printf ("offset move\n");
++
+ window->move (dx, dy);
+ }
+ }
+@@ -983,6 +1001,17 @@
+ edge = lastEdge = lastResizeEdge = NoEdge;
+ currentWorkarea = lastWorkarea = screen->getWorkareaForOutput
+ (screen->outputDeviceForPoint (pointerX, pointerY));
++ gridProps[GridUnknown] = GridProps {0,1, 1,1};
++ gridProps[GridBottomLeft] = GridProps {0,1, 2,2};
++ gridProps[GridBottom] = GridProps {0,1, 1,2};
++ gridProps[GridBottomRight] = GridProps {1,1, 2,2};
++ gridProps[GridLeft] = GridProps {0,0, 2,1};
++ gridProps[GridCenter] = GridProps{0,0, 1,1};
++ gridProps[GridRight] = GridProps {1,0, 2,1};
++ gridProps[GridTopLeft] = GridProps{0,0, 2,2};
++ gridProps[GridTop] = GridProps {0,0, 1,2};
++ gridProps[GridTopRight] = GridProps {0,0, 1,2};
++ gridProps[GridMaximize] = GridProps {0,0, 1,1};
+
+ animations.clear ();
+
+@@ -990,16 +1019,16 @@
+ optionSet##opt##Initiate (boost::bind (&GridScreen::initiateCommon, this, \
+ _1, _2, _3, where, resize, key))
+
+- GRIDSET (PutCenterKey, GridCenter, true, true);
+- GRIDSET (PutLeftKey, GridLeft, true, true);
+- GRIDSET (PutRightKey, GridRight, true, true);
+- GRIDSET (PutTopKey, GridTop, true, true);
+- GRIDSET (PutBottomKey, GridBottom, true, true);
+- GRIDSET (PutTopleftKey, GridTopLeft, true, true);
+- GRIDSET (PutToprightKey, GridTopRight, true, true);
+- GRIDSET (PutBottomleftKey, GridBottomLeft, true, true);
+- GRIDSET (PutBottomrightKey, GridBottomRight, true, true);
+- GRIDSET (PutMaximizeKey, GridMaximize, true, true);
++ GRIDSET (PutCenterKey, GridWindowType::GridCenter, true, true);
++ GRIDSET (PutLeftKey, GridWindowType::GridLeft, true, true);
++ GRIDSET (PutRightKey, GridWindowType::GridRight, true, true);
++ GRIDSET (PutTopKey, GridWindowType::GridTop, true, true);
++ GRIDSET (PutBottomKey, GridWindowType::GridBottom, true, true);
++ GRIDSET (PutTopleftKey, GridWindowType::GridTopLeft, true, true);
++ GRIDSET (PutToprightKey, GridWindowType::GridTopRight, true, true);
++ GRIDSET (PutBottomleftKey, GridWindowType::GridBottomLeft, true, true);
++ GRIDSET (PutBottomrightKey, GridWindowType::GridBottomRight, true, true);
++ GRIDSET (PutMaximizeKey, GridWindowType::GridMaximize, true, true);
+
+ #undef GRIDSET
+
+Index: compiz-plugins-main-0.9.6/grid/src/grid.h
+===================================================================
+--- compiz-plugins-main-0.9.6.orig/grid/src/grid.h 2011-10-07 20:51:08.995976136 +0800
++++ compiz-plugins-main-0.9.6/grid/src/grid.h 2011-10-07 20:52:00.372230883 +0800
+@@ -114,7 +114,7 @@
+ void setCurrentRect (Animation&);
+
+ bool initiateCommon (CompAction*, CompAction::State,
+- CompOption::Vector&, GridType, bool, bool);
++ CompOption::Vector&, unsigned int, bool, bool);
+
+ void glPaintRectangle (const GLScreenPaintAttrib&,
+ const GLMatrix&, CompOutput *);
+@@ -128,7 +128,8 @@
+
+ std::vector <Animation> animations;
+
+- GridType edgeToGridType ();
++ int edgeToGridType ();
++ unsigned int typeToMask (int);
+
+ void handleEvent (XEvent *event);
+ void handleCompizEvent (const char *plugin, const char *event, CompOption::Vector &options);
=== added file 'debian/patches/fix-862261-860646.patch'
--- debian/patches/fix-862261-860646.patch 1970-01-01 00:00:00 +0000
+++ debian/patches/fix-862261-860646.patch 2011-10-07 16:27:28 +0000
@@ -0,0 +1,142 @@
+=== modified file 'src/snap.cpp'
+Index: compiz-plugins-main-0.9.6/snap/src/snap.cpp
+===================================================================
+--- compiz-plugins-main-0.9.6.orig/snap/src/snap.cpp 2011-10-04 01:27:48.107556695 +0800
++++ compiz-plugins-main-0.9.6/snap/src/snap.cpp 2011-10-04 01:29:25.420039241 +0800
+@@ -396,7 +396,7 @@
+ // Update snapping data
+ if (ss->optionGetSnapTypeMask () & SnapTypeEdgeResistanceMask)
+ {
+- snapped = true;
++ snapGeometry = window->serverGeometry ();
+ this->snapDirection |= snapDirection;
+ }
+ // Attract the window if needed, moving it of the correct dist
+@@ -487,7 +487,7 @@
+ // Update snapping data
+ if (ss->optionGetSnapTypeMask () & SnapTypeEdgeResistanceMask)
+ {
+- snapped = true;
++ snapGeometry = window->serverGeometry ();
+ this->snapDirection |= snapDirection;
+ }
+ // FIXME : this needs resize-specific code.
+@@ -591,7 +591,7 @@
+ // If there's horizontal snapping, add dx to current buffered
+ // dx and resist (move by -dx) or release the window and move
+ // by buffered dx - dx, same for dh
+- if (snapped && snapDirection & HorizontalSnap)
++ if (!snapGeometry.isEmpty () && snapDirection & HorizontalSnap)
+ {
+ m_dx += dx;
+ if (m_dx < ss->optionGetResistanceDistance ()
+@@ -622,7 +622,7 @@
+ }
+
+ // Same for vertical snapping and dy/dh
+- if (snapped && snapDirection & VerticalSnap)
++ if (snapGeometry.isEmpty () && snapDirection & VerticalSnap)
+ {
+ m_dy += dy;
+ if (m_dy < ss->optionGetResistanceDistance ()
+@@ -652,8 +652,8 @@
+ }
+ }
+ // If we are no longer snapping in any direction, reset snapped
+- if (snapped && !snapDirection)
+- snapped = false;
++ if (!snapGeometry.isEmpty () && !snapDirection)
++ snapGeometry = CompWindow::Geometry ();
+ }
+
+ // If we don't already snap vertically and horizontally,
+@@ -681,6 +681,13 @@
+ return;
+ }
+
++ // don't snap maximized windows
++ if (window->state () & CompWindowStateMaximizedHorzMask)
++ dx = 0;
++
++ if (window->state () & CompWindowStateMaximizedVertMask)
++ dy = 0;
++
+ // avoiding snap, nothing buffered
+ if (!ss->snapping)
+ return;
+@@ -691,13 +698,14 @@
+ // If there's horizontal snapping, add dx to current buffered
+ // dx and resist (move by -dx) or release the window and move
+ // by buffered dx - dx
+- if (snapped && snapDirection & HorizontalSnap)
++ if (!snapGeometry.isEmpty () && snapDirection & HorizontalSnap)
+ {
+ m_dx += dx;
+ if (m_dx < ss->optionGetResistanceDistance ()
+ && m_dx > -ss->optionGetResistanceDistance ())
+ {
+- move (-dx, 0);
++ dx = snapGeometry.x () - window->geometry ().x ();
++ move (dx, 0);
+ }
+ else
+ {
+@@ -707,13 +715,14 @@
+ }
+ }
+ // Same for vertical snapping and dy
+- if (snapped && snapDirection & VerticalSnap)
++ if (!snapGeometry.isEmpty () && snapDirection & VerticalSnap)
+ {
+ m_dy += dy;
+ if (m_dy < ss->optionGetResistanceDistance ()
+ && m_dy > -ss->optionGetResistanceDistance ())
+ {
+- move (0, -dy);
++ dy = snapGeometry.y () - window->geometry ().y ();
++ move (0, dy);
+ }
+ else
+ {
+@@ -723,8 +732,8 @@
+ }
+ }
+ // If we are no longer snapping in any direction, reset snapped
+- if (snapped && !snapDirection)
+- snapped = false;
++ if (!snapGeometry.isEmpty () && !snapDirection)
++ snapGeometry = CompWindow::Geometry ();
+ }
+ // If we don't already snap vertically and horizontally,
+ // check edges status
+@@ -753,7 +762,7 @@
+ {
+ edges.clear ();
+
+- snapped = false;
++ snapGeometry = CompWindow::Geometry ();
+ snapDirection = 0;
+ grabbed = 0;
+ m_dx = m_dy = m_dwidth = m_dheight = 0;
+@@ -809,7 +818,7 @@
+ m_dy (0),
+ m_dwidth (0),
+ m_dheight (0),
+- snapped (false),
++ snapGeometry (0, 0, 0, 0, 0),
+ grabbed (0),
+ skipNotify (false)
+ {
+Index: compiz-plugins-main-0.9.6/snap/src/snap.h
+===================================================================
+--- compiz-plugins-main-0.9.6.orig/snap/src/snap.h 2011-10-04 01:27:48.119556749 +0800
++++ compiz-plugins-main-0.9.6/snap/src/snap.h 2011-10-04 01:29:28.364053840 +0800
+@@ -127,7 +127,7 @@
+ int m_dheight;
+
+ // internals
+- bool snapped;
++ CompWindow::Geometry snapGeometry;
+ int grabbed;
+
+ // internal, avoids infinite notify loops
=== added file 'debian/patches/fix-862261.patch'
--- debian/patches/fix-862261.patch 1970-01-01 00:00:00 +0000
+++ debian/patches/fix-862261.patch 2011-10-07 16:27:28 +0000
@@ -0,0 +1,19 @@
+=== modified file 'src/snap.cpp'
+Index: compiz-plugins-main-0.9.6/snap/src/snap.cpp
+===================================================================
+--- compiz-plugins-main-0.9.6.orig/snap/src/snap.cpp 2011-10-08 00:03:55.037329027 +0800
++++ compiz-plugins-main-0.9.6/snap/src/snap.cpp 2011-10-08 00:04:10.165404044 +0800
+@@ -581,6 +581,13 @@
+ return;
+ }
+
++ // don't snap maximized windows
++ if (window->state () & CompWindowStateMaximizedHorzMask)
++ dx = 0;
++
++ if (window->state () & CompWindowStateMaximizedVertMask)
++ dy = 0;
++
+ // avoiding snap, nothing buffered
+ if (!ss->snapping)
+ return;
=== added file 'debian/patches/fix-864476.patch'
--- debian/patches/fix-864476.patch 1970-01-01 00:00:00 +0000
+++ debian/patches/fix-864476.patch 2011-10-07 16:27:28 +0000
@@ -0,0 +1,93 @@
+=== modified file 'src/animation.cpp'
+Index: compiz-plugins-main-0.9.6/animation/src/animation.cpp
+===================================================================
+--- compiz-plugins-main-0.9.6.orig/animation/src/animation.cpp 2011-10-04 01:29:40.068111883 +0800
++++ compiz-plugins-main-0.9.6/animation/src/animation.cpp 2011-10-04 01:29:57.396197802 +0800
+@@ -1343,35 +1343,13 @@
+ }
+ }
+
+- popLockedPaintList ();
+-
+- foreach (CompWindow *w, windowsFinishedAnimations)
+- {
+- AnimWindow *aw = AnimWindow::get (w);
+- aw->priv->notifyAnimation (false);
+- aw->priv->postAnimationCleanUp ();
+- }
+-
+- const CompWindowList &ppl = pushLockedPaintList ();
+-
+- foreach (CompWindow *w, ppl)
++ foreach (CompWindow *w, pl)
+ {
+ PrivateAnimWindow *aw = AnimWindow::get (w)->priv;
+ if (aw->curAnimation ())
+ aw->curAnimation ()->postPreparePaint ();
+ }
+
+- if (!animStillInProgress)
+- {
+- activateEvent (false);
+- mLastRedrawTimeFresh = false;
+-
+- // Reset stacking related info after all animations are done.
+- ExtensionPluginAnimation *extPlugin =
+- static_cast<ExtensionPluginAnimation *> (mExtensionPlugins[0]);
+- extPlugin->resetStackingInfo ();
+- }
+-
+ popLockedPaintList ();
+ }
+
+@@ -1396,6 +1374,50 @@
+ {
+ assert (mAnimInProgress);
+
++ const CompWindowList &pl = pushLockedPaintList ();
++ CompWindowList windowsFinishedAnimations;
++
++ bool animStillInProgress = false;
++
++ /* Paint list includes destroyed windows */
++ for (CompWindowList::const_reverse_iterator rit = pl.rbegin ();
++ rit != pl.rend (); rit++)
++ {
++ CompWindow *w = (*rit);
++ AnimWindow *animWin = AnimWindow::get (w);
++ PrivateAnimWindow *aw = animWin->priv;
++ Animation *curAnim = aw->curAnimation ();
++
++ if (curAnim)
++ {
++ bool finished = (curAnim->remainingTime () <= 0);
++ if (finished) // Animation is done
++ windowsFinishedAnimations.push_back (w);
++ else
++ animStillInProgress = true;
++ }
++ }
++
++ popLockedPaintList ();
++
++ foreach (CompWindow *w, windowsFinishedAnimations)
++ {
++ AnimWindow *aw = AnimWindow::get (w);
++ aw->priv->notifyAnimation (false);
++ aw->priv->postAnimationCleanUp ();
++ }
++
++ if (!animStillInProgress)
++ {
++ activateEvent (false);
++ mLastRedrawTimeFresh = false;
++
++ // Reset stacking related info after all animations are done.
++ ExtensionPluginAnimation *extPlugin =
++ static_cast<ExtensionPluginAnimation *> (mExtensionPlugins[0]);
++ extPlugin->resetStackingInfo ();
++ }
++
+ cScreen->damagePending ();
+
+ cScreen->donePaint ();
=== added file 'debian/patches/fix-865177-865179.patch'
--- debian/patches/fix-865177-865179.patch 1970-01-01 00:00:00 +0000
+++ debian/patches/fix-865177-865179.patch 2011-10-07 16:27:28 +0000
@@ -0,0 +1,146 @@
+=== modified file 'src/grid.cpp'
+Index: compiz-plugins-main-0.9.6/grid/src/grid.cpp
+===================================================================
+--- compiz-plugins-main-0.9.6.orig/grid/src/grid.cpp 2011-10-08 00:04:28.801496451 +0800
++++ compiz-plugins-main-0.9.6/grid/src/grid.cpp 2011-10-08 00:06:13.290014587 +0800
+@@ -214,7 +214,13 @@
+ desiredSlot.setWidth (workarea.width () / props.numCellsX);
+
+ /* Adjust for constraints and decorations */
+- desiredRect = constrainSize (cw, desiredSlot);
++ if (where & ~(GridMaximize | GridLeft | GridRight))
++ {
++ desiredRect = constrainSize (cw, desiredSlot);
++ }
++ else
++ desiredRect = slotToRect (cw, desiredSlot);
++
+ /* Get current rect not including decorations */
+ currentRect.setGeometry (cw->serverX (), cw->serverY (),
+ cw->serverWidth (),
+@@ -338,6 +344,9 @@
+ unsigned int valueMask = CWX | CWY | CWWidth | CWHeight;
+ gw->lastTarget = where;
+ gw->currentSize = CompRect (wc.x, wc.y, wc.width, wc.height);
++ CompWindowExtents lastBorder = gw->window->border ();
++
++ gw->sizeHintsFlags = 0;
+
+ /* Special case for left and right, actually vertically maximize
+ * the window */
+@@ -356,7 +365,6 @@
+ gw->isGridMaximized = true;
+ gw->isGridResized = false;
+
+- gw->lastBorder = cw->border ();
+ /* Maximize the window */
+ cw->maximize (CompWindowStateMaximizedVertMask);
+ /* Be evil */
+@@ -372,6 +380,17 @@
+ gw->isGridMaximized = false;
+ }
+
++ int dw = (lastBorder.left + lastBorder.right) -
++ (gw->window->border ().left +
++ gw->window->border ().right);
++
++ int dh = (lastBorder.top + lastBorder.bottom) -
++ (gw->window->border ().top +
++ gw->window->border ().bottom);
++
++ xwc.width += dw;
++ xwc.height += dh;
++
+ /* Make window the size that we want */
+ cw->configureXWindow (valueMask, &xwc);
+
+@@ -723,6 +742,21 @@
+ }
+
+ void
++GridWindow::validateResizeRequest (unsigned int &xwcm,
++ XWindowChanges *xwc,
++ unsigned int source)
++{
++ window->validateResizeRequest (xwcm, xwc, source);
++
++ /* Don't allow non-pagers to change
++ * the size of the window, the user
++ * specified this size, thank-you */
++ if (isGridMaximized)
++ if (source != ClientTypePager)
++ xwcm = 0;
++}
++
++void
+ GridWindow::grabNotify (int x,
+ int y,
+ unsigned int state,
+@@ -792,8 +826,6 @@
+ dx = currentSize.x () - window->geometry ().x ();
+ dy = currentSize.y () - window->geometry ().y ();
+
+- printf ("offset move\n");
+-
+ window->move (dx, dy);
+ }
+ }
+@@ -818,37 +850,6 @@
+ window->stateChangeNotify (lastState);
+ }
+
+-void
+-GridWindow::windowNotify (CompWindowNotify n)
+-{
+- if (n == CompWindowNotifyFrameUpdate)
+- {
+- if (isGridMaximized && !((window->state () & MAXIMIZE_STATE) == MAXIMIZE_STATE))
+- {
+- unsigned int valueMask = 0;
+- XWindowChanges xwc;
+-
+- int dw = (lastBorder.left + lastBorder.right) -
+- (window->border ().left + window->border ().right);
+-
+- int dh = (lastBorder.top + lastBorder.bottom) -
+- (window->border ().top + window->border ().bottom);
+-
+- if (dw != 0)
+- valueMask |= CWWidth;
+- if (dh != 0)
+- valueMask |= CWHeight;
+- xwc.width = window->serverGeometry ().width () + dw;
+- xwc.height = window->serverGeometry ().height () + dh;
+-
+- window->configureXWindow (valueMask, &xwc);
+- }
+-
+- lastBorder = window->border ();
+- }
+-
+- window->windowNotify (n);
+-}
+ bool
+ GridScreen::restoreWindow (CompAction *action,
+ CompAction::State state,
+@@ -866,7 +867,10 @@
+ return false;
+
+ if (gw->isGridMaximized & !(cw->state () & MAXIMIZE_STATE))
+- gw->isGridMaximized = false;
++ {
++ gw->window->sizeHints ().flags |= gw->sizeHintsFlags;
++ gw->isGridMaximized = false;
++ }
+ else
+ {
+ if (cw == mGrabWindow)
+@@ -1049,7 +1053,7 @@
+ grabMask (0),
+ pointerBufDx (0),
+ pointerBufDy (0),
+- resizeCount (0),
++ resizeCount (0),
+ lastTarget (GridUnknown)
+ {
+ WindowInterface::setHandler (window);
=== added file 'debian/patches/fix-868121.patch'
--- debian/patches/fix-868121.patch 1970-01-01 00:00:00 +0000
+++ debian/patches/fix-868121.patch 2011-10-07 16:27:28 +0000
@@ -0,0 +1,138 @@
+=== modified file 'src/expo.cpp'
+Index: compiz-plugins-main-0.9.6/expo/src/expo.cpp
+===================================================================
+--- compiz-plugins-main-0.9.6.orig/expo/src/expo.cpp 2011-10-08 00:06:59.998246191 +0800
++++ compiz-plugins-main-0.9.6/expo/src/expo.cpp 2011-10-08 00:07:17.022330628 +0800
+@@ -444,7 +444,6 @@
+ screen->handleEventSetEnabled (this, enable);
+ cScreen->preparePaintSetEnabled (this, enable);
+ cScreen->paintSetEnabled (this, enable);
+- cScreen->getWindowPaintListSetEnabled (this, false);
+ cScreen->donePaintSetEnabled (this, enable);
+ gScreen->glPaintOutputSetEnabled (this, enable);
+ gScreen->glPaintTransformedOutputSetEnabled (this, enable);
+@@ -784,12 +783,14 @@
+ DEFAULT_Z_CAMERA - curveDistance);
+ }
+
+- cScreen->getWindowPaintListSetEnabled (this, paintingDndWindow);
++ if (paintingDndWindow)
++ cScreen->getWindowPaintListSetEnabled (this, true);
+ gScreen->glPaintTransformedOutput (attrib, sTransform3,
+ screen->region (), output,
+ mask);
+
+- cScreen->getWindowPaintListSetEnabled (this, !paintingDndWindow);
++ if (paintingDndWindow)
++ cScreen->getWindowPaintListSetEnabled (this, false);
+
+ if (!reflection && !paintingDndWindow)
+ {
+@@ -821,6 +822,8 @@
+ invertTransformedVertex (attrib, sTransform3, output, br);
+
+ viewport_size = CompSize (br[0] - tl[0], br[1] - tl[1]);
++
++ cScreen->setWindowPaintOffset (0, 0);
+ }
+
+ void
+@@ -1105,8 +1108,6 @@
+
+ expoActive = false;
+
+- cScreen->setWindowPaintOffset (0, 0);
+-
+ gScreen->glPaintTransformedOutputSetCurrentIndex (glPaintTransformedOutputIndex);
+ gScreen->setTextureFilter (oldFilter);
+ }
+@@ -1437,16 +1438,15 @@
+ {
+ GLMatrix wTransform (transform);
+ GLWindowPaintAttrib wAttrib (attrib);
+- CompPoint vp;
+ CompRegion clip (region);
+
+- screen->viewportForGeometry (window->geometry (), vp);
+-
+ if (eScreen->expoActive)
+ {
+- float opacity = 1.0;
+- bool hide;
+- bool zoomAnim;
++ float opacity = 1.0;
++ bool hide;
++ bool zoomAnim;
++ CompPoint vp;
++ screen->viewportForGeometry (window->geometry (), vp);
+
+ zoomAnim = eScreen->optionGetExpoAnimation () ==
+ ExpoScreen::ExpoAnimationZoom;
+@@ -1477,39 +1477,40 @@
+ mask |= PAINT_WINDOW_NO_CORE_INSTANCE_MASK;
+ else
+ wAttrib.opacity = wAttrib.opacity * opacity;
+- }
+
+- /* Stretch maximized windows a little so that you don't
+- * have an awkward gap */
++ /* Stretch maximized windows a little so that you don't
++ * have an awkward gap */
+
+- if (window->state () & MAXIMIZE_STATE)
+- {
+- CompOutput *o = &screen->outputDevs ()[screen->outputDeviceForGeometry(window->geometry())];
+- float yS = 1.0 + ((o->height () / (float) window->height ()) - 1.0f) * sigmoidProgress (eScreen->expoCam);
+- wTransform.translate (window->x () + window->width () / 2,
+- window->y () + window->height (),
+- 0.0f);
+- wTransform.scale (1.0f, yS, 1.0f);
+- wTransform.translate (-(window->x () + window->width () / 2),
+- -(window->y () + window->height ()),
+- 0.0f);
++ if (window->state () & MAXIMIZE_STATE &&
++ !window->border ().top)
++ {
++ CompOutput *o = &screen->outputDevs ()[screen->outputDeviceForGeometry(window->geometry())];
++ float yS = 1.0 + ((o->height () / (float) window->height ()) - 1.0f) * sigmoidProgress (eScreen->expoCam);
++ wTransform.translate (window->x () + window->width () / 2,
++ window->y () + window->height (),
++ 0.0f);
++ wTransform.scale (1.0f, yS, 1.0f);
++ wTransform.translate (-(window->x () + window->width () / 2),
++ -(window->y () + window->height ()),
++ 0.0f);
+
+- if (eScreen->paintingVp != vp)
+- mask |= PAINT_WINDOW_NO_CORE_INSTANCE_MASK;
++ if (eScreen->paintingVp != vp)
++ mask |= PAINT_WINDOW_NO_CORE_INSTANCE_MASK;
+
+- mask |= PAINT_WINDOW_TRANSFORMED_MASK;
+- }
+-
+- if (std::find (eScreen->dndWindows.begin(), eScreen->dndWindows.end (), window) != eScreen->dndWindows.end ())
+- {
+- if (!eScreen->paintingDndWindow)
+- {
+- mask |= PAINT_WINDOW_NO_CORE_INSTANCE_MASK;
++ mask |= PAINT_WINDOW_TRANSFORMED_MASK;
+ }
+- else
++
++ if (std::find (eScreen->dndWindows.begin(), eScreen->dndWindows.end (), window) != eScreen->dndWindows.end ())
+ {
+- mask |= PAINT_WINDOW_TRANSFORMED_MASK;
+- clip = infiniteRegion;
++ if (!eScreen->paintingDndWindow)
++ {
++ mask |= PAINT_WINDOW_NO_CORE_INSTANCE_MASK;
++ }
++ else
++ {
++ mask |= PAINT_WINDOW_TRANSFORMED_MASK;
++ clip = infiniteRegion;
++ }
+ }
+ }
+
=== added file 'debian/patches/fix-868392.patch'
--- debian/patches/fix-868392.patch 1970-01-01 00:00:00 +0000
+++ debian/patches/fix-868392.patch 2011-10-07 16:27:28 +0000
@@ -0,0 +1,14 @@
+=== modified file 'src/snap.cpp'
+Index: compiz-plugins-main-0.9.6/snap/src/snap.cpp
+===================================================================
+--- compiz-plugins-main-0.9.6.orig/snap/src/snap.cpp 2011-10-08 00:07:30.750398687 +0800
++++ compiz-plugins-main-0.9.6/snap/src/snap.cpp 2011-10-08 00:07:49.882493524 +0800
+@@ -396,7 +396,7 @@
+ // Update snapping data
+ if (ss->optionGetSnapTypeMask () & SnapTypeEdgeResistanceMask)
+ {
+- snapGeometry = window->serverGeometry ();
++ snapGeometry = window->geometry ();
+ this->snapDirection |= snapDirection;
+ }
+ // Attract the window if needed, moving it of the correct dist
=== added file 'debian/patches/fix_clipping_issues_in_expo.patch'
--- debian/patches/fix_clipping_issues_in_expo.patch 1970-01-01 00:00:00 +0000
+++ debian/patches/fix_clipping_issues_in_expo.patch 2011-10-07 16:27:28 +0000
@@ -0,0 +1,124 @@
+=== modified file 'src/expo.cpp'
+Index: compiz-plugins-main-0.9.6/expo/src/expo.cpp
+===================================================================
+--- compiz-plugins-main-0.9.6.orig/expo/src/expo.cpp 2011-10-08 00:08:11.678601665 +0800
++++ compiz-plugins-main-0.9.6/expo/src/expo.cpp 2011-10-08 00:08:36.906726737 +0800
+@@ -274,7 +274,7 @@
+ screen->vp ().y () - selectedVp.y (), true);
+
+ /* update saved window attributes in case we moved the
+- window to a new viewport */
++ window to a new viewport */
+ if (dndWindow->saveMask () & CWX)
+ {
+ dndWindow->saveWc ().x = dndWindow->saveWc ().x % screen->width ();
+@@ -289,13 +289,11 @@
+ }
+
+ /* update window attibutes to make sure a moved maximized window
+- is properly snapped to the work area */
++ is properly snapped to the work area */
+ if (dndWindow->state () & MAXIMIZE_STATE)
+ dndWindow->updateAttributes (CompStackingUpdateModeNone);
+ }
+ }
+-
+- dndWindows.clear ();
+ }
+
+ void
+@@ -396,6 +394,29 @@
+ else
+ expoCam = MAX (0.0, expoCam - val);
+
++ if (dndState == DnDDuring)
++ {
++ foreach (CompWindow *w, dndWindows)
++ ExpoWindow::get (w)->dndOpacity = MIN (1.0, ExpoWindow::get (w)->dndOpacity + val);
++ }
++ else if (dndState == DnDNone)
++ {
++ CompWindowList::iterator it = dndWindows.begin ();
++
++ while (it != dndWindows.end ())
++ {
++ ExpoWindow::get ((*it))->dndOpacity = MAX (0.0, ExpoWindow::get ((*it))->dndOpacity - val);
++
++ if (ExpoWindow::get ((*it))->dndOpacity <= 0.0f)
++ {
++ dndWindows.erase (it);
++ it = dndWindows.begin ();
++ }
++ else
++ it++;
++ }
++ }
++
+ if (expoCam)
+ {
+ unsigned int i, j, vp;
+@@ -523,6 +544,11 @@
+ foreach (float& vp, vpActivity)
+ if (vp != 0.0 && vp != 1.0)
+ cScreen->damageScreen ();
++
++ foreach (CompWindow *w, dndWindows)
++ if (ExpoWindow::get (w)->dndOpacity != 0.0f &&
++ ExpoWindow::get (w)->dndOpacity != 1.0f)
++ cScreen->damageScreen ();
+ }
+
+ if (grabIndex && expoCam <= 0.0f && !expoMode)
+@@ -530,7 +556,6 @@
+ screen->removeGrab (grabIndex, NULL);
+ grabIndex = 0;
+ updateWraps (false);
+- cScreen->damageScreen ();
+ }
+
+ cScreen->donePaint ();
+@@ -614,9 +639,7 @@
+ break;
+
+ dndState = DnDDuring;
+-
+- if (std::find (dndWindows.begin (), dndWindows.end (), w) == dndWindows.end ())
+- dndWindows.push_back (w);
++ dndWindows.push_back (w);
+
+ w->grabNotify (nx, ny, 0,
+ CompWindowGrabMoveMask |
+@@ -1032,7 +1055,7 @@
+ while (vp.y () < 0)
+ vp.setY (screen->vpSize ().height () + vp.y ());
+
+- paintViewport (attrib, sTransform, region, output, mask, vp, vpCamPos, reflection);
++ paintViewport (attrib, sTransform, infiniteRegion, output, mask, vp, vpCamPos, reflection);
+ }
+
+ paintingDndWindow = false;
+@@ -1205,7 +1228,7 @@
+ }
+ }
+
+- if ((vp == eScreen->paintingVp || window->onAllViewports ()) && !eScreen->paintingDndWindow)
++ if (vp == eScreen->paintingVp || window->onAllViewports ())
+ {
+ fA.setBrightness (fragment.getBrightness () * eScreen->vpBrightness);
+ fA.setSaturation (fragment.getSaturation () * eScreen->vpSaturation);
+@@ -1293,6 +1316,7 @@
+ }
+
+ }
++
+ return status;
+
+ }
+@@ -1633,6 +1657,7 @@
+ cWindow (CompositeWindow::get (w)),
+ gWindow (GLWindow::get (w)),
+ eScreen (ExpoScreen::get (screen)),
++ dndOpacity (0.0f),
+ mGlowQuads (NULL)
+ {
+ CompositeWindowInterface::setHandler (cWindow, false);
=== added file 'debian/patches/series'
--- debian/patches/series 1970-01-01 00:00:00 +0000
+++ debian/patches/series 2011-10-07 16:27:28 +0000
@@ -0,0 +1,12 @@
+fix-827560.patch
+fix-834585.patch
+fix-853951.patch
+fix-856177-865179.patch
+fix-862260.patch
+fix-862261-860646.patch
+fix-862261.patch
+fix-864476.patch
+fix-865177-865179.patch
+fix-868121.patch
+fix-868392.patch
+fix_clipping_issues_in_expo.patch
Follow ups