diff --git a/src/apps/terminal/TermWindow.cpp b/src/apps/terminal/TermWindow.cpp index e9ff79b671..ed7f67e6ff 100644 --- a/src/apps/terminal/TermWindow.cpp +++ b/src/apps/terminal/TermWindow.cpp @@ -161,6 +161,7 @@ TermWindow::TermWindow(BRect frame, const BString& title, fNextSessionID(0), fTabView(NULL), fMenuBar(NULL), + fSwitchTerminalsMenuItem(NULL), fEncodingMenu(NULL), fPrintSettings(NULL), fPrefWindow(NULL), @@ -185,11 +186,20 @@ TermWindow::TermWindow(BRect frame, const BString& title, _InitWindow(); _AddTab(args); + + // register as an application roster listener -- we want to know when other + // terminals are started and quit, so we can update the our + // "Switch Terminals" menu item. + be_roster->StartWatching(this); + + _UpdateSwitchTerminalsMenuItem(); } TermWindow::~TermWindow() { + be_roster->StopWatching(this); + _FinishTitleDialog(); if (fPrefWindow) @@ -356,6 +366,7 @@ TermWindow::_SetupMenu() // Terminal .AddMenu(B_TRANSLATE("Terminal")) .AddItem(B_TRANSLATE("Switch Terminals"), MENU_SWITCH_TERM, B_TAB) + .GetItem(fSwitchTerminalsMenuItem) .AddItem(B_TRANSLATE("New Terminal"), MENU_NEW_TERM, 'N') .AddItem(B_TRANSLATE("New tab"), kNewTab, 'T') .AddSeparator() @@ -798,6 +809,17 @@ TermWindow::MessageReceived(BMessage *message) _OpenSetWindowTitleDialog(); break; + case B_SOME_APP_LAUNCHED: + case B_SOME_APP_QUIT: + { + BString signature; + if (message->FindString("be:signature", &signature) == B_OK + && signature == TERM_SIGNATURE) { + _UpdateSwitchTerminalsMenuItem(); + } + break; + } + default: BWindow::MessageReceived(message); break; @@ -1347,6 +1369,18 @@ TermWindow::_MakeWindowSizeMenu() } +void +TermWindow::_UpdateSwitchTerminalsMenuItem() +{ + // get the running Terminal teams + BList teams; + be_roster->GetAppList(TERM_SIGNATURE, &teams); + + // update the menu item + fSwitchTerminalsMenuItem->SetEnabled(teams.CountItems() > 1); +} + + void TermWindow::_TitleSettingsChanged() { diff --git a/src/apps/terminal/TermWindow.h b/src/apps/terminal/TermWindow.h index 7e5959d2a7..436a4dbf92 100644 --- a/src/apps/terminal/TermWindow.h +++ b/src/apps/terminal/TermWindow.h @@ -123,8 +123,9 @@ private: void _SetTermColors(TermViewContainerView* termView); void _InitWindow(); void _SetupMenu(); - static BMenu* _MakeEncodingMenu(); - static BMenu* _MakeWindowSizeMenu(); + static BMenu* _MakeEncodingMenu(); + static BMenu* _MakeWindowSizeMenu(); + void _UpdateSwitchTerminalsMenuItem(); void _GetPreferredFont(BFont &font); status_t _DoPageSetup(); @@ -174,6 +175,7 @@ private: SmartTabView* fTabView; BMenuBar* fMenuBar; + BMenuItem* fSwitchTerminalsMenuItem; BMenu* fEncodingMenu; BMessage* fPrintSettings;