diff --git a/src/servers/app/ServerWindow.cpp b/src/servers/app/ServerWindow.cpp index d9d75b9776..0db7cb6617 100644 --- a/src/servers/app/ServerWindow.cpp +++ b/src/servers/app/ServerWindow.cpp @@ -675,6 +675,11 @@ ServerWindow::_CreateView(BPrivate::LinkReceiver& link, View** _parent) if (newView == NULL) return NULL; + if (newView->InitCheck() != B_OK) { + delete newView; + return NULL; + } + // there is no way of setting this, other than manually :-) newView->SetViewColor(viewColor); newView->SetHidden(hidden); @@ -1292,10 +1297,7 @@ ServerWindow::_DispatchMessage(int32 code, BPrivate::LinkReceiver &link) } default: - // TODO: when creating a View, check for yet non-existing - // View::InitCheck() and take appropriate actions, then checking - // for fCurrentView->CurrentState() is unnecessary - if (fCurrentView == NULL || fCurrentView->CurrentState() == NULL) { + if (fCurrentView == NULL) { BString codeName; string_for_message_code(code, codeName); debug_printf("ServerWindow %s received unexpected code - " diff --git a/src/servers/app/View.cpp b/src/servers/app/View.cpp index 503d433723..bb4bb92a7b 100644 --- a/src/servers/app/View.cpp +++ b/src/servers/app/View.cpp @@ -149,6 +149,16 @@ View::~View() } +status_t +View::InitCheck() const +{ + if (fDrawState == NULL) + return B_NO_MEMORY; + + return B_OK; +} + + IntRect View::Bounds() const { diff --git a/src/servers/app/View.h b/src/servers/app/View.h index 1f219e6f81..f532023bd2 100644 --- a/src/servers/app/View.h +++ b/src/servers/app/View.h @@ -42,6 +42,7 @@ class View { const char* name, int32 token, uint32 resizeMode, uint32 flags); virtual ~View(); + status_t InitCheck() const; int32 Token() const { return fToken; }