diff --git a/kwin/effects/slidingpopups/slidingpopups.cpp b/kwin/effects/slidingpopups/slidingpopups.cpp
index 137ff97..d9aa7e9 100644
--- a/kwin/effects/slidingpopups/slidingpopups.cpp
+++ b/kwin/effects/slidingpopups/slidingpopups.cpp
@@ -195,28 +195,29 @@ void SlidingPopupsEffect::paintWindow(EffectWindow* w, int mask, QRegion region,
int splitPoint = 0;
switch(mWindowsData[ w ].from) {
case West:
- data.xTranslate -= w->width() * progress;
- splitPoint = w->width() - (w->x() + w->width() - screenRect.x() - start);
- region = QRegion(w->x() + splitPoint, w->y(), w->width() - splitPoint, w->height());
+ data.xTranslate -=(w->x() + w->width() - start) * progress;
+ splitPoint = screenRect.x() + start;
+ region = QRegion(splitPoint, w->y(), w->x() + w->width() - start, w->height());
break;
case North:
- data.yTranslate -= w->height() * progress;
- splitPoint = w->height() - (w->y() + w->height() - screenRect.y() - start);
- region = QRegion(w->x(), w->y() + splitPoint, w->width(), w->height() - splitPoint);
+ data.yTranslate -= (w->y() + w->height() - start) * progress;
+ splitPoint = screenRect.y() + start;
+ region = QRegion(w->x(), splitPoint, w->width(), w->y() + w->height() - start);
break;
case East:
- data.xTranslate += w->width() * progress;
+ data.xTranslate += (screenRect.width() - w->x() - start) * progress;
splitPoint = screenRect.x() + screenRect.width() - w->x() - start;
region = QRegion(w->x(), w->y(), splitPoint, w->height());
break;
case South:
default:
- data.yTranslate += w->height() * progress;
+ data.yTranslate += (screenRect.height() - w->y() - start) * progress;
splitPoint = screenRect.y() + screenRect.height() - w->y() - start;
region = QRegion(w->x(), w->y(), w->width(), splitPoint);
}
}
+ effects->addRepaint(region);
effects->paintWindow(w, mask, region, data);
}