summaryrefslogtreecommitdiff
path: root/client
diff options
context:
space:
mode:
Diffstat (limited to 'client')
-rw-r--r--client/channel_window.go7
-rw-r--r--client/command.go8
-rw-r--r--client/window/window.go7
3 files changed, 21 insertions, 1 deletions
diff --git a/client/channel_window.go b/client/channel_window.go
index abeaa77..2a2e82f 100644
--- a/client/channel_window.go
+++ b/client/channel_window.go
@@ -68,7 +68,7 @@ func (cw *channelWindow) Location() window.Location {
func (cw *channelWindow) Kill() {
globalApp.cache.Unwatch(cw.location.id)
for u := range cw.watchedUsers {
- globalApp.cache.Watch(u)
+ globalApp.cache.Unwatch(u)
}
}
@@ -102,6 +102,11 @@ func (cw *channelWindow) Send(text string) {
cw.input.SetText("")
}
+func (cw *channelWindow) leaveChannel() {
+ globalApp.Request(proto.NewCmd("leave", cw.location.id), nil)
+ globalApp.windowCache.Evict(cw.location)
+}
+
func (cw *channelWindow) ShowStatusLine() {
ch := cw.getChannel()
if ch == nil {
diff --git a/client/command.go b/client/command.go
index f505f9a..6727114 100644
--- a/client/command.go
+++ b/client/command.go
@@ -65,6 +65,14 @@ func (a *application) doCommand(command string, args []string, text string) {
if a.authenticated {
a.join(args[0])
}
+ case "leave":
+ argN(0)
+ win := a.windowCache.Get(a.currentWindow)
+ switch win.(type) {
+ case *channelWindow:
+ win.(*channelWindow).leaveChannel()
+ }
+ a.currentWindow = cmdWindowLocation {}
case "create":
argN(1)
if a.authenticated {
diff --git a/client/window/window.go b/client/window/window.go
index a877f7b..5ed9a18 100644
--- a/client/window/window.go
+++ b/client/window/window.go
@@ -33,6 +33,13 @@ func (wc *WindowCache) Open(l Location) Window {
return wc.windows[l]
}
+func (wc *WindowCache) Evict(l Location) {
+ if wc.windows[l] != nil {
+ wc.windows[l].Kill()
+ }
+ delete(wc.windows, l)
+}
+
func (wc *WindowCache) Get(l Location) Window {
return wc.windows[l]
}