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();