[haiku-commits] r39530 - haiku/trunk/src/apps/terminal

  • From: ingo_weinhold@xxxxxx
  • To: haiku-commits@xxxxxxxxxxxxx
  • Date: Sat, 20 Nov 2010 00:51:17 +0100 (CET)

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;


Other related posts:

  • » [haiku-commits] r39530 - haiku/trunk/src/apps/terminal - ingo_weinhold