From 38d5ce6271ca1648326ffa64cf38bb461e76242e Mon Sep 17 00:00:00 2001 From: Ingo Weinhold Date: Fri, 19 Nov 2010 01:08:21 +0000 Subject: [PATCH] * Removed "move" parameter from the TermView::Listener::{Previous,Next}TermView() methods. All B_COMMAND_KEY combos are intercepted by the window, so we never get them in the view. * Added window shortcut Command-Shift-Left/Right to move the tabs. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@39490 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- src/apps/terminal/TermConst.h | 2 ++ src/apps/terminal/TermView.cpp | 16 ++++++--------- src/apps/terminal/TermView.h | 4 ++-- src/apps/terminal/TermWindow.cpp | 34 ++++++++++++++++++++++++-------- src/apps/terminal/TermWindow.h | 4 ++-- 5 files changed, 38 insertions(+), 22 deletions(-) diff --git a/src/apps/terminal/TermConst.h b/src/apps/terminal/TermConst.h index 651802539e..69f6039dcb 100644 --- a/src/apps/terminal/TermConst.h +++ b/src/apps/terminal/TermConst.h @@ -91,6 +91,8 @@ static const uint32 MSG_SET_TERMNAL_TITLE = 'sett'; static const uint32 MSG_QUIT_TERMNAL = 'qutt'; static const uint32 MSG_REPORT_MOUSE_EVENT = 'mous'; static const uint32 MSG_SAVE_WINDOW_POSITION = 'swps'; +static const uint32 MSG_MOVE_TAB_LEFT = 'mvtl'; +static const uint32 MSG_MOVE_TAB_RIGHT = 'mvtr'; // Preference Read/Write Keys static const char* const PREF_HALF_FONT_FAMILY = "Half Font Family"; diff --git a/src/apps/terminal/TermView.cpp b/src/apps/terminal/TermView.cpp index 099c28229c..e16a0954d9 100644 --- a/src/apps/terminal/TermView.cpp +++ b/src/apps/terminal/TermView.cpp @@ -1589,10 +1589,8 @@ TermView::KeyDown(const char *bytes, int32 numBytes) case B_LEFT_ARROW: if (rawChar == B_LEFT_ARROW) { if ((mod & B_SHIFT_KEY) != 0) { - if (fListener != NULL) { - fListener->PreviousTermView(this, - (mod & B_COMMAND_KEY) != 0); - } + if (fListener != NULL) + fListener->PreviousTermView(this); return; } if ((mod & B_CONTROL_KEY) || (mod & B_COMMAND_KEY)) @@ -1605,10 +1603,8 @@ TermView::KeyDown(const char *bytes, int32 numBytes) case B_RIGHT_ARROW: if (rawChar == B_RIGHT_ARROW) { if ((mod & B_SHIFT_KEY) != 0) { - if (fListener != NULL) { - fListener->NextTermView(this, - (mod & B_COMMAND_KEY) != 0); - } + if (fListener != NULL) + fListener->NextTermView(this); return; } if ((mod & B_CONTROL_KEY) || (mod & B_COMMAND_KEY)) @@ -3310,12 +3306,12 @@ TermView::Listener::SetTermViewTitle(TermView* view, const char* title) void -TermView::Listener::PreviousTermView(TermView* view, bool move) +TermView::Listener::PreviousTermView(TermView* view) { } void -TermView::Listener::NextTermView(TermView* view, bool move) +TermView::Listener::NextTermView(TermView* view) { } diff --git a/src/apps/terminal/TermView.h b/src/apps/terminal/TermView.h index c27bec8df6..f9dc6228a7 100644 --- a/src/apps/terminal/TermView.h +++ b/src/apps/terminal/TermView.h @@ -296,8 +296,8 @@ public: int32 reason); virtual void SetTermViewTitle(TermView* view, const char* title); - virtual void PreviousTermView(TermView* view, bool move); - virtual void NextTermView(TermView* view, bool move); + virtual void PreviousTermView(TermView* view); + virtual void NextTermView(TermView* view); }; diff --git a/src/apps/terminal/TermWindow.cpp b/src/apps/terminal/TermWindow.cpp index b0ecc0ffb9..1d5f3ae294 100644 --- a/src/apps/terminal/TermWindow.cpp +++ b/src/apps/terminal/TermWindow.cpp @@ -220,6 +220,11 @@ TermWindow::_InitWindow() AddShortcut('1' + i, B_COMMAND_KEY, message); } + AddShortcut(B_LEFT_ARROW, B_COMMAND_KEY | B_SHIFT_KEY, + new BMessage(MSG_MOVE_TAB_LEFT)); + AddShortcut(B_RIGHT_ARROW, B_COMMAND_KEY | B_SHIFT_KEY, + new BMessage(MSG_MOVE_TAB_RIGHT)); + BRect textFrame = Bounds(); textFrame.top = fMenubar->Bounds().bottom + 1.0; @@ -677,6 +682,12 @@ TermWindow::MessageReceived(BMessage *message) _CheckChildren(); break; + case MSG_MOVE_TAB_LEFT: + case MSG_MOVE_TAB_RIGHT: + _NavigateTab(_IndexOfTermView(_ActiveTermView()), + message->what == MSG_MOVE_TAB_LEFT ? -1 : 1, true); + break; + case kSetActiveTab: { int32 index; @@ -957,12 +968,19 @@ TermWindow::_NavigateTab(int32 index, int32 direction, bool move) if (count <= 1 || index < 0 || index >= count) return; + int32 newIndex = (index + direction + count) % count; + if (newIndex == index) + return; + if (move) { - // TODO: Move the tab! - } else { - index += direction; - fTabView->Select((index + count) % count); + // move the given tab to the new index + Session* session = (Session*)fSessions.RemoveItem(index); + fSessions.AddItem(session, newIndex); + fTabView->MoveTab(index, newIndex); } + + // activate the respective tab + fTabView->Select(newIndex); } @@ -1122,16 +1140,16 @@ TermWindow::SetTermViewTitle(TermView* view, const char* title) void -TermWindow::PreviousTermView(TermView* view, bool move) +TermWindow::PreviousTermView(TermView* view) { - _NavigateTab(_IndexOfTermView(view), -1, move); + _NavigateTab(_IndexOfTermView(view), -1, false); } void -TermWindow::NextTermView(TermView* view, bool move) +TermWindow::NextTermView(TermView* view) { - _NavigateTab(_IndexOfTermView(view), 1, move); + _NavigateTab(_IndexOfTermView(view), 1, false); } diff --git a/src/apps/terminal/TermWindow.h b/src/apps/terminal/TermWindow.h index 2883ac7c81..7a92312795 100644 --- a/src/apps/terminal/TermWindow.h +++ b/src/apps/terminal/TermWindow.h @@ -82,8 +82,8 @@ private: int32 reason); virtual void SetTermViewTitle(TermView* view, const char* title); - virtual void PreviousTermView(TermView* view, bool move); - virtual void NextTermView(TermView* view, bool move); + virtual void PreviousTermView(TermView* view); + virtual void NextTermView(TermView* view); private: struct Title {