Properly remove the info_win from the list of the
global information_buffer to make it Garbage Collected when we close the tab
This commit is contained in:
parent
ac99467965
commit
3e550f4ae7
1 changed files with 16 additions and 11 deletions
27
src/tabs.py
27
src/tabs.py
|
@ -259,6 +259,16 @@ class ChatTab(Tab):
|
||||||
def command_say(self, line):
|
def command_say(self, line):
|
||||||
raise NotImplementedError
|
raise NotImplementedError
|
||||||
|
|
||||||
|
class TabWithInfoWin(Tab):
|
||||||
|
def __init__(self):
|
||||||
|
self.info_win = windows.TextWin()
|
||||||
|
self.core.information_buffer.add_window(self.info_win)
|
||||||
|
|
||||||
|
def __del__(self):
|
||||||
|
self.core.information_buffer.del_window(self.info_win)
|
||||||
|
del self.info_win
|
||||||
|
Tab.__del__(self)
|
||||||
|
|
||||||
class InfoTab(ChatTab):
|
class InfoTab(ChatTab):
|
||||||
"""
|
"""
|
||||||
The information tab, used to display global informations
|
The information tab, used to display global informations
|
||||||
|
@ -267,8 +277,6 @@ class InfoTab(ChatTab):
|
||||||
def __init__(self, core):
|
def __init__(self, core):
|
||||||
Tab.__init__(self, core)
|
Tab.__init__(self, core)
|
||||||
self.tab_win = windows.GlobalInfoBar()
|
self.tab_win = windows.GlobalInfoBar()
|
||||||
self.info_win = windows.TextWin()
|
|
||||||
self.core.information_buffer.add_window(self.info_win)
|
|
||||||
self.input = windows.Input()
|
self.input = windows.Input()
|
||||||
self.name = "Info"
|
self.name = "Info"
|
||||||
self.color_state = theme.COLOR_TAB_NORMAL
|
self.color_state = theme.COLOR_TAB_NORMAL
|
||||||
|
@ -338,21 +346,20 @@ class InfoTab(ChatTab):
|
||||||
def on_close(self):
|
def on_close(self):
|
||||||
return
|
return
|
||||||
|
|
||||||
class MucTab(ChatTab):
|
class MucTab(ChatTab, TabWithInfoWin):
|
||||||
"""
|
"""
|
||||||
The tab containing a multi-user-chat room.
|
The tab containing a multi-user-chat room.
|
||||||
It contains an userlist, an input, a topic, an information and a chat zone
|
It contains an userlist, an input, a topic, an information and a chat zone
|
||||||
"""
|
"""
|
||||||
def __init__(self, core, room):
|
def __init__(self, core, room):
|
||||||
ChatTab.__init__(self, core, room)
|
ChatTab.__init__(self, core, room)
|
||||||
|
TabWithInfoWin.__init__(self)
|
||||||
self.topic_win = windows.Topic()
|
self.topic_win = windows.Topic()
|
||||||
self.text_win = windows.TextWin()
|
self.text_win = windows.TextWin()
|
||||||
room.add_window(self.text_win)
|
room.add_window(self.text_win)
|
||||||
self.v_separator = windows.VerticalSeparator()
|
self.v_separator = windows.VerticalSeparator()
|
||||||
self.user_win = windows.UserList()
|
self.user_win = windows.UserList()
|
||||||
self.info_header = windows.MucInfoWin()
|
self.info_header = windows.MucInfoWin()
|
||||||
self.info_win = windows.TextWin()
|
|
||||||
self.core.information_buffer.add_window(self.info_win)
|
|
||||||
self.tab_win = windows.GlobalInfoBar()
|
self.tab_win = windows.GlobalInfoBar()
|
||||||
self.input = windows.MessageInput()
|
self.input = windows.MessageInput()
|
||||||
self.ignores = [] # set of Users
|
self.ignores = [] # set of Users
|
||||||
|
@ -662,17 +669,16 @@ class MucTab(ChatTab):
|
||||||
def on_close(self):
|
def on_close(self):
|
||||||
return
|
return
|
||||||
|
|
||||||
class PrivateTab(ChatTab):
|
class PrivateTab(ChatTab, TabWithInfoWin):
|
||||||
"""
|
"""
|
||||||
The tab containg a private conversation (someone from a MUC)
|
The tab containg a private conversation (someone from a MUC)
|
||||||
"""
|
"""
|
||||||
def __init__(self, core, room):
|
def __init__(self, core, room):
|
||||||
ChatTab.__init__(self, core, room)
|
ChatTab.__init__(self, core, room)
|
||||||
|
TabWithInfoWin.__init__(self)
|
||||||
self.text_win = windows.TextWin()
|
self.text_win = windows.TextWin()
|
||||||
room.add_window(self.text_win)
|
room.add_window(self.text_win)
|
||||||
self.info_header = windows.PrivateInfoWin()
|
self.info_header = windows.PrivateInfoWin()
|
||||||
self.info_win = windows.TextWin()
|
|
||||||
self.core.information_buffer.add_window(self.info_win)
|
|
||||||
self.tab_win = windows.GlobalInfoBar()
|
self.tab_win = windows.GlobalInfoBar()
|
||||||
self.input = windows.MessageInput()
|
self.input = windows.MessageInput()
|
||||||
# keys
|
# keys
|
||||||
|
@ -1043,21 +1049,20 @@ class RosterInfoTab(Tab):
|
||||||
def on_close(self):
|
def on_close(self):
|
||||||
return
|
return
|
||||||
|
|
||||||
class ConversationTab(ChatTab):
|
class ConversationTab(ChatTab, TabWithInfoWin):
|
||||||
"""
|
"""
|
||||||
The tab containg a normal conversation (not from a MUC)
|
The tab containg a normal conversation (not from a MUC)
|
||||||
"""
|
"""
|
||||||
def __init__(self, core, jid):
|
def __init__(self, core, jid):
|
||||||
txt_buff = text_buffer.TextBuffer()
|
txt_buff = text_buffer.TextBuffer()
|
||||||
ChatTab.__init__(self, core, txt_buff)
|
ChatTab.__init__(self, core, txt_buff)
|
||||||
|
TabWithInfoWin.__init__(self)
|
||||||
self.color_state = theme.COLOR_TAB_NORMAL
|
self.color_state = theme.COLOR_TAB_NORMAL
|
||||||
self._name = jid # a conversation tab is linked to one specific full jid OR bare jid
|
self._name = jid # a conversation tab is linked to one specific full jid OR bare jid
|
||||||
self.text_win = windows.TextWin()
|
self.text_win = windows.TextWin()
|
||||||
txt_buff.add_window(self.text_win)
|
txt_buff.add_window(self.text_win)
|
||||||
self.upper_bar = windows.ConversationStatusMessageWin()
|
self.upper_bar = windows.ConversationStatusMessageWin()
|
||||||
self.info_header = windows.ConversationInfoWin()
|
self.info_header = windows.ConversationInfoWin()
|
||||||
self.info_win = windows.TextWin()
|
|
||||||
self.core.information_buffer.add_window(self.info_win)
|
|
||||||
self.tab_win = windows.GlobalInfoBar()
|
self.tab_win = windows.GlobalInfoBar()
|
||||||
self.input = windows.MessageInput()
|
self.input = windows.MessageInput()
|
||||||
# keys
|
# keys
|
||||||
|
|
Loading…
Reference in a new issue