From 58f5b04b3ba31bb0be91a590a560b97b40ffda4d Mon Sep 17 00:00:00 2001 From: Rene Gollent Date: Mon, 7 Nov 2011 01:47:20 +0000 Subject: [PATCH] - Ensure that team and inspector window are locked when save/restoring settings. - Don't allow QuitRequested() to terminate the TeamWindow directly. GraphicalUserInterface will (and must) do so in order to ensure that the window object is still around when calling SaveSettings() on it. Should resolve #8091. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@43206 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- .../gui/inspector_window/InspectorWindow.cpp | 12 ++++++++++-- .../user_interface/gui/team_window/TeamWindow.cpp | 12 +++++++++++- 2 files changed, 21 insertions(+), 3 deletions(-) diff --git a/src/apps/debugger/user_interface/gui/inspector_window/InspectorWindow.cpp b/src/apps/debugger/user_interface/gui/inspector_window/InspectorWindow.cpp index b956c83cb0..742e5b2acb 100644 --- a/src/apps/debugger/user_interface/gui/inspector_window/InspectorWindow.cpp +++ b/src/apps/debugger/user_interface/gui/inspector_window/InspectorWindow.cpp @@ -9,7 +9,7 @@ #include #include -#include +#include #include #include #include @@ -277,7 +277,7 @@ InspectorWindow::QuitRequested() void InspectorWindow::MemoryBlockRetrieved(TeamMemoryBlock* block) { - BAutolock lock(this); + AutoLocker lock(this); if (lock.IsLocked()) { fCurrentBlock = block; fMemoryView->SetTargetAddress(block, fCurrentAddress); @@ -290,6 +290,10 @@ InspectorWindow::MemoryBlockRetrieved(TeamMemoryBlock* block) status_t InspectorWindow::LoadSettings(const GUITeamUISettings* settings) { + AutoLocker lock(this); + if (!lock.IsLocked()) + return B_ERROR; + BVariant value; if (settings->Value("inspectorWindowFrame", value) == B_OK) { BRect frameRect = value.ToRect(); @@ -308,6 +312,10 @@ InspectorWindow::LoadSettings(const GUITeamUISettings* settings) status_t InspectorWindow::SaveSettings(BMessage* settings) { + AutoLocker lock(this); + if (!lock.IsLocked()) + return B_ERROR; + status_t error = settings->AddRect("inspectorWindowFrame", Frame()); if (error != B_OK) return error; diff --git a/src/apps/debugger/user_interface/gui/team_window/TeamWindow.cpp b/src/apps/debugger/user_interface/gui/team_window/TeamWindow.cpp index 725296523f..1a72850d5c 100644 --- a/src/apps/debugger/user_interface/gui/team_window/TeamWindow.cpp +++ b/src/apps/debugger/user_interface/gui/team_window/TeamWindow.cpp @@ -335,13 +335,19 @@ TeamWindow::MessageReceived(BMessage* message) bool TeamWindow::QuitRequested() { - return fListener->UserInterfaceQuitRequested(); + fListener->UserInterfaceQuitRequested(); + + return false; } status_t TeamWindow::LoadSettings(const GUITeamUISettings* settings) { + AutoLocker lock(this); + if (!lock.IsLocked()) + return B_ERROR; + BVariant value; status_t error = settings->Value("teamWindowFrame", value); if (error == B_OK) { @@ -364,6 +370,10 @@ TeamWindow::LoadSettings(const GUITeamUISettings* settings) status_t TeamWindow::SaveSettings(GUITeamUISettings* settings) { + AutoLocker lock(this); + if (!lock.IsLocked()) + return B_ERROR; + // save the settings from the cached copy first, // then overwrite them with our most current set // this is necessary in order to preserve the settings