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:
@@ -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()
|
||||
{
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user