diff --git a/src/servers/app/DefaultWindowBehaviour.cpp b/src/servers/app/DefaultWindowBehaviour.cpp index 4a92554775..407949e68a 100644 --- a/src/servers/app/DefaultWindowBehaviour.cpp +++ b/src/servers/app/DefaultWindowBehaviour.cpp @@ -167,9 +167,12 @@ DefaultWindowBehaviour::MouseDown(BMessage* message, BPoint where) fWindow->RegionPool()->Recycle(visibleBorder); } - if (action == CLICK_MOVE_TO_BACK) - fDesktop->SendWindowBehind(fWindow); - else { + if (action == CLICK_MOVE_TO_BACK) { + if (!fIsDragging || fWindow != fDesktop->BackWindow()) + fDesktop->SendWindowBehind(fWindow); + else + fDesktop->ActivateWindow(fWindow); + } else { fDesktop->SetMouseEventWindow(fWindow); // activate window if in click to activate mode, else only focus it diff --git a/src/servers/app/Desktop.cpp b/src/servers/app/Desktop.cpp index a1d91dfab2..02366ad9a4 100644 --- a/src/servers/app/Desktop.cpp +++ b/src/servers/app/Desktop.cpp @@ -1029,13 +1029,17 @@ Desktop::ActivateWindow(Window* window) void Desktop::SendWindowBehind(Window* window, Window* behindOf) { + if (!LockAllWindows()) + return; + // TODO: should the "not in current workspace" be handled anyway? // (the code below would have to be changed then, though) if (window == BackWindow() || !window->InWorkspace(fCurrentWorkspace) - || (behindOf != NULL && !behindOf->InWorkspace(fCurrentWorkspace)) - || !LockAllWindows()) + || (behindOf != NULL && !behindOf->InWorkspace(fCurrentWorkspace))) { + UnlockAllWindows(); return; + } // Is this a valid behindOf window? if (behindOf != NULL && window->HasInSubset(behindOf))