Author: bonefish Date: 2010-11-20 00:51:16 +0100 (Sat, 20 Nov 2010) New Revision: 39530 Changeset: http://dev.haiku-os.org/changeset/39530 Ticket: http://dev.haiku-os.org/ticket/6613 Modified: haiku/trunk/src/apps/terminal/TermWindow.cpp haiku/trunk/src/apps/terminal/TermWindow.h Log: Enable/disable the "Switch Terminals" menu item depending on whether there are other Terminals. Fixes #6613. Modified: haiku/trunk/src/apps/terminal/TermWindow.cpp =================================================================== --- haiku/trunk/src/apps/terminal/TermWindow.cpp 2010-11-19 23:49:46 UTC (rev 39529) +++ haiku/trunk/src/apps/terminal/TermWindow.cpp 2010-11-19 23:51:16 UTC (rev 39530) @@ -161,6 +161,7 @@ fNextSessionID(0), fTabView(NULL), fMenuBar(NULL), + fSwitchTerminalsMenuItem(NULL), fEncodingMenu(NULL), fPrintSettings(NULL), fPrefWindow(NULL), @@ -185,11 +186,20 @@ _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 @@ // 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 @@ _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; @@ -1348,6 +1370,18 @@ 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() { if (!fTitle.patternUserDefined) Modified: haiku/trunk/src/apps/terminal/TermWindow.h =================================================================== --- haiku/trunk/src/apps/terminal/TermWindow.h 2010-11-19 23:49:46 UTC (rev 39529) +++ haiku/trunk/src/apps/terminal/TermWindow.h 2010-11-19 23:51:16 UTC (rev 39530) @@ -123,8 +123,9 @@ 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 @@ SmartTabView* fTabView; BMenuBar* fMenuBar; + BMenuItem* fSwitchTerminalsMenuItem; BMenu* fEncodingMenu; BMessage* fPrintSettings;