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
This commit is contained in:
@@ -22,6 +22,8 @@
|
|||||||
#include <TerminalTextView.h>
|
#include <TerminalTextView.h>
|
||||||
#include <TerminalWindow.h>
|
#include <TerminalWindow.h>
|
||||||
|
|
||||||
|
#include <debugger.h>
|
||||||
|
|
||||||
int id = 1;
|
int id = 1;
|
||||||
|
|
||||||
TerminalWindow::TerminalWindow(BPoint topLeft, BMessage * settings)
|
TerminalWindow::TerminalWindow(BPoint topLeft, BMessage * settings)
|
||||||
@@ -238,21 +240,20 @@ void
|
|||||||
TerminalWindow::MessageReceived(BMessage *message)
|
TerminalWindow::MessageReceived(BMessage *message)
|
||||||
{
|
{
|
||||||
switch (message->what){
|
switch (message->what){
|
||||||
case TERMINAL_START_NEW_TERMINAL: {
|
case TERMINAL_START_NEW_TERMINAL:
|
||||||
status_t result = be_roster->Launch(APP_SIGNATURE);
|
StartNewTerminal(message);
|
||||||
if (result != B_OK) {
|
|
||||||
// TODO: notify user
|
|
||||||
}
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
|
case TERMINAL_SWITCH_TERMINAL:
|
||||||
|
SwitchTerminals(message);
|
||||||
|
break;
|
||||||
case B_COPY:
|
case B_COPY:
|
||||||
fTextView->Copy(be_clipboard);
|
EditCopy(message);
|
||||||
break;
|
break;
|
||||||
case B_PASTE:
|
case B_PASTE:
|
||||||
fTextView->Paste(be_clipboard);
|
EditPaste(message);
|
||||||
break;
|
break;
|
||||||
case EDIT_CLEAR_ALL:
|
case EDIT_CLEAR_ALL:
|
||||||
fTextView->Clear();
|
EditClearAll(message);
|
||||||
break;
|
break;
|
||||||
// case FONT_SIZE:
|
// case FONT_SIZE:
|
||||||
// {
|
// {
|
||||||
@@ -317,3 +318,57 @@ TerminalWindow::QuitRequested()
|
|||||||
return true;
|
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();
|
||||||
|
}
|
||||||
|
|||||||
@@ -25,10 +25,17 @@ public:
|
|||||||
virtual void MenusBeginning(void);
|
virtual void MenusBeginning(void);
|
||||||
virtual status_t InitCheck(void);
|
virtual status_t InitCheck(void);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
status_t InitWindow(int32 id, entry_ref * settingsRef = 0);
|
status_t InitWindow(int32 id, entry_ref * settingsRef = 0);
|
||||||
status_t RestoreSettings(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
|
// Menu variables
|
||||||
BMenuBar *fMenuBar;
|
BMenuBar *fMenuBar;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user