diff --git a/src/kits/interface/Window.cpp b/src/kits/interface/Window.cpp index 5065b020fb..77d39e2f7f 100644 --- a/src/kits/interface/Window.cpp +++ b/src/kits/interface/Window.cpp @@ -1960,9 +1960,10 @@ BWindow::MoveBy(float dx, float dy) fLink->StartMessage(AS_WINDOW_MOVE); fLink->Attach(dx); fLink->Attach(dy); - fLink->Flush(); - fFrame.OffsetBy(dx, dy); + status_t status; + if (fLink->FlushWithReply(status) == B_OK && status == B_OK) + fFrame.OffsetBy(dx, dy); Unlock(); } @@ -2016,10 +2017,12 @@ BWindow::ResizeBy(float dx, float dy) fLink->StartMessage(AS_WINDOW_RESIZE); fLink->Attach(dx); fLink->Attach(dy); - fLink->Flush(); - fFrame.SetRightBottom(fFrame.RightBottom() + BPoint(dx, dy)); - _AdoptResize(); + status_t status; + if (fLink->FlushWithReply(status) == B_OK && status == B_OK) { + fFrame.SetRightBottom(fFrame.RightBottom() + BPoint(dx, dy)); + _AdoptResize(); + } } Unlock(); } diff --git a/src/servers/app/ServerWindow.cpp b/src/servers/app/ServerWindow.cpp index d87b85e74d..57456b9ce4 100644 --- a/src/servers/app/ServerWindow.cpp +++ b/src/servers/app/ServerWindow.cpp @@ -813,7 +813,15 @@ ServerWindow::_DispatchMessage(int32 code, BPrivate::LinkReceiver &link) STRACE(("ServerWindow %s: Message AS_WINDOW_RESIZE %.1f, %.1f\n", Title(), xResizeBy, yResizeBy)); - fDesktop->ResizeWindowBy(fWindowLayer, xResizeBy, yResizeBy); + if (Window()->IsResizing()) { + // While the user resizes the window, we ignore + // pragmatically set window bounds + fLink.StartMessage(B_BUSY); + } else { + fDesktop->ResizeWindowBy(fWindowLayer, xResizeBy, yResizeBy); + fLink.StartMessage(B_OK); + } + fLink.Flush(); break; } case AS_WINDOW_MOVE: @@ -827,7 +835,15 @@ ServerWindow::_DispatchMessage(int32 code, BPrivate::LinkReceiver &link) STRACE(("ServerWindow %s: Message AS_WINDOW_MOVE: %.1f, %.1f\n", Title(), xMoveBy, yMoveBy)); - fDesktop->MoveWindowBy(fWindowLayer, xMoveBy, yMoveBy); + if (Window()->IsDragging()) { + // While the user moves the window, we ignore + // pragmatically set window positions + fLink.StartMessage(B_BUSY); + } else { + fDesktop->MoveWindowBy(fWindowLayer, xMoveBy, yMoveBy); + fLink.StartMessage(B_OK); + } + fLink.Flush(); break; } case AS_SET_SIZE_LIMITS: diff --git a/src/servers/app/WindowLayer.h b/src/servers/app/WindowLayer.h index b4a01751de..86df8801b7 100644 --- a/src/servers/app/WindowLayer.h +++ b/src/servers/app/WindowLayer.h @@ -146,7 +146,9 @@ class WindowLayer { { fCurrentWorkspace = index; } bool IsVisible() const; - // TODO: make this int32 stuff + bool IsDragging() const { return fIsDragging; } + bool IsResizing() const { return fIsResizing; } + void SetSizeLimits(int32 minWidth, int32 maxWidth, int32 minHeight, int32 maxHeight);