diff --git a/src/kits/interface/InterfaceDefs.cpp b/src/kits/interface/InterfaceDefs.cpp index 76d3a98d6b..1c6e1f128f 100644 --- a/src/kits/interface/InterfaceDefs.cpp +++ b/src/kits/interface/InterfaceDefs.cpp @@ -574,13 +574,12 @@ set_workspace_count(int32 count) _IMPEXP_BE int32 current_workspace() { - int32 index = 1; + int32 index = 0; BAppServerLink link; int32 code; - link.StartMessage(AS_CURRENT_WORKSPACE); - link.FlushWithReply(&code); - if(code==SERVER_TRUE) + link.StartMessage(AS_CURRENT_WORKSPACE); + if (link.FlushWithReply(&code) == B_OK && code == SERVER_TRUE) link.Read(&index); return index; diff --git a/src/servers/app/ServerApp.cpp b/src/servers/app/ServerApp.cpp index 00ac2a502c..46739c753f 100644 --- a/src/servers/app/ServerApp.cpp +++ b/src/servers/app/ServerApp.cpp @@ -657,17 +657,35 @@ ServerApp::DispatchMessage(int32 code, LinkMsgReader &link) break; } + case AS_CURRENT_WORKSPACE: + { + STRACE(("ServerApp %s: get current workspace\n", fSignature.String())); + + // TODO: Locking this way is not nice + RootLayer *root = gDesktop->ActiveRootLayer(); + root->Lock(); + + fLink.StartMessage(SERVER_TRUE); + fLink.Attach(root->ActiveWorkspaceIndex()); + fLink.Flush(); + + root->Unlock(); + break; + } + case AS_ACTIVATE_WORKSPACE: { - STRACE(("ServerApp %s: Activate Workspace UNIMPLEMETED\n",fSignature.String())); - - // Attached data - // 1) int32 workspace index - - // Error-checking is done in ActivateWorkspace, so this is a safe call - int32 workspace; - link.Read(&workspace); + STRACE(("ServerApp %s: activate workspace\n", fSignature.String())); + // TODO: See above + int32 index; + link.Read(&index); + RootLayer *root = gDesktop->ActiveRootLayer(); + root->Lock(); + root->SetActiveWorkspace(index); + root->Unlock(); + // no reply + break; } @@ -1773,23 +1791,7 @@ printf("ServerApp %s: AS_SCREEN_GET_MODE\n", fSignature.String()); root->Unlock(); break; } - - case AS_CURRENT_WORKSPACE: - { - STRACE(("ServerApp %s: get current workspace\n", fSignature.String())); - - // TODO: See above - RootLayer *root = gDesktop->ActiveRootLayer(); - root->Lock(); - - fLink.StartMessage(SERVER_TRUE); - fLink.Attach(root->ActiveWorkspaceIndex()); - fLink.Flush(); - - root->Unlock(); - break; - } - + default: printf("ServerApp %s received unhandled message code offset %s\n", fSignature.String(), MsgCodeToBString(code).String());