diff --git a/src/apps/terminal/PrefHandler.cpp b/src/apps/terminal/PrefHandler.cpp index 93c583b52e..1ca83038d1 100644 --- a/src/apps/terminal/PrefHandler.cpp +++ b/src/apps/terminal/PrefHandler.cpp @@ -163,6 +163,15 @@ PrefHandler::Save(const char *path) } +void +PrefHandler::SaveDefaultAsText() +{ + BPath path; + if (GetDefaultPath(path) == B_OK) + SaveAsText(path.Path(), PREFFILE_MIMETYPE); +} + + void PrefHandler::SaveAsText(const char *path, const char *mimetype, const char *signature) diff --git a/src/apps/terminal/PrefHandler.h b/src/apps/terminal/PrefHandler.h index bd7d5e070b..b85231d7c1 100644 --- a/src/apps/terminal/PrefHandler.h +++ b/src/apps/terminal/PrefHandler.h @@ -68,6 +68,7 @@ class PrefHandler { status_t Open(const char *name); status_t OpenText(const char *path); status_t Save(const char *name); + void SaveDefaultAsText(); void SaveAsText(const char *path, const char *minmtype = NULL, const char *signature = NULL); diff --git a/src/apps/terminal/PrefWindow.cpp b/src/apps/terminal/PrefWindow.cpp index b39a79cc8e..e8a33d7af0 100644 --- a/src/apps/terminal/PrefWindow.cpp +++ b/src/apps/terminal/PrefWindow.cpp @@ -132,11 +132,8 @@ PrefWindow::_Save() delete fPreviousPref; fPreviousPref = new PrefHandler(PrefHandler::Default()); - BPath path; - if (PrefHandler::GetDefaultPath(path) == B_OK) { - PrefHandler::Default()->SaveAsText(path.Path(), PREFFILE_MIMETYPE); - fDirty = false; - } + PrefHandler::Default()->SaveDefaultAsText(); + fDirty = false; } diff --git a/src/apps/terminal/TermWindow.cpp b/src/apps/terminal/TermWindow.cpp index c2523deb41..f4794a2a39 100644 --- a/src/apps/terminal/TermWindow.cpp +++ b/src/apps/terminal/TermWindow.cpp @@ -166,11 +166,9 @@ TermWindow::~TermWindow() // TODO: Code duplication. Exterminate if (fPrefWindow) fPrefWindow->PostMessage(B_QUIT_REQUESTED); - else { - BPath path; - if (PrefHandler::GetDefaultPath(path) == B_OK) - PrefHandler::Default()->SaveAsText(path.Path(), PREFFILE_MIMETYPE); - } + else + PrefHandler::Default()->SaveDefaultAsText(); + if (fFindPanel && fFindPanel->Lock()) { fFindPanel->Quit(); @@ -297,6 +295,8 @@ TermWindow::_SetupMenu() fFilemenu->AddItem(new BMenuItem("About Terminal" B_UTF8_ELLIPSIS, new BMessage(B_ABOUT_REQUESTED))); fFilemenu->AddSeparatorItem(); + fFilemenu->AddItem(new BMenuItem("Close Active Tab", + new BMessage(kCloseView), 'W', B_SHIFT_KEY)); fFilemenu->AddItem(new BMenuItem("Quit", new BMessage(B_QUIT_REQUESTED), 'Q')); fMenubar->AddItem(fFilemenu); @@ -631,12 +631,15 @@ TermWindow::MessageReceived(BMessage *message) case kCloseView: { TermView* termView; - if (message->FindPointer("termView", (void**)&termView) == B_OK) { - int32 index = _IndexOfTermView(termView); - if (index >= 0) { - _RemoveTab(index); - } - } + int32 index = -1; + if (message->FindPointer("termView", (void**)&termView) == B_OK) + index = _IndexOfTermView(termView); + else + index = _IndexOfTermView(_ActiveTermView()); + + if (index >= 0) + _RemoveTab(index); + break; }