Allow unsetting the listener. With multiple tabs there's only one

terminal view that is attached to the window and can receive messages at
all.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25964 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
Ingo Weinhold
2008-06-15 16:13:33 +00:00
parent 91f7786bc3
commit ecd79a2cc1
2 changed files with 24 additions and 8 deletions
+22 -8
View File
@@ -17,7 +17,8 @@
TerminalBuffer::TerminalBuffer() TerminalBuffer::TerminalBuffer()
: :
BLocker("terminal buffer"), BLocker("terminal buffer"),
fEncoding(M_UTF8) fEncoding(M_UTF8),
fListenerValid(false)
{ {
} }
@@ -41,6 +42,14 @@ void
TerminalBuffer::SetListener(BMessenger listener) TerminalBuffer::SetListener(BMessenger listener)
{ {
fListener = listener; fListener = listener;
fListenerValid = true;
}
void
TerminalBuffer::UnsetListener()
{
fListenerValid = false;
} }
@@ -61,23 +70,28 @@ TerminalBuffer::SetEncoding(int encoding)
void void
TerminalBuffer::SetTitle(const char* title) TerminalBuffer::SetTitle(const char* title)
{ {
BMessage message(MSG_SET_TERMNAL_TITLE); if (fListenerValid) {
message.AddString("title", title); BMessage message(MSG_SET_TERMNAL_TITLE);
fListener.SendMessage(&message); message.AddString("title", title);
fListener.SendMessage(&message);
}
} }
void void
TerminalBuffer::NotifyQuit(int32 reason) TerminalBuffer::NotifyQuit(int32 reason)
{ {
BMessage message(MSG_QUIT_TERMNAL); if (fListenerValid) {
message.AddInt32("reason", reason); BMessage message(MSG_QUIT_TERMNAL);
fListener.SendMessage(&message); message.AddInt32("reason", reason);
fListener.SendMessage(&message);
}
} }
void void
TerminalBuffer::NotifyListener() TerminalBuffer::NotifyListener()
{ {
fListener.SendMessage(MSG_TERMINAL_BUFFER_CHANGED); if (fListenerValid)
fListener.SendMessage(MSG_TERMINAL_BUFFER_CHANGED);
} }
+2
View File
@@ -20,6 +20,7 @@ public:
int32 historySize); int32 historySize);
void SetListener(BMessenger listener); void SetListener(BMessenger listener);
void UnsetListener();
int Encoding() const; int Encoding() const;
void SetEncoding(int encoding); void SetEncoding(int encoding);
@@ -35,6 +36,7 @@ private:
// listener/dirty region management // listener/dirty region management
BMessenger fListener; BMessenger fListener;
bool fListenerValid;
}; };