From 2a0cda5017006d2345fb1afa6a94f38f2d4c257b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Axel=20D=C3=B6rfler?= Date: Fri, 28 Aug 2009 09:33:18 +0000 Subject: [PATCH] * Added proper locking to _ResizeToFullScreen(). * Desktop::{Move|Resize}WindowBy() could be called with zeros in which case it doesn't have to do anything. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@32775 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- src/servers/app/Desktop.cpp | 6 ++++++ src/servers/app/ServerWindow.cpp | 16 +++++++++------- 2 files changed, 15 insertions(+), 7 deletions(-) diff --git a/src/servers/app/Desktop.cpp b/src/servers/app/Desktop.cpp index 646ea07c20..1540bc3583 100644 --- a/src/servers/app/Desktop.cpp +++ b/src/servers/app/Desktop.cpp @@ -1099,6 +1099,9 @@ Desktop::HideWindow(Window* window) void Desktop::MoveWindowBy(Window* window, float x, float y, int32 workspace) { + if (x == 0 && y == 0) + return; + if (!LockAllWindows()) return; @@ -1173,6 +1176,9 @@ Desktop::MoveWindowBy(Window* window, float x, float y, int32 workspace) void Desktop::ResizeWindowBy(Window* window, float x, float y) { + if (x == 0 && y == 0) + return; + if (!LockAllWindows()) return; diff --git a/src/servers/app/ServerWindow.cpp b/src/servers/app/ServerWindow.cpp index 641791d13f..e6e8a139d8 100644 --- a/src/servers/app/ServerWindow.cpp +++ b/src/servers/app/ServerWindow.cpp @@ -3561,13 +3561,16 @@ ServerWindow::_MessageNeedsAllWindowsLocked(uint32 code) const void ServerWindow::_ResizeToFullScreen() { - const Screen *screen = fWindow->Screen(); - if (screen == NULL) { - return; - // the window isn't yet attached to a screen - } + BRect screenFrame; - BRect screenFrame = screen->Frame(); + { + AutoReadLocker _(fDesktop->ScreenLocker()); + const Screen* screen = fWindow->Screen(); + if (screen == NULL) + return; + + screenFrame = fWindow->Screen()->Frame(); + } fDesktop->MoveWindowBy(fWindow, screenFrame.left - fWindow->Frame().left, @@ -3611,7 +3614,6 @@ ServerWindow::_DirectWindowSetFullScreen(bool enable) fDesktop->HWInterface()->SetCursorVisible(false); fDirectWindowInfo->EnableFullScreen(fWindow->Frame(), fWindow->Feel()); - _ResizeToFullScreen(); } else { const BRect& originalFrame = fDirectWindowInfo->OriginalFrame();