diff --git a/client.cpp b/client.cpp
index e27734d412..500042ad5f 100644
--- a/client.cpp
+++ b/client.cpp
@@ -71,6 +71,8 @@ along with this program. If not, see .
namespace KWin
{
+bool Client::s_haveResizeEffect = false;
+
// Creating a client:
// - only by calling Workspace::createClient()
// - it creates a new client and calls manage() for it
diff --git a/client.h b/client.h
index 26c7c74be8..bdebe444ea 100644
--- a/client.h
+++ b/client.h
@@ -587,6 +587,7 @@ private:
bool move_resize_has_keyboard_grab;
bool unrestrictedMoveResize;
int moveResizeStartScreen;
+ static bool s_haveResizeEffect;
Position mode;
QPoint moveOffset;
diff --git a/composite.cpp b/composite.cpp
index 86aa4e5128..2fddb33cb2 100644
--- a/composite.cpp
+++ b/composite.cpp
@@ -811,6 +811,8 @@ void Client::finishCompositing()
Toplevel::finishCompositing();
updateVisibility();
updateDecoration(true, true);
+ // for safety in case KWin is just resizing the window
+ s_haveResizeEffect = false;
}
bool Client::shouldUnredirect() const
diff --git a/geometry.cpp b/geometry.cpp
index 69eb5661ba..09f629dc56 100644
--- a/geometry.cpp
+++ b/geometry.cpp
@@ -2580,6 +2580,7 @@ bool Client::startMoveResize()
}
moveResizeMode = true;
+ s_haveResizeEffect = effects && static_cast(effects)->provides(Effect::Resize);
moveResizeStartScreen = screen();
workspace()->setClientIsMoving(this);
initialMoveResizeGeom = moveResizeGeom = geometry();
@@ -3034,7 +3035,7 @@ void Client::handleMoveResize(int x, int y, int x_root, int y_root)
return;
#ifdef HAVE_XSYNC
- if (isResize() && syncRequest.counter != None) {
+ if (isResize() && syncRequest.counter != None && !s_haveResizeEffect) {
if (!syncRequest.timeout) {
syncRequest.timeout = new QTimer(this);
connect(syncRequest.timeout, SIGNAL(timeout()), SLOT(performMoveResize()));
@@ -3062,7 +3063,11 @@ void Client::performMoveResize()
#ifdef KWIN_BUILD_TILING
if (!workspace()->tiling()->isEnabled())
#endif
- setGeometry(moveResizeGeom);
+ {
+ if (isMove() || (isResize() && !s_haveResizeEffect)) {
+ setGeometry(moveResizeGeom);
+ }
+ }
#ifdef HAVE_XSYNC
if (isResize() && syncRequest.counter != None)
addRepaintFull();