diff --git a/headers/private/app/ServerProtocol.h b/headers/private/app/ServerProtocol.h index 55a153c2d7..8295d220b5 100644 --- a/headers/private/app/ServerProtocol.h +++ b/headers/private/app/ServerProtocol.h @@ -1,5 +1,5 @@ /* - * Copyright 2001-2006, Haiku. + * Copyright 2001-2007, Haiku. * Distributed under the terms of the MIT License. * * Authors: @@ -92,6 +92,7 @@ enum { AS_WINDOW_MOVE, AS_SET_SIZE_LIMITS, AS_ACTIVATE_WINDOW, + AS_IS_FRONT_WINDOW, AS_UPDATE_IF_NEEDED, // BPicture definitions diff --git a/src/kits/interface/Window.cpp b/src/kits/interface/Window.cpp index 5bdbccd89b..0b9257c2f5 100644 --- a/src/kits/interface/Window.cpp +++ b/src/kits/interface/Window.cpp @@ -1,5 +1,5 @@ /* - * Copyright 2001-2006, Haiku. + * Copyright 2001-2007, Haiku. * Distributed under the terms of the MIT License. * * Authors: @@ -647,7 +647,17 @@ BWindow::EndViewTransaction() bool BWindow::IsFront() const { - return (IsActive() || IsModal()); + BAutolock locker(const_cast(this)); + if (!locker.IsLocked()) + return false; + + fLink->StartMessage(AS_IS_FRONT_WINDOW); + + status_t status; + if (fLink->FlushWithReply(status) == B_OK) + return status >= B_OK; + + return false; } diff --git a/src/servers/app/ServerWindow.cpp b/src/servers/app/ServerWindow.cpp index b9bd8f8f85..0984564c84 100644 --- a/src/servers/app/ServerWindow.cpp +++ b/src/servers/app/ServerWindow.cpp @@ -1,5 +1,5 @@ /* - * Copyright 2001-2006, Haiku. + * Copyright 2001-2007, Haiku. * Distributed under the terms of the MIT License. * * Authors: @@ -813,6 +813,11 @@ fDesktop->LockSingleWindow(); break; } #endif + case AS_IS_FRONT_WINDOW: + fLink.StartMessage(fDesktop->FrontWindow() == fWindowLayer ? B_OK : B_ERROR); + fLink.Flush(); + break; + case AS_GET_WORKSPACES: { STRACE(("ServerWindow %s: Message AS_GET_WORKSPACES\n", Title()));