Enable/disable the "Switch Terminals" menu item depending on whether there are

other Terminals. Fixes #6613.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@39530 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
Ingo Weinhold
2010-11-19 23:51:16 +00:00
parent 45a4344050
commit b216f4070e
2 changed files with 38 additions and 2 deletions
+34
View File
@@ -161,6 +161,7 @@ TermWindow::TermWindow(BRect frame, const BString& title,
fNextSessionID(0), fNextSessionID(0),
fTabView(NULL), fTabView(NULL),
fMenuBar(NULL), fMenuBar(NULL),
fSwitchTerminalsMenuItem(NULL),
fEncodingMenu(NULL), fEncodingMenu(NULL),
fPrintSettings(NULL), fPrintSettings(NULL),
fPrefWindow(NULL), fPrefWindow(NULL),
@@ -185,11 +186,20 @@ TermWindow::TermWindow(BRect frame, const BString& title,
_InitWindow(); _InitWindow();
_AddTab(args); _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() TermWindow::~TermWindow()
{ {
be_roster->StopWatching(this);
_FinishTitleDialog(); _FinishTitleDialog();
if (fPrefWindow) if (fPrefWindow)
@@ -356,6 +366,7 @@ TermWindow::_SetupMenu()
// Terminal // Terminal
.AddMenu(B_TRANSLATE("Terminal")) .AddMenu(B_TRANSLATE("Terminal"))
.AddItem(B_TRANSLATE("Switch Terminals"), MENU_SWITCH_TERM, B_TAB) .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 Terminal"), MENU_NEW_TERM, 'N')
.AddItem(B_TRANSLATE("New tab"), kNewTab, 'T') .AddItem(B_TRANSLATE("New tab"), kNewTab, 'T')
.AddSeparator() .AddSeparator()
@@ -798,6 +809,17 @@ TermWindow::MessageReceived(BMessage *message)
_OpenSetWindowTitleDialog(); _OpenSetWindowTitleDialog();
break; 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: default:
BWindow::MessageReceived(message); BWindow::MessageReceived(message);
break; 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 void
TermWindow::_TitleSettingsChanged() TermWindow::_TitleSettingsChanged()
{ {
+4 -2
View File
@@ -123,8 +123,9 @@ private:
void _SetTermColors(TermViewContainerView* termView); void _SetTermColors(TermViewContainerView* termView);
void _InitWindow(); void _InitWindow();
void _SetupMenu(); void _SetupMenu();
static BMenu* _MakeEncodingMenu(); static BMenu* _MakeEncodingMenu();
static BMenu* _MakeWindowSizeMenu(); static BMenu* _MakeWindowSizeMenu();
void _UpdateSwitchTerminalsMenuItem();
void _GetPreferredFont(BFont &font); void _GetPreferredFont(BFont &font);
status_t _DoPageSetup(); status_t _DoPageSetup();
@@ -174,6 +175,7 @@ private:
SmartTabView* fTabView; SmartTabView* fTabView;
BMenuBar* fMenuBar; BMenuBar* fMenuBar;
BMenuItem* fSwitchTerminalsMenuItem;
BMenu* fEncodingMenu; BMenu* fEncodingMenu;
BMessage* fPrintSettings; BMessage* fPrintSettings;