From d9fdb4f6cdba4e444b19404e3d4dfe1c86b2f575 Mon Sep 17 00:00:00 2001 From: Stefano Ceccherini Date: Tue, 20 Jul 2010 20:38:53 +0000 Subject: [PATCH] Added Shell::HasActiveProcesses() and TermView::IsShellBusy() (which calls the former) to tell if some process launched from the terminal is still running. Some style fix in Shell.h, made a parameter const. Added basic TermWindow::QuitRequested() git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@37631 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- src/apps/terminal/Shell.cpp | 13 ++++++++++++- src/apps/terminal/Shell.h | 22 +++++++++++++--------- src/apps/terminal/TermView.cpp | 7 +++++++ src/apps/terminal/TermView.h | 2 ++ src/apps/terminal/TermWindow.cpp | 7 +++++++ src/apps/terminal/TermWindow.h | 1 + 6 files changed, 42 insertions(+), 10 deletions(-) diff --git a/src/apps/terminal/Shell.cpp b/src/apps/terminal/Shell.cpp index 120a5418f6..46fea57e37 100644 --- a/src/apps/terminal/Shell.cpp +++ b/src/apps/terminal/Shell.cpp @@ -214,7 +214,7 @@ Shell::GetAttr(struct termios &attr) const status_t -Shell::SetAttr(struct termios &attr) +Shell::SetAttr(const struct termios &attr) { if (tcsetattr(fFd, TCSANOW, &attr) < 0) return errno; @@ -229,6 +229,17 @@ Shell::FD() const } +bool +Shell::HasActiveProcesses() const +{ + pid_t running = tcgetpgrp(fFd); + if (running == fProcessID || running == -1) + return false; + + return true; +} + + status_t Shell::AttachBuffer(TerminalBuffer *buffer) { diff --git a/src/apps/terminal/Shell.h b/src/apps/terminal/Shell.h index c2c101ed58..83daebafa7 100644 --- a/src/apps/terminal/Shell.h +++ b/src/apps/terminal/Shell.h @@ -24,32 +24,36 @@ public: Shell(); virtual ~Shell(); - status_t Open(int row, int col, const char *encoding, int argc, const char **argv); + status_t Open(int row, int col, const char* encoding, + int argc, const char** argv); void Close(); - const char * TTYName() const; + const char* TTYName() const; - ssize_t Read(void *buffer, size_t numBytes) const; - ssize_t Write(const void *buffer, size_t numBytes); + ssize_t Read(void* buffer, size_t numBytes) const; + ssize_t Write(const void* buffer, size_t numBytes); status_t UpdateWindowSize(int row, int columns); - status_t GetAttr(struct termios &attr) const; - status_t SetAttr(struct termios &attr); + status_t GetAttr(struct termios& attr) const; + status_t SetAttr(const struct termios& attr); int FD() const; pid_t ProcessID() const { return fProcessID; } + + bool HasActiveProcesses() const; - virtual status_t AttachBuffer(TerminalBuffer *buffer); + virtual status_t AttachBuffer(TerminalBuffer* buffer); virtual void DetachBuffer(); private: int fFd; pid_t fProcessID; - TermParse *fTermParse; + TermParse* fTermParse; bool fAttached; - status_t _Spawn(int row, int col, const char *encoding, int argc, const char **argv); + status_t _Spawn(int row, int col, const char* encoding, + int argc, const char** argv); }; #endif // _SHELL_H diff --git a/src/apps/terminal/TermView.cpp b/src/apps/terminal/TermView.cpp index c80ce2d0c7..7afe6706b5 100644 --- a/src/apps/terminal/TermView.cpp +++ b/src/apps/terminal/TermView.cpp @@ -381,6 +381,13 @@ TermView::~TermView() } +bool +TermView::IsShellBusy() const +{ + return fShell != NULL && fShell->HasActiveProcesses(); +} + + /* static */ BArchivable * TermView::Instantiate(BMessage* data) diff --git a/src/apps/terminal/TermView.h b/src/apps/terminal/TermView.h index 07f231ef30..f394ede819 100644 --- a/src/apps/terminal/TermView.h +++ b/src/apps/terminal/TermView.h @@ -46,6 +46,8 @@ public: virtual void GetPreferredSize(float* _width, float* _height); + bool IsShellBusy() const; + const char* TerminalName() const; inline TerminalBuffer* TextBuffer() const { return fTextBuffer; } diff --git a/src/apps/terminal/TermWindow.cpp b/src/apps/terminal/TermWindow.cpp index c5bd98b3a8..32479ca28a 100644 --- a/src/apps/terminal/TermWindow.cpp +++ b/src/apps/terminal/TermWindow.cpp @@ -230,6 +230,13 @@ TermWindow::_InitWindow() } +bool +TermWindow::QuitRequested() +{ + return BWindow::QuitRequested(); +} + + void TermWindow::MenusBeginning() { diff --git a/src/apps/terminal/TermWindow.h b/src/apps/terminal/TermWindow.h index 6c45983f93..dc3d9a5585 100644 --- a/src/apps/terminal/TermWindow.h +++ b/src/apps/terminal/TermWindow.h @@ -56,6 +56,7 @@ public: void SessionChanged(); protected: + virtual bool QuitRequested(); virtual void MessageReceived(BMessage *message); virtual void WindowActivated(bool); virtual void MenusBeginning();