compiz team mailing list archive
-
compiz team
-
Mailing list archive
-
Message #23635
[Bug 864478] Re: Window shading is broken
Pending follow-up fix pending verification
=== modified file 'debian/patches/fix-864478.patch'
--- debian/patches/fix-864478.patch 2011-10-12 10:06:03 +0000
+++ debian/patches/fix-864478.patch 2011-10-17 07:02:55 +0000
@@ -1,8 +1,8 @@
=== modified file 'plugins/decor/src/decor.cpp'
Index: compiz-0.9.6+bzr20110929/plugins/decor/src/decor.cpp
===================================================================
---- compiz-0.9.6+bzr20110929.orig/plugins/decor/src/decor.cpp 2011-10-12 16:58:15.358820188 +0800
-+++ compiz-0.9.6+bzr20110929/plugins/decor/src/decor.cpp 2011-10-12 16:58:26.894877391 +0800
+--- compiz-0.9.6+bzr20110929.orig/plugins/decor/src/decor.cpp 2011-09-29 14:53:38.000000000 +0800
++++ compiz-0.9.6+bzr20110929/plugins/decor/src/decor.cpp 2011-10-17 15:01:40.431183993 +0800
@@ -189,8 +189,6 @@
if (wd &&
wd->decor->type == WINDOW_DECORATION_TYPE_PIXMAP)
@@ -12,10 +12,86 @@
CompRect box;
GLTexture::MatrixList ml (1);
mask |= PAINT_WINDOW_BLEND_MASK;
+@@ -738,9 +736,14 @@
+ for (i = 0; i < wd->nQuad; i++)
+ {
+ int x, y;
++ unsigned int width = window->size ().width ();
++ unsigned int height = window->size ().height ();
++
++ if (window->shaded ())
++ height = 0;
+
+- computeQuadBox (&wd->decor->quad[i], window->size ().width (),
+- window->size ().height (),
++ computeQuadBox (&wd->decor->quad[i], width,
++ height,
+ &x1, &y1, &x2, &y2, &sx, &sy);
+
+ x = window->geometry ().x ();
This ensures that the decoration size is correctly calculated when the
window is shaded, so that you don't get a full size decoration for a
shaded window
+@@ -1995,37 +1998,34 @@
+ void
+ DecorWindow::stateChangeNotify (unsigned int lastState)
+ {
+- if (!update (true))
++ if (wd && wd->decor)
+ {
+- if (wd && wd->decor)
+- {
+- int oldShiftX = shiftX ();
+- int oldShiftY = shiftY ();
+- int moveDx, moveDy;
++ int oldShiftX = shiftX ();
++ int oldShiftY = shiftY ();
++ int moveDx, moveDy;
+
+- if ((window->state () & MAXIMIZE_STATE) == MAXIMIZE_STATE)
+- window->setWindowFrameExtents (&wd->decor->maxBorder,
+- &wd->decor->maxInput);
+- else
+- window->setWindowFrameExtents (&wd->decor->border,
+- &wd->decor->input);
++ if ((window->state () & MAXIMIZE_STATE) == MAXIMIZE_STATE)
++ window->setWindowFrameExtents (&wd->decor->maxBorder,
++ &wd->decor->maxInput);
++ else
++ window->setWindowFrameExtents (&wd->decor->border,
++ &wd->decor->input);
+
+- /* Since we immediately update the frame extents, we must
+- * also update the stored saved window geometry in order
+- * to prevent the window from shifting back too far once
+- * unmaximized */
++ /* Since we immediately update the frame extents, we must
++ * also update the stored saved window geometry in order
++ * to prevent the window from shifting back too far once
++ * unmaximized */
+
+- moveDx = shiftX () - oldShiftX;
+- moveDy = shiftY () - oldShiftY;
++ moveDx = shiftX () - oldShiftX;
++ moveDy = shiftY () - oldShiftY;
+
+- if (window->saveMask () & CWX)
+- window->saveWc ().x += moveDx;
++ if (window->saveMask () & CWX)
++ window->saveWc ().x += moveDx;
+
+- if (window->saveMask () & CWY)
+- window->saveWc ().y += moveDy;
++ if (window->saveMask () & CWY)
++ window->saveWc ().y += moveDy;
+
+- updateFrame ();
+- }
++ updateFrame ();
+ }
+
This ensures that the decoration image can be updated even if there was
no change to the window size (happens in the case of shading a maximized
window
+ window->stateChangeNotify (lastState);
Index: compiz-0.9.6+bzr20110929/src/event.cpp
===================================================================
---- compiz-0.9.6+bzr20110929.orig/src/event.cpp 2011-10-12 16:58:15.434820565 +0800
-+++ compiz-0.9.6+bzr20110929/src/event.cpp 2011-10-12 16:58:26.898877416 +0800
+--- compiz-0.9.6+bzr20110929.orig/src/event.cpp 2011-10-17 14:59:58.882680439 +0800
++++ compiz-0.9.6+bzr20110929/src/event.cpp 2011-10-17 15:00:01.278692325 +0800
@@ -1837,7 +1837,7 @@
* and the passive button grabs and then we will
* get the DestroyNotify later and change the focus
@@ -44,8 +120,8 @@
state &= ~CompWindowStateDemandsAttentionMask;
Index: compiz-0.9.6+bzr20110929/src/window.cpp
===================================================================
---- compiz-0.9.6+bzr20110929.orig/src/window.cpp 2011-10-12 16:58:15.398820386 +0800
-+++ compiz-0.9.6+bzr20110929/src/window.cpp 2011-10-12 16:59:39.339236630 +0800
+--- compiz-0.9.6+bzr20110929.orig/src/window.cpp 2011-10-17 15:00:00.514688526 +0800
++++ compiz-0.9.6+bzr20110929/src/window.cpp 2011-10-17 15:00:01.282692335 +0800
@@ -604,7 +604,7 @@
break;
}
@@ -236,7 +312,7 @@
if (serverFrame)
-@@ -4241,7 +4278,7 @@
+@@ -4243,7 +4280,7 @@
if (overrideRedirect () || !priv->managed)
return;
@@ -245,7 +321,7 @@
{
windowNotify (CompWindowNotifyShade);
-@@ -4649,20 +4686,10 @@
+@@ -4651,20 +4688,10 @@
if (serverFrame)
XMapWindow (screen->dpy (), serverFrame);
@@ -267,7 +343,7 @@
window->windowNotify (CompWindowNotifyShow);
-@@ -6288,12 +6315,7 @@
+@@ -6290,12 +6317,7 @@
priv->updateIconGeometry ();
if (priv->shaded)
--
You received this bug notification because you are a member of compiz
packagers, which is subscribed to compiz in Ubuntu.
https://bugs.launchpad.net/bugs/864478
Title:
Window shading is broken
To manage notifications about this bug go to:
https://bugs.launchpad.net/compiz/+bug/864478/+subscriptions