diff --git a/src/apps/terminal/TermWindow.cpp b/src/apps/terminal/TermWindow.cpp index ea1e42f5c5..65de38b6c1 100644 --- a/src/apps/terminal/TermWindow.cpp +++ b/src/apps/terminal/TermWindow.cpp @@ -90,6 +90,7 @@ private: struct TermWindow::Session { int32 id; BString name; + BString windowTitle; TermViewContainerView* containerView; Session(int32 id, TermViewContainerView* containerView) @@ -112,6 +113,12 @@ public: { } + virtual void Select(int32 tab) + { + SmartTabView::Select(tab); + fWindow->SessionChanged(); + } + virtual void RemoveAndDeleteTab(int32 index) { fWindow->_RemoveTab(index); @@ -123,7 +130,10 @@ private: TermWindow::TermWindow(BRect frame, const char* title, Arguments *args) - : BWindow(frame, title, B_DOCUMENT_WINDOW, B_CURRENT_WORKSPACE|B_QUIT_ON_WINDOW_CLOSE), + : + BWindow(frame, title, B_DOCUMENT_WINDOW, + B_CURRENT_WORKSPACE | B_QUIT_ON_WINDOW_CLOSE), + fInitialTitle(title), fTabView(NULL), fMenubar(NULL), fFilemenu(NULL), @@ -165,6 +175,29 @@ TermWindow::~TermWindow() } +void +TermWindow::SetSessionWindowTitle(TermView* termView, const char* title) +{ + int32 index = _IndexOfTermView(termView); + if (Session* session = (Session*)fSessions.ItemAt(index)) { + session->windowTitle = title; + BTab* tab = fTabView->TabAt(index); + tab->SetLabel(session->windowTitle.String()); + if (index == fTabView->Selection()) + SetTitle(session->windowTitle.String()); + } +} + + +void +TermWindow::SessionChanged() +{ + int32 index = fTabView->Selection(); + if (Session* session = (Session*)fSessions.ItemAt(index)) + SetTitle(session->windowTitle.String()); +} + + void TermWindow::_InitWindow() { @@ -664,6 +697,7 @@ TermWindow::_AddTab(Arguments *args) containerView, view); Session* session = new Session(_NewSessionID(), containerView); + session->windowTitle = fInitialTitle; fSessions.AddItem(session); BTab *tab = new BTab; @@ -898,6 +932,6 @@ CustomTermView::NotifyQuit(int32 reason) void CustomTermView::SetTitle(const char *title) { - //Window()->SetTitle(title); + dynamic_cast(Window())->SetSessionWindowTitle(this, title); } diff --git a/src/apps/terminal/TermWindow.h b/src/apps/terminal/TermWindow.h index d66dbf9d15..fb3df5c5a0 100644 --- a/src/apps/terminal/TermWindow.h +++ b/src/apps/terminal/TermWindow.h @@ -51,6 +51,10 @@ public: TermWindow(BRect frame, const char* title, Arguments *args); virtual ~TermWindow(); + void SetSessionWindowTitle(TermView* termView, + const char* title); + void SessionChanged(); + protected: virtual void MessageReceived(BMessage *message); virtual void WindowActivated(bool); @@ -79,6 +83,7 @@ private: void _BuildWindowSizeMenu(BMenu *menu); int32 _NewSessionID(); + BString fInitialTitle; BList fSessions; TabView *fTabView;