Author: phoudoin Date: 2010-09-22 12:50:08 +0200 (Wed, 22 Sep 2010) New Revision: 38785 Changeset: http://dev.haiku-os.org/changeset/38785 Modified: haiku/trunk/src/apps/debugger/Debugger.cpp haiku/trunk/src/apps/debugger/user_interface/gui/teams_window/TeamsListView.cpp haiku/trunk/src/apps/debugger/user_interface/gui/teams_window/TeamsWindow.cpp haiku/trunk/src/apps/debugger/user_interface/gui/teams_window/TeamsWindow.h Log: Add missing allocation checks where needed. Modified: haiku/trunk/src/apps/debugger/Debugger.cpp =================================================================== --- haiku/trunk/src/apps/debugger/Debugger.cpp 2010-09-22 10:02:28 UTC (rev 38784) +++ haiku/trunk/src/apps/debugger/Debugger.cpp 2010-09-22 10:50:08 UTC (rev 38785) @@ -238,11 +238,18 @@ switch (message->what) { case MSG_SHOW_TEAMS_WINDOW: { - if (fTeamsWindow) + if (fTeamsWindow) { fTeamsWindow->Activate(true); - else { - fTeamsWindow = new(std::nothrow) TeamsWindow(&fSettingsManager); - fTeamsWindow->Show(); + break; + } + + try { + fTeamsWindow = TeamsWindow::Create(&fSettingsManager); + if (fTeamsWindow != NULL) + fTeamsWindow->Show(); + } catch(...) { + // TODO: Notify the user! + fprintf(stderr, "Error: Failed to create Teams window\n"); } break; } @@ -343,8 +350,10 @@ _StartTeamDebugger(team, thread, stopInMain); } + // TeamDebugger::Listener + void Debugger::TeamDebuggerStarted(TeamDebugger* debugger) { Modified: haiku/trunk/src/apps/debugger/user_interface/gui/teams_window/TeamsListView.cpp =================================================================== --- haiku/trunk/src/apps/debugger/user_interface/gui/teams_window/TeamsListView.cpp 2010-09-22 10:02:28 UTC (rev 38784) +++ haiku/trunk/src/apps/debugger/user_interface/gui/teams_window/TeamsListView.cpp 2010-09-22 10:50:08 UTC (rev 38785) @@ -3,6 +3,7 @@ * Distributed under the terms of the MIT License. */ +#include <new> #include <stdio.h> #include <string.h> @@ -242,8 +243,11 @@ if (message->FindInt32("be:team", &team) != B_OK) break; - AddItem(new TeamListItem(team)); - SortItems(&TeamListItem::Compare); + TeamListItem* item = new(std::nothrow) TeamListItem(team); + if (item != NULL) { + AddItem(new TeamListItem(team)); + SortItems(&TeamListItem::Compare); + } break; } @@ -324,12 +328,14 @@ } if (!item || tmi.team != item->TeamID()) { - // Team not found in known teams list: insert an new item - TeamListItem* newItem = new TeamListItem(tmi); - if (!item) - index++; // No item with team id bigger found: insert at list end + // Team not found in previously known teams list: insert a new item + TeamListItem* newItem = new(std::nothrow) TeamListItem(tmi); + if (newItem != NULL) { + if (!item) + index++; // No item found with bigger team id: insert at end - AddItem(newItem, index); + AddItem(newItem, index); + } } index++; // Move list sync head. } Modified: haiku/trunk/src/apps/debugger/user_interface/gui/teams_window/TeamsWindow.cpp =================================================================== --- haiku/trunk/src/apps/debugger/user_interface/gui/teams_window/TeamsWindow.cpp 2010-09-22 10:02:28 UTC (rev 38784) +++ haiku/trunk/src/apps/debugger/user_interface/gui/teams_window/TeamsWindow.cpp 2010-09-22 10:50:08 UTC (rev 38785) @@ -26,43 +26,30 @@ : BWindow(BRect(100, 100, 500, 250), "Teams", B_DOCUMENT_WINDOW, B_ASYNCHRONOUS_CONTROLS), + fTeamsListView(NULL), fSettingsManager(settingsManager) { - BMessage settings; - _LoadSettings(settings); +} - BRect frame; - if (settings.FindRect("teams window frame", &frame) == B_OK) { - MoveTo(frame.LeftTop()); - ResizeTo(frame.Width(), frame.Height()); - } - // TODO: add button to start a team debugger - // TODO: add UI to setup arguments and environ, launch a program - // and start his team debugger +TeamsWindow::~TeamsWindow() +{ +} - // Add a teams list view - frame = Bounds(); - frame.right -= B_V_SCROLL_BAR_WIDTH; - fTeamsListView = new TeamsListView(frame, "TeamsList"); - fTeamsListView->SetInvocationMessage(new BMessage(kMsgDebugThisTeam)); +/*static*/ TeamsWindow* +TeamsWindow::Create(SettingsManager* settingsManager) +{ + TeamsWindow* self = new TeamsWindow(settingsManager); - BScrollView * teamsScroller = new BScrollView("TeamsListScroller", - fTeamsListView, B_FOLLOW_ALL_SIDES, 0, false, true, B_NO_BORDER); - - AddChild(teamsScroller); - - // small visual tweak - if (BScrollBar* scrollBar = teamsScroller->ScrollBar(B_VERTICAL)) { - scrollBar->MoveBy(0, -1); - scrollBar->ResizeBy(0, -(B_H_SCROLL_BAR_HEIGHT - 2)); + try { + self->_Init(); + } catch(...) { + delete self; + throw; } -} - -TeamsWindow::~TeamsWindow() -{ + return self; } @@ -103,6 +90,42 @@ // #pragma mark -- +void +TeamsWindow::_Init() +{ + BMessage settings; + _LoadSettings(settings); + + BRect frame; + if (settings.FindRect("teams window frame", &frame) == B_OK) { + MoveTo(frame.LeftTop()); + ResizeTo(frame.Width(), frame.Height()); + } + + // TODO: add button to start a team debugger + // TODO: add UI to setup arguments and environ, launch a program + // and start his team debugger + + // Add a teams list view + frame = Bounds(); + frame.right -= B_V_SCROLL_BAR_WIDTH; + + fTeamsListView = new TeamsListView(frame, "TeamsList"); + fTeamsListView->SetInvocationMessage(new BMessage(kMsgDebugThisTeam)); + + BScrollView * teamsScroller = new BScrollView("TeamsListScroller", + fTeamsListView, B_FOLLOW_ALL_SIDES, 0, false, true, B_NO_BORDER); + + AddChild(teamsScroller); + + // small visual tweak + if (BScrollBar* scrollBar = teamsScroller->ScrollBar(B_VERTICAL)) { + scrollBar->MoveBy(0, -1); + scrollBar->ResizeBy(0, -(B_H_SCROLL_BAR_HEIGHT - 2)); + } +} + + status_t TeamsWindow::_OpenSettings(BFile& file, uint32 mode) { Modified: haiku/trunk/src/apps/debugger/user_interface/gui/teams_window/TeamsWindow.h =================================================================== --- haiku/trunk/src/apps/debugger/user_interface/gui/teams_window/TeamsWindow.h 2010-09-22 10:02:28 UTC (rev 38784) +++ haiku/trunk/src/apps/debugger/user_interface/gui/teams_window/TeamsWindow.h 2010-09-22 10:50:08 UTC (rev 38785) @@ -19,11 +19,14 @@ TeamsWindow(SettingsManager* settingsManager); virtual ~TeamsWindow(); + static TeamsWindow* Create(SettingsManager* settingsManager); + // throws + virtual void MessageReceived(BMessage* message); virtual bool QuitRequested(); private: - + void _Init(); status_t _OpenSettings(BFile& file, uint32 mode); status_t _LoadSettings(BMessage& settings); status_t _SaveSettings();