diff --git a/src/core.py b/src/core.py index dfea7dd3..9deac05c 100644 --- a/src/core.py +++ b/src/core.py @@ -196,6 +196,8 @@ class Core(object): self.xmpp.add_event_handler("attention", self.on_attention) self.xmpp.register_handler(Callback('ALL THE STANZAS', connection.MatchAll(None), self.incoming_stanza)) + self.initial_joins = [] + self.timed_events = set() self.connected_events = {} @@ -638,6 +640,7 @@ class Core(object): if not tab: self.open_new_room(bm.jid, bm.nick, False) nick = bm.nick if bm.nick else self.own_nick + self.initial_joins.append(bm.jid) muc.join_groupchat(self.xmpp, bm.jid, nick) def on_groupchat_presence(self, presence): diff --git a/src/tabs.py b/src/tabs.py index c98bbed4..f170d738 100644 --- a/src/tabs.py +++ b/src/tabs.py @@ -86,11 +86,11 @@ VERTICAL_STATE_COLORS = { STATE_PRIORITY = { 'normal': -1, 'current': -1, + 'disconnected': 0, 'message': 1, 'joined': 1, 'highlight': 2, 'private': 2, - 'disconnected': 3, 'attention': 3 } @@ -99,7 +99,11 @@ class Tab(object): tab_core = None def __init__(self): self.input = None - self._state = 'normal' + if isinstance(self, MucTab) and not self.joined: + self._state = 'disconnected' + else: + self._state = 'normal' + self.need_resize = False self.nb = Tab.number Tab.number += 1 @@ -158,7 +162,7 @@ class Tab(object): if not value in STATE_COLORS: log.debug("Invalid value for tab state: %s", value) elif STATE_PRIORITY[value] < STATE_PRIORITY[self._state] and \ - value != 'current' and value != 'joined': + value not in ('current', 'disconnected'): log.debug("Did not set status because of lower priority, asked: %s, kept: %s", value, self._state) else: self._state = value @@ -509,10 +513,10 @@ class MucTab(ChatTab): plugin_commands = {} plugin_keys = {} def __init__(self, jid, nick): + self.joined = False ChatTab.__init__(self) self.own_nick = nick self.name = jid - self.joined = False self.users = [] self.topic = '' self.remote_wants_chatstates = True @@ -1080,8 +1084,11 @@ class MucTab(ChatTab): self.users.append(new_user) if from_nick == self.own_nick: self.joined = True - if self != self.core.current_tab(): - self.state = 'joined' + if self.get_name() in self.core.initial_joins: + self.core.initial_joins.remove(self.get_name()) + self._state = 'normal' + elif self != self.core.current_tab(): + self._state = 'joined' if self.core.current_tab() == self and self.core.status.show not in ('xa', 'away'): self.send_chat_state('active') new_user.color = get_theme().COLOR_OWN_NICK