Repaint area between offset and window in sliding popups

As this area was not repainted it caused visual garbage during
animationgs. Most visible with yakuake and a panel at the top.
Offset in that case is the upper screenedge while yakuake is
positioned below the panel. The area of the panel did not get
repainted causing the garbage.
CCBUG: 264765
icc-effect-5.14.5
Martin Gräßlin 2011-03-18 18:06:03 +01:00
parent f6233828fe
commit e0906c8766
1 changed files with 17 additions and 1 deletions

View File

@ -126,8 +126,24 @@ void SlidingPopupsEffect::paintWindow(EffectWindow* w, int mask, QRegion region,
void SlidingPopupsEffect::postPaintWindow(EffectWindow* w)
{
if (mAppearingWindows.contains(w) || mDisappearingWindows.contains(w))
if (mAppearingWindows.contains(w) || mDisappearingWindows.contains(w)) {
w->addRepaintFull(); // trigger next animation repaint
const int start = mWindowsData[ w ].start;
switch(mWindowsData[ w ].from) {
case West:
effects->addRepaint(QRect(start, w->y(), w->x(), w->height()));
break;
case North:
effects->addRepaint(QRect(w->x(), start, w->width(), w->y()));
break;
case East:
effects->addRepaint(QRect(w->x() + w->width(), w->y(), displayWidth() - w->x() - w->width() - start, w->height()));
break;
case South:
default:
effects->addRepaint(QRect(w->x(), w->y()+w->height(), w->width(), displayHeight() - w->y() - w->height() - start));
}
}
effects->postPaintWindow(w);
if (mDisappearingWindows.contains(w) && mDisappearingWindows[ w ]->currentValue() >= 1) {
delete mDisappearingWindows.take(w);