From 3dcbe9fc8879f2f88a0cd4fc57e504649a2362cd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Axel=20D=C3=B6rfler?= Date: Mon, 13 Feb 2006 13:12:10 +0000 Subject: [PATCH] Implemented redrawing the desktop after color changes. Right now, it only works correctly when Tracker is not running; obviously, the background is cleared in Tracker before it had the chance of changing the view color. Maybe the app_server needs to detect the background view of the desktop and change the view color manually :-/ git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@16376 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- src/servers/app/Desktop.cpp | 25 +++++++++++++++++++++++++ src/servers/app/Desktop.h | 2 ++ src/servers/app/Workspace.cpp | 5 ++++- 3 files changed, 31 insertions(+), 1 deletion(-) diff --git a/src/servers/app/Desktop.cpp b/src/servers/app/Desktop.cpp index 1806c8a19c..f4a2b05cc0 100644 --- a/src/servers/app/Desktop.cpp +++ b/src/servers/app/Desktop.cpp @@ -590,6 +590,31 @@ Desktop::SetCursor(ServerCursor* newCursor) } +/*! + \brief Redraws the background (ie. the desktop window, if any). +*/ +void +Desktop::RedrawBackground() +{ + LockAllWindows(); + + BRegion redraw; + + WindowLayer* window = _CurrentWindows().FirstWindow(); + if (window->Feel() == kDesktopWindowFeel) { + // TODO: this doesn't work correctly, yet + redraw = window->VisibleContentRegion(); + window->ProcessDirtyRegion(redraw); + } else { + redraw = BackgroundRegion(); + fBackgroundRegion.MakeEmpty(); + _SetBackground(redraw); + } + + UnlockAllWindows(); +} + + void Desktop::UpdateWorkspaces() { diff --git a/src/servers/app/Desktop.h b/src/servers/app/Desktop.h index ab410c1a84..a7cd51fc1e 100644 --- a/src/servers/app/Desktop.h +++ b/src/servers/app/Desktop.h @@ -158,6 +158,8 @@ class Desktop : public MessageLooper, public ScreenOwner { BRegion& BackgroundRegion() { return fBackgroundRegion; } + void RedrawBackground(); + void MinimizeApplication(team_id team); void BringApplicationToFront(team_id team); diff --git a/src/servers/app/Workspace.cpp b/src/servers/app/Workspace.cpp index 4e5bd2a383..c58485a54a 100644 --- a/src/servers/app/Workspace.cpp +++ b/src/servers/app/Workspace.cpp @@ -98,9 +98,12 @@ Workspace::Color() const void Workspace::SetColor(const RGBColor& color, bool makeDefault) { + if (color == Color()) + return; + // TODO: support makeDefault - // TODO: redraw desktop! fWorkspace.SetColor(color); + fDesktop.RedrawBackground(); }