From 1ede0ee1df49cd7d9b93bb19a08621145326e9dc Mon Sep 17 00:00:00 2001 From: shatty Date: Sun, 10 Aug 2003 08:53:12 +0000 Subject: [PATCH] implemented switch terminals... cute little implementation duplicates R5 behavior exactly afaict git-svn-id: file:///srv/svn/repos/haiku/trunk/current@4262 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- src/apps/terminal/TerminalWindow.cpp | 73 ++++++++++++++++++++++++---- src/apps/terminal/TerminalWindow.h | 9 +++- 2 files changed, 72 insertions(+), 10 deletions(-) diff --git a/src/apps/terminal/TerminalWindow.cpp b/src/apps/terminal/TerminalWindow.cpp index 7d09b7bebe..ef7f68617a 100644 --- a/src/apps/terminal/TerminalWindow.cpp +++ b/src/apps/terminal/TerminalWindow.cpp @@ -22,6 +22,8 @@ #include #include +#include + int id = 1; TerminalWindow::TerminalWindow(BPoint topLeft, BMessage * settings) @@ -238,21 +240,20 @@ void TerminalWindow::MessageReceived(BMessage *message) { switch (message->what){ - case TERMINAL_START_NEW_TERMINAL: { - status_t result = be_roster->Launch(APP_SIGNATURE); - if (result != B_OK) { - // TODO: notify user - } - } + case TERMINAL_START_NEW_TERMINAL: + StartNewTerminal(message); break; + case TERMINAL_SWITCH_TERMINAL: + SwitchTerminals(message); + break; case B_COPY: - fTextView->Copy(be_clipboard); + EditCopy(message); break; case B_PASTE: - fTextView->Paste(be_clipboard); + EditPaste(message); break; case EDIT_CLEAR_ALL: - fTextView->Clear(); + EditClearAll(message); break; // case FONT_SIZE: // { @@ -317,3 +318,57 @@ TerminalWindow::QuitRequested() return true; } +void +TerminalWindow::StartNewTerminal(BMessage * message) +{ + status_t result = be_roster->Launch(APP_SIGNATURE); + if (result != B_OK) { + // TODO: notify user + debugger("TerminalWindow::StartNewTerminal failed in Launch"); + } +} + +void +TerminalWindow::SwitchTerminals(BMessage * message) +{ + status_t result; + thread_id id = find_thread(NULL); + thread_info info; + result = get_thread_info(id,&info); + if (result != B_OK) { + // TODO: notify user + debugger("TerminalWindow::SwitchTerminals failed in get_thread_info"); + return; + } + BList teams; + be_roster->GetAppList(APP_SIGNATURE,&teams); + int32 index = teams.IndexOf((void*)info.team); + if (index < -1) { + // TODO: notify user + debugger("TerminalWindow::SwitchTerminals failed in IndexOf"); + return; + } + do { + index = (index-1)%teams.CountItems(); + team_id next = (team_id)teams.ItemAt(index); + result = be_roster->ActivateApp(next); + } while (result != B_OK); +} + +void +TerminalWindow::EditCopy(BMessage * message) +{ + fTextView->Copy(be_clipboard); +} + +void +TerminalWindow::EditPaste(BMessage * message) +{ + fTextView->Paste(be_clipboard); +} + +void +TerminalWindow::EditClearAll(BMessage * message) +{ + fTextView->Clear(); +} diff --git a/src/apps/terminal/TerminalWindow.h b/src/apps/terminal/TerminalWindow.h index 353d3b8095..aa35237b09 100644 --- a/src/apps/terminal/TerminalWindow.h +++ b/src/apps/terminal/TerminalWindow.h @@ -25,10 +25,17 @@ public: virtual void MenusBeginning(void); virtual status_t InitCheck(void); -private: +private: status_t InitWindow(int32 id, entry_ref * settingsRef = 0); status_t RestoreSettings(entry_ref * settingsRef = 0); + // message received helpers + void StartNewTerminal(BMessage * message); + void SwitchTerminals(BMessage * message); + void EditCopy(BMessage * message); + void EditPaste(BMessage * message); + void EditClearAll(BMessage * message); + // Menu variables BMenuBar *fMenuBar;