summaryrefslogtreecommitdiff
path: root/src/tabs.py
diff options
context:
space:
mode:
Diffstat (limited to 'src/tabs.py')
-rw-r--r--src/tabs.py59
1 files changed, 48 insertions, 11 deletions
diff --git a/src/tabs.py b/src/tabs.py
index 430ee7f8..4ed8a335 100644
--- a/src/tabs.py
+++ b/src/tabs.py
@@ -69,6 +69,17 @@ STATE_COLORS = {
# 'attention': lambda: get_theme().COLOR_TAB_ATTENTION,
}
+VERTICAL_STATE_COLORS = {
+ 'disconnected': lambda: get_theme().COLOR_VERTICAL_TAB_DISCONNECTED,
+ 'message': lambda: get_theme().COLOR_VERTICAL_TAB_NEW_MESSAGE,
+ 'highlight': lambda: get_theme().COLOR_VERTICAL_TAB_HIGHLIGHT,
+ 'private': lambda: get_theme().COLOR_VERTICAL_TAB_PRIVATE,
+ 'normal': lambda: get_theme().COLOR_VERTICAL_TAB_NORMAL,
+ 'current': lambda: get_theme().COLOR_VERTICAL_TAB_CURRENT,
+# 'attention': lambda: get_theme().COLOR_VERTICAL_TAB_ATTENTION,
+ }
+
+
STATE_PRIORITY = {
'normal': -1,
'current': -1,
@@ -107,6 +118,13 @@ class Tab(object):
return Tab.tab_core.tab_win
@property
+ def left_tab_win(self):
+ if not Tab.tab_core:
+ Tab.tab_core = singleton.Singleton(core.Core)
+ return Tab.tab_core.left_tab_win
+
+
+ @property
def info_win(self):
return self.core.information_win
@@ -115,6 +133,10 @@ class Tab(object):
return STATE_COLORS[self._state]()
@property
+ def vertical_color(self):
+ return VERTICAL_STATE_COLORS[self._state]()
+
+ @property
def state(self):
return self._state
@@ -135,6 +157,7 @@ class Tab(object):
Tab.visible = False
else:
Tab.visible = True
+ windows.Win._tab_win = scr
def complete_commands(self, the_input):
"""
@@ -202,6 +225,11 @@ class Tab(object):
else:
return False
+ def refresh_tab_win(self):
+ self.tab_win.refresh()
+ if self.left_tab_win:
+ self.left_tab_win.refresh()
+
def refresh(self):
"""
Called on each screen refresh (when something has changed)
@@ -665,6 +693,7 @@ class MucTab(ChatTab):
else:
arg = None
if self.joined:
+ self.disconnect()
muc.leave_groupchat(self.core.xmpp, self.name, self.own_nick, arg)
self.add_message(_("\x195}You left the chatroom\x193}"))
if self == self.core.current_tab():
@@ -891,7 +920,7 @@ class MucTab(ChatTab):
self.v_separator.refresh()
self.user_win.refresh(self.users)
self.info_header.refresh(self, self.text_win)
- self.tab_win.refresh()
+ self.refresh_tab_win()
self.info_win.refresh()
self.input.refresh()
@@ -1063,7 +1092,7 @@ class MucTab(ChatTab):
if from_nick == self.own_nick: # we are banned
self.disconnect()
self.core.disable_private_tabs(self.name)
- self.tab_win.refresh()
+ self.refresh_tab_win()
self.core.doupdate()
if by:
kick_msg = _('\x191}%(spec)s \x193}You\x195} have been banned by \x194}%(by)s') % {'spec': get_theme().CHAR_KICK, 'by':by}
@@ -1090,7 +1119,7 @@ class MucTab(ChatTab):
if from_nick == self.own_nick: # we are kicked
self.disconnect()
self.core.disable_private_tabs(self.name)
- self.tab_win.refresh()
+ self.refresh_tab_win()
self.core.doupdate()
if by:
kick_msg = _('\x191}%(spec)s \x193}You\x195} have been kicked by \x193}%(by)s') % {'spec': get_theme().CHAR_KICK, 'by':by}
@@ -1118,7 +1147,7 @@ class MucTab(ChatTab):
# We are now out of the room. Happens with some buggy (? not sure) servers
self.disconnect()
self.core.disable_private_tabs(from_room)
- self.tab_win.refresh()
+ self.refresh_tab_win()
self.core.doupdate()
hide_exit_join = config.get('hide_exit_join', -1) if config.get('hide_exit_join', -1) >= -1 else -1
if hide_exit_join == -1 or user.has_talked_since(hide_exit_join):
@@ -1376,7 +1405,7 @@ class PrivateTab(ChatTab):
self.text_win.refresh()
self.info_header.refresh(self.name, self.text_win, self.chatstate)
self.info_win.refresh()
- self.tab_win.refresh()
+ self.refresh_tab_win()
self.input.refresh()
def refresh_info_header(self):
@@ -1584,9 +1613,17 @@ class RosterInfoTab(Tab):
return
else:
jid = JID(args[0]).bare
+ if not jid in [contact.bare_jid for contact in roster.get_contacts()]:
+ self.core.information('No subscription to deny')
+ return
+
self.core.xmpp.sendPresence(pto=jid, ptype='unsubscribed')
- if self.core.xmpp.update_roster(jid, subscription='remove'):
- roster.remove_contact(jid)
+ try:
+ if self.core.xmpp.update_roster(jid, subscription='remove'):
+ roster.remove_contact(jid)
+ except Exception as e:
+ import traceback
+ log.debug(_('Traceback when removing %s from the roster:\n')+traceback.format_exc())
def command_add(self, args):
"""
@@ -1844,7 +1881,7 @@ class RosterInfoTab(Tab):
self.roster_win.refresh(roster)
self.contact_info_win.refresh(self.roster_win.get_selected_row())
self.information_win.refresh()
- self.tab_win.refresh()
+ self.refresh_tab_win()
self.input.refresh()
def get_name(self):
@@ -2109,7 +2146,7 @@ class ConversationTab(ChatTab):
self.upper_bar.refresh(self.get_name(), roster.get_contact_by_jid(self.get_name()))
self.info_header.refresh(self.get_name(), roster.get_contact_by_jid(self.get_name()), self.text_win, self.chatstate, ConversationTab.additional_informations)
self.info_win.refresh()
- self.tab_win.refresh()
+ self.refresh_tab_win()
self.input.refresh()
def refresh_info_header(self):
@@ -2222,7 +2259,7 @@ class MucListTab(Tab):
self.upper_message.refresh()
self.list_header.refresh()
self.listview.refresh()
- self.tab_win.refresh()
+ self.refresh_tab_win()
self.input.refresh()
self.update_commands()
@@ -2370,7 +2407,7 @@ class SimpleTextTab(Tab):
self.resize()
log.debug(' TAB Refresh: %s'%self.__class__.__name__)
self.text_win.refresh()
- self.tab_win.refresh()
+ self.refresh_tab_win()
self.input.refresh()
def on_lose_focus(self):