From 44700c12da6c13b18d28174b43ff3896669a9953 Mon Sep 17 00:00:00 2001 From: Travis Shirk Date: Sat, 4 Feb 2006 02:52:36 +0000 Subject: [PATCH] Fixes #1495 --- src/chat_control.py | 15 +++++++++++++++ src/gajim.py | 27 +++++++++++++++++---------- src/groupchat_control.py | 12 ++++-------- src/message_control.py | 5 +++++ 4 files changed, 41 insertions(+), 18 deletions(-) diff --git a/src/chat_control.py b/src/chat_control.py index 51cb2c8b1..8da27aa30 100644 --- a/src/chat_control.py +++ b/src/chat_control.py @@ -680,6 +680,14 @@ class ChatControlBase(MessageControl): widget.set_no_show_all(False) widget.show_all() + def got_connected(self): + self.msg_textview.set_sensitive(True) + self.xml.get_widget('send_button').set_sensitive(True) + + def got_disconnected(self): + self.msg_textview.set_sensitive(False) + self.xml.get_widget('send_button').set_sensitive(False) + ################################################################################ class ChatControl(ChatControlBase): '''A control for standard 1-1 chat''' @@ -1454,3 +1462,10 @@ class ChatControl(ChatControlBase): def _on_toggle_gpg_menuitem_activate(self, widget): tb = self.xml.get_widget('gpg_togglebutton') tb.set_active(not tb.get_active()) + + def got_connected(self): + ChatControlBase.got_connected(self) + # Refreshing contact + self.contact = gajim.contacts.get_contact_with_highest_priority(self.account, + self.contact.jid) + self.draw_banner() diff --git a/src/gajim.py b/src/gajim.py index 2603aef7d..a0b71d5fd 100755 --- a/src/gajim.py +++ b/src/gajim.py @@ -270,19 +270,26 @@ class Interface: #('STATUS', account, status) model = self.roster.status_combobox.get_model() if status == 'offline': - model[self.roster.status_message_menuitem_iter][3] = False # sensitivity for this menuitem + # sensitivity for this menuitem + model[self.roster.status_message_menuitem_iter][3] = False gajim.allow_notifications[account] = False - # we are disconnected from all gc - if not gajim.gc_connected.has_key(account): - return - for room_jid in gajim.gc_connected[account]: - gc_control = gajim.interface.msg_win_mgr.get_control(room_jid, account) - if gc_control: - gc_control.got_disconnected() - gc_control.parent_win.redraw_tab(gc_control) + else: gobject.timeout_add(30000, self.allow_notif, account) - model[self.roster.status_message_menuitem_iter][3] = True # sensitivity for this menuitem + # sensitivity for this menuitem + model[self.roster.status_message_menuitem_iter][3] = True + + # Inform all controls for this account of the connection state change + for ctrl in gajim.interface.msg_win_mgr.controls(): + if ctrl.account == account: + if status == 'offline': + ctrl.got_disconnected() + else: + # Other code rejoins all GCs, so we don't do it here + if not ctrl.type_id == message_control.TYPE_GC: + ctrl.got_connected() + ctrl.parent_win.redraw_tab(ctrl) + self.roster.on_status_changed(account, status) if account in self.show_vcard_when_connect: jid = gajim.get_jid_from_account(account) diff --git a/src/groupchat_control.py b/src/groupchat_control.py index e1dbba06c..cfe141b0d 100644 --- a/src/groupchat_control.py +++ b/src/groupchat_control.py @@ -534,26 +534,22 @@ class GroupchatControl(ChatControlBase): def got_connected(self): gajim.gc_connected[self.account][self.room_jid] = True - self.msg_textview.set_sensitive(True) - self.xml.get_widget('send_button').set_sensitive(True) + ChatControlBase.got_connected(self) def got_disconnected(self): - model = self.list_treeview.get_model() - model.clear() + self.list_treeview.get_model().clear() nick_list = gajim.contacts.get_nick_list(self.account, self.room_jid) for nick in nick_list: gc_contact = gajim.contacts.get_gc_contact(self.account, self.room_jid, nick) gajim.contacts.remove_gc_contact(self.account, gc_contact) gajim.gc_connected[self.account][self.room_jid] = False - self.msg_textview.set_sensitive(False) - self.xml.get_widget('send_button').set_sensitive(False) # Note, since this method is called during initialization it is NOT safe # to call self.parent_win.redraw_tab here + ChatControlBase.got_disconnected(self) def draw_roster(self): - model = self.list_treeview.get_model() - model.clear() + self.list_treeview.get_model().clear() for nick in gajim.contacts.get_nick_list(self.account, self.room_jid): gc_contact = gajim.contacts.get_gc_contact(self.account, self.room_jid, nick) self.add_contact_to_roster(nick, gc_contact.show, gc_contact.role, diff --git a/src/message_control.py b/src/message_control.py index c5d7e9e32..7c39070f3 100644 --- a/src/message_control.py +++ b/src/message_control.py @@ -115,6 +115,11 @@ class MessageControl: # NOTE: Derived classes MAY implement this self.compact_view_current = state + def got_connected(self): + pass + def got_disconnected(self): + pass + def get_specific_unread(self): n = 0 if gajim.awaiting_events[self.account].has_key(self.contact.jid):