void TeamWindow::_HandleThreadStateChanged(thread_id threadID) { AutoLocker< ::Team> locker(fTeam); ::Thread* thread = fTeam->ThreadByID(threadID); if (thread == NULL) return; // If the thread has been stopped and we don't have an active thread yet // (or it isn't stopped), switch to this thread. Otherwise ignore the event. if (thread->State() == THREAD_STATE_STOPPED && (fActiveThread == NULL || (thread != fActiveThread && fActiveThread->State() != THREAD_STATE_STOPPED))) { _SetActiveThread(thread); } else if (thread != fActiveThread) { // otherwise ignore the event, if the thread is not the active one return; } // Switch to the threads tab view when the thread has stopped. if (thread->State() == THREAD_STATE_STOPPED) fTabView->Select(MAIN_TAB_INDEX_THREADS); _UpdateRunButtons(); }
void TeamWindow::_HandleThreadStateChanged(thread_id threadID) { AutoLocker< ::Team> locker(fTeam); ::Thread* thread = fTeam->ThreadByID(threadID); if (thread == NULL) return; // If the thread has been stopped and we don't have an active thread yet // (or it isn't stopped), switch to this thread. Otherwise ignore the event. if (thread->State() == THREAD_STATE_STOPPED && (fActiveThread == NULL || (thread != fActiveThread && fActiveThread->State() != THREAD_STATE_STOPPED))) { _SetActiveThread(thread); } else if (thread != fActiveThread) { // otherwise ignore the event, if the thread is not the active one return; } // Switch to the threads tab view when the thread has stopped. if (thread->State() == THREAD_STATE_STOPPED) { fTabView->Select(MAIN_TAB_INDEX_THREADS); // if we hit a breakpoint or exception, raise the window to the // foreground, since if this occurs while e.g. debugging a GUI // app, it might not be immediately obvious that such an event // occurred as the app may simply appear to hang. Activate(); } _UpdateRunButtons(); }
TeamWindow::~TeamWindow() { if (fThreadListView != NULL) fThreadListView->UnsetListener(); if (fStackTraceView != NULL) fStackTraceView->UnsetListener(); if (fSourceView != NULL) fSourceView->UnsetListener(); if (fInspectorWindow != NULL) { BMessenger messenger(fInspectorWindow); if (messenger.LockTarget()) fInspectorWindow->Quit(); } fTeam->RemoveListener(this); _SetActiveSourceCode(NULL); _SetActiveFunction(NULL); _SetActiveBreakpoint(NULL); _SetActiveStackFrame(NULL); _SetActiveStackTrace(NULL); _SetActiveImage(NULL); _SetActiveThread(NULL); delete fFilePanel; if (fActiveSourceWorker > 0) wait_for_thread(fActiveSourceWorker, NULL); }
TeamWindow::~TeamWindow() { if (fThreadListView != NULL) fThreadListView->UnsetListener(); if (fStackTraceView != NULL) fStackTraceView->UnsetListener(); if (fSourceView != NULL) fSourceView->UnsetListener(); fTeam->RemoveListener(this); _SetActiveSourceCode(NULL); _SetActiveFunction(NULL); _SetActiveBreakpoint(NULL); _SetActiveStackFrame(NULL); _SetActiveStackTrace(NULL); _SetActiveImage(NULL); _SetActiveThread(NULL); delete fFilePanel; }
void TeamWindow::ThreadSelectionChanged(::Thread* thread) { _SetActiveThread(thread); }