diff --git a/headers/private/app/ServerProtocol.h b/headers/private/app/ServerProtocol.h index c95ec5c171..1b8e10c08b 100644 --- a/headers/private/app/ServerProtocol.h +++ b/headers/private/app/ServerProtocol.h @@ -93,7 +93,7 @@ enum { AS_NEEDS_UPDATE, AS_SET_WINDOW_TITLE, AS_ADD_TO_SUBSET, - AS_REM_FROM_SUBSET, + AS_REMOVE_FROM_SUBSET, AS_SET_ALIGNMENT, AS_GET_ALIGNMENT, AS_GET_WORKSPACES, diff --git a/src/kits/interface/Window.cpp b/src/kits/interface/Window.cpp index 742a6e1218..5c9d94dbc8 100644 --- a/src/kits/interface/Window.cpp +++ b/src/kits/interface/Window.cpp @@ -1541,14 +1541,11 @@ BWindow::AddToSubset(BWindow *window) && fFeel != B_FLOATING_SUBSET_WINDOW_FEEL)) return B_BAD_VALUE; - team_id team = Team(); - Lock(); - fLink->StartMessage(AS_ADD_TO_SUBSET); - fLink->Attach(_get_object_token_(window)); - fLink->Attach(team); status_t status = B_ERROR; + fLink->StartMessage(AS_ADD_TO_SUBSET); + fLink->Attach(_get_object_token_(window)); fLink->FlushWithReply(status); Unlock(); @@ -1565,15 +1562,13 @@ BWindow::RemoveFromSubset(BWindow *window) && fFeel != B_FLOATING_SUBSET_WINDOW_FEEL)) return B_BAD_VALUE; - team_id team = Team(); - Lock(); - fLink->StartMessage(AS_REM_FROM_SUBSET); - fLink->Attach(_get_object_token_(window)); - fLink->Attach(team); status_t status = B_ERROR; + fLink->StartMessage(AS_REMOVE_FROM_SUBSET); + fLink->Attach(_get_object_token_(window)); fLink->FlushWithReply(status); + Unlock(); return status; diff --git a/src/servers/app/ServerWindow.cpp b/src/servers/app/ServerWindow.cpp index 6be9fbc3f0..99922690ad 100644 --- a/src/servers/app/ServerWindow.cpp +++ b/src/servers/app/ServerWindow.cpp @@ -1273,45 +1273,43 @@ ServerWindow::_DispatchMessage(int32 code, BPrivate::LinkReceiver &link) case AS_ADD_TO_SUBSET: { STRACE(("ServerWindow %s: Message AS_ADD_TO_SUBSET\n", Title())); - WindowLayer *windowLayer; - int32 mainToken; - team_id teamID; + status_t status = B_ERROR; - link.Read(&mainToken); - link.Read(&teamID, sizeof(team_id)); - - windowLayer = NULL; //fDesktop->FindWindowLayerByClientToken(mainToken, teamID); - if (windowLayer) { - fLink.StartMessage(B_OK); - fLink.Flush(); - - //fDesktop->AddWindowLayerToSubset(fWindowLayer, windowLayer); - } else { - fLink.StartMessage(B_ERROR); - fLink.Flush(); + int32 token; + if (link.Read(&token) == B_OK) { + WindowLayer* windowLayer = fDesktop->FindWindowLayerByClientToken( + token, App()->ClientTeam()); + if (windowLayer == NULL + || windowLayer->Feel() != B_NORMAL_WINDOW_FEEL) { + status = B_BAD_VALUE; + } else { + status = fWindowLayer->AddToSubset(windowLayer) + ? B_OK : B_NO_MEMORY; + } } + + fLink.StartMessage(status); + fLink.Flush(); break; } - case AS_REM_FROM_SUBSET: + case AS_REMOVE_FROM_SUBSET: { STRACE(("ServerWindow %s: Message AS_REM_FROM_SUBSET\n", Title())); - WindowLayer *windowLayer; - int32 mainToken; - team_id teamID; + status_t status = B_ERROR; - link.Read(&mainToken); - link.Read(&teamID, sizeof(team_id)); - - windowLayer = NULL; //fDesktop->FindWindowLayerByClientToken(mainToken, teamID); - if (windowLayer) { - fLink.StartMessage(B_OK); - fLink.Flush(); - - //fDesktop->RemoveWindowLayerFromSubset(fWindowLayer, windowLayer); - } else { - fLink.StartMessage(B_ERROR); - fLink.Flush(); + int32 token; + if (link.Read(&token) == B_OK) { + WindowLayer* windowLayer = fDesktop->FindWindowLayerByClientToken( + token, App()->ClientTeam()); + if (windowLayer != NULL) { + fWindowLayer->RemoveFromSubset(windowLayer); + status = B_OK; + } else + status = B_BAD_VALUE; } + + fLink.StartMessage(status); + fLink.Flush(); break; } diff --git a/src/servers/app/WindowLayer.cpp b/src/servers/app/WindowLayer.cpp index 8ecdffd73a..d12ec1f4fa 100644 --- a/src/servers/app/WindowLayer.cpp +++ b/src/servers/app/WindowLayer.cpp @@ -812,7 +812,6 @@ WindowLayer::Frontmost(WindowLayer* first) } - bool WindowLayer::AddToSubset(WindowLayer* window) {