void StatusWindow::WaitForClose() { fCloseSem = create_sem(0, "close_sem"); Lock(); Report* r = Report::Instance(); char b[80]; sprintf(b, "%d Infos, %d Warnings, %d Errors", r->Count(kInfo), r->Count(kWarning), r->Count(kError)); fPageLabel->SetText(b); fCancel->SetLabel("Close"); fCancel->SetEnabled(true); UpdateReport(); bool hasErrors = r->Count(kError); bool hasErrorsOrWarnings = hasErrors || r->Count(kWarning); bool hasErrorsWarningsOrInfo = hasErrorsOrWarnings || r->Count(kInfo); if (fCloseOption == kAlways || (fCloseOption == kNoErrors && !hasErrors) || (fCloseOption == kNoErrorsOrWarnings && !hasErrorsOrWarnings) || (fCloseOption == kNoErrorsWarningsOrInfo && !hasErrorsWarningsOrInfo)) { PostMessage(kCancelMsg); } Unlock(); acquire_sem(fCloseSem); delete_sem(fCloseSem); }