From ac4853b49f5b0603deda88baeba0bae3eac0d1cd Mon Sep 17 00:00:00 2001 From: Clemens Zeidler Date: Thu, 4 Aug 2011 22:31:42 +0000 Subject: [PATCH] When removing a window from the stack keep the mouse at the same tab position. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@42576 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- src/servers/app/stackandtile/SATWindow.cpp | 11 ++++++----- src/servers/app/stackandtile/SATWindow.h | 2 ++ 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/src/servers/app/stackandtile/SATWindow.cpp b/src/servers/app/stackandtile/SATWindow.cpp index 9c84e9fed9..06f5f92f2f 100644 --- a/src/servers/app/stackandtile/SATWindow.cpp +++ b/src/servers/app/stackandtile/SATWindow.cpp @@ -424,6 +424,10 @@ SATWindow::StackWindow(SATWindow* child) void SATWindow::RemovedFromArea(WindowArea* area) { + SATDecorator* decorator = GetDecorator(); + if (decorator != NULL) + fOldTabLocatiom = decorator->TabRect(fWindow->PositionInStack()).left; + fWindow->DetachFromWindowStack(true); for (int i = 0; i < fSATSnappingBehaviourList.CountItems(); i++) fSATSnappingBehaviourList.ItemAt(i)->RemovedFromArea(area); @@ -776,11 +780,8 @@ SATWindow::_RestoreOriginalSize(bool stayBelowMouse) && mousePosition.x <= frame.right + decorator->BorderWidth() +1 && mousePosition.x >= frame.left + decorator->BorderWidth()) { // verify mouse stays on the tab - float deltaX = 0; - if (tabRect.right < mousePosition.x) - deltaX = mousePosition.x - tabRect.right + 20; - else if (tabRect.left > mousePosition.x) - deltaX = mousePosition.x - tabRect.left - 20; + float oldOffset = mousePosition.x - fOldTabLocatiom; + float deltaX = mousePosition.x - (tabRect.left + oldOffset); fDesktop->MoveWindowBy(fWindow, deltaX, 0); } else { // verify mouse stays on the border diff --git a/src/servers/app/stackandtile/SATWindow.h b/src/servers/app/stackandtile/SATWindow.h index 5de5990fc8..bb21fc8251 100644 --- a/src/servers/app/stackandtile/SATWindow.h +++ b/src/servers/app/stackandtile/SATWindow.h @@ -174,6 +174,8 @@ private: float fOriginalHeight; uint64 fId; + + float fOldTabLocatiom; };