From a8b49ab3108330558271c111f631a43256998506 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Axel=20D=C3=B6rfler?= Date: Wed, 30 Nov 2005 22:48:13 +0000 Subject: [PATCH] Implemented AS_COUNT_WORKSPACES and AS_SET_WORKSPACE_COUNT server side. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15253 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- src/servers/app/RootLayer.cpp | 19 ++++++++++++++++--- src/servers/app/RootLayer.h | 2 ++ src/servers/app/ServerApp.cpp | 31 +++++++++++++++++++++++++++++-- 3 files changed, 47 insertions(+), 5 deletions(-) diff --git a/src/servers/app/RootLayer.cpp b/src/servers/app/RootLayer.cpp index 5053ba1600..aa5982a259 100644 --- a/src/servers/app/RootLayer.cpp +++ b/src/servers/app/RootLayer.cpp @@ -547,6 +547,22 @@ RootLayer::_WindowsChanged(BRegion& region) } +void +RootLayer::UpdateWorkspaces() +{ + BAutolock _(fAllRegionsLock); + + if (fWorkspacesLayer == NULL) + return; + + BRegion changed; + _WindowsChanged(changed); + + MarkForRedraw(changed); + TriggerRedraw(); +} + + WindowLayer* RootLayer::WindowAt(BPoint where) { @@ -562,9 +578,6 @@ RootLayer::WindowAt(BPoint where) } -// #pragma mark - Input related methods - - void RootLayer::SetMouseEventWindow(WindowLayer* window) { diff --git a/src/servers/app/RootLayer.h b/src/servers/app/RootLayer.h index 8f82a6aeba..69afb1ff81 100644 --- a/src/servers/app/RootLayer.h +++ b/src/servers/app/RootLayer.h @@ -87,6 +87,8 @@ class RootLayer : public Layer { void SetWindowLayerFeel(WindowLayer *windowLayer, int32 newFeel); void SetWindowLayerLook(WindowLayer *windowLayer, int32 newLook); + void UpdateWorkspaces(); + void MarkForRedraw(const BRegion &dirty); void TriggerRedraw(); diff --git a/src/servers/app/ServerApp.cpp b/src/servers/app/ServerApp.cpp index 7a4a98a767..249bdfafba 100644 --- a/src/servers/app/ServerApp.cpp +++ b/src/servers/app/ServerApp.cpp @@ -845,15 +845,42 @@ ServerApp::_DispatchMessage(int32 code, BPrivate::LinkReceiver& link) break; } #endif - case AS_CURRENT_WORKSPACE: + case AS_COUNT_WORKSPACES: { + DesktopSettings settings(fDesktop); + + fLink.StartMessage(B_OK); + fLink.Attach(settings.WorkspacesCount()); + fLink.Flush(); + break; + } + + case AS_SET_WORKSPACE_COUNT: + { + DesktopSettings settings(fDesktop); + + int32 newCount; + if (link.Read(&newCount) == B_OK) { + settings.SetWorkspacesCount(newCount); + + // either update the workspaces window, or switch to + // the last available workspace - which will update + // the workspaces window automatically + if (fDesktop->CurrentWorkspace() >= newCount) + fDesktop->SetWorkspace(newCount - 1); + else + fDesktop->RootLayer()->UpdateWorkspaces(); + } + break; + } + + case AS_CURRENT_WORKSPACE: STRACE(("ServerApp %s: get current workspace\n", Signature())); fLink.StartMessage(B_OK); fLink.Attach(fDesktop->CurrentWorkspace()); fLink.Flush(); break; - } case AS_ACTIVATE_WORKSPACE: {