diff --git a/src/servers/app/ServerApp.cpp b/src/servers/app/ServerApp.cpp index 469f5dd26e..bcca14e84b 100644 --- a/src/servers/app/ServerApp.cpp +++ b/src/servers/app/ServerApp.cpp @@ -938,14 +938,22 @@ ServerApp::_DispatchMessage(int32 code, BPrivate::LinkReceiver& link) link.Read(&sync); link.Read(&token); + ServerCursor* oldCursor = fAppCursor; fAppCursor = fDesktop->GetCursorManager().FindCursor(token); - if (fAppCursor != NULL) + if (fAppCursor != NULL) { + fAppCursor->Acquire(); + // TODO: This is wrong: We need to take view cursors into account here! fDesktop->HWInterface()->SetCursor(fAppCursor); - else { - // if there is no new cursor, we just set the default cursor - fDesktop->HWInterface()->SetCursor(fDesktop->GetCursorManager().GetCursor(B_CURSOR_DEFAULT)); + } else { + // if the new cursor doesn't exist, we just set the default cursor + // TODO: This is wrong: We need to take view cursors into account here! + fDesktop->HWInterface()->SetCursor( + fDesktop->GetCursorManager().GetCursor(B_CURSOR_DEFAULT)); } + if (oldCursor != NULL) + oldCursor->Release(); + if (sync) { // The application is expecting a reply fLink.StartMessage(B_OK);