Separate the code to update the toolbar. Now we can update when the

status / caps chance.
This commit is contained in:
js 2008-07-22 15:40:20 +00:00
parent 65d5d92087
commit 213d9dd54c
1 changed files with 59 additions and 38 deletions

View File

@ -1038,20 +1038,27 @@ class ChatControl(ChatControlBase):
id = self.actions_button.connect('clicked', self.on_actions_button_clicked) id = self.actions_button.connect('clicked', self.on_actions_button_clicked)
self.handlers[id] = self.actions_button self.handlers[id] = self.actions_button
add_to_roster_button = self.xml.get_widget('add_to_roster_button') self._add_to_roster_button = self.xml.get_widget(
id = add_to_roster_button.connect('clicked', self._on_add_to_roster_menuitem_activate) 'add_to_roster_button')
self.handlers[id] = add_to_roster_button id = self._add_to_roster_button.connect('clicked',
self._on_add_to_roster_menuitem_activate)
self.handlers[id] = self._add_to_roster_button
send_file_button = self.xml.get_widget('send_file_button') self._send_file_button = self.xml.get_widget('send_file_button')
id = send_file_button.connect('clicked', self._on_send_file_menuitem_activate) id = self._send_file_button.connect('clicked',
self.handlers[id] = send_file_button self._on_send_file_menuitem_activate)
self.handlers[id] = self._send_file_button
convert_to_gc_button = self.xml.get_widget('convert_to_gc_button') self._convert_to_gc_button = self.xml.get_widget(
id = convert_to_gc_button.connect('clicked', self._on_convert_to_gc_menuitem_activate) 'convert_to_gc_button')
self.handlers[id] = convert_to_gc_button id = self._convert_to_gc_button.connect('clicked',
self._on_convert_to_gc_menuitem_activate)
self.handlers[id] = self._convert_to_gc_button
contact_information_button = self.xml.get_widget('contact_information_button') contact_information_button = self.xml.get_widget(
id = contact_information_button.connect('clicked', self._on_contact_information_menuitem_activate) 'contact_information_button')
id = contact_information_button.connect('clicked',
self._on_contact_information_menuitem_activate)
self.handlers[id] = contact_information_button self.handlers[id] = contact_information_button
compact_view = gajim.config.get('compact_view') compact_view = gajim.config.get('compact_view')
@ -1059,8 +1066,10 @@ class ChatControl(ChatControlBase):
self.widget_set_visible(self.xml.get_widget('banner_eventbox'), self.widget_set_visible(self.xml.get_widget('banner_eventbox'),
gajim.config.get('hide_chat_banner')) gajim.config.get('hide_chat_banner'))
self.authentication_button = self.xml.get_widget('authentication_button') self.authentication_button = self.xml.get_widget(
id = self.authentication_button.connect('clicked', self._on_authentication_button_clicked) 'authentication_button')
id = self.authentication_button.connect('clicked',
self._on_authentication_button_clicked)
self.handlers[id] = self.authentication_button self.handlers[id] = self.authentication_button
# Add lock image to show chat encryption # Add lock image to show chat encryption
@ -1069,27 +1078,14 @@ class ChatControl(ChatControlBase):
# Convert to GC icon # Convert to GC icon
img = self.xml.get_widget('convert_to_gc_button_image') img = self.xml.get_widget('convert_to_gc_button_image')
img.set_from_pixbuf(gtkgui_helpers.load_icon('muc_active').get_pixbuf()) img.set_from_pixbuf(gtkgui_helpers.load_icon(
'muc_active').get_pixbuf())
# Add to roster button self.update_toolbar()
if _('Not in Roster') in contact.groups:
add_to_roster_button.show()
# If we don't have resource, we can't do file transfer
# in transports, contact holds our info we need to disable it too
if gajim.capscache.is_supported(contact, NS_FILE):
send_file_button.set_sensitive(True)
else:
send_file_button.set_sensitive(False)
# check if it's possible to convert to groupchat
if gajim.capscache.is_supported(contact, NS_MUC):
convert_to_gc_button.set_sensitive(True)
else:
convert_to_gc_button.set_sensitive(False)
# keep timeout id and window obj for possible big avatar # keep timeout id and window obj for possible big avatar
# it is on enter-notify and leave-notify so no need to be per jid # it is on enter-notify and leave-notify so no need to be
# per jid
self.show_bigger_avatar_timeout_id = None self.show_bigger_avatar_timeout_id = None
self.bigger_avatar_window = None self.bigger_avatar_window = None
self.show_avatar(self.contact.resource) self.show_avatar(self.contact.resource)
@ -1121,7 +1117,8 @@ class ChatControl(ChatControlBase):
self.handlers[id] = widget self.handlers[id] = widget
if not session: if not session:
session = gajim.connections[self.account].find_controlless_session(self.contact.jid) session = gajim.connections[self.account]. \
find_controlless_session(self.contact.jid)
if session: if session:
session.control = self session.control = self
@ -1136,8 +1133,9 @@ class ChatControl(ChatControlBase):
gpg_pref = gajim.config.get_per('contacts', contact.jid, gpg_pref = gajim.config.get_per('contacts', contact.jid,
'gpg_enabled') 'gpg_enabled')
e2e_pref = gajim.config.get_per('accounts', self.account, e2e_pref = gajim.config.get_per('accounts', self.account,
'autonegotiate_esessions') and gajim.config.get_per('contacts', 'autonegotiate_esessions') and \
contact.jid, 'autonegotiate_esessions') gajim.config.get_per('contacts', contact.jid,
'autonegotiate_esessions')
# try GPG first # try GPG first
if not e2e_is_active and gpg_pref and \ if not e2e_is_active and gpg_pref and \
@ -1169,9 +1167,30 @@ class ChatControl(ChatControlBase):
# restore previous conversation # restore previous conversation
self.restore_conversation() self.restore_conversation()
def update_toolbar(self):
# Add to roster
if _('Not in Roster') in self.contact.groups:
self._add_to_roster_button.show()
else:
self._add_to_roster_button.hide()
# Send file
if gajim.capscache.is_supported(self.contact, NS_FILE):
self._send_file_button.set_sensitive(True)
else:
self._send_file_button.set_sensitive(False)
# Convert to GC
if gajim.capscache.is_supported(self.contact, NS_MUC):
self._convert_to_gc_button.set_sensitive(True)
else:
self._convert_to_gc_button.set_sensitive(False)
def on_avatar_eventbox_enter_notify_event(self, widget, event): def on_avatar_eventbox_enter_notify_event(self, widget, event):
'''we enter the eventbox area so we under conditions add a timeout '''
to show a bigger avatar after 0.5 sec''' we enter the eventbox area so we under conditions add a timeout
to show a bigger avatar after 0.5 sec
'''
jid = self.contact.jid jid = self.contact.jid
is_fake = False is_fake = False
if self.type_id == message_control.TYPE_PM: if self.type_id == message_control.TYPE_PM:
@ -1190,14 +1209,16 @@ class ChatControl(ChatControlBase):
# do we have something bigger to show? # do we have something bigger to show?
if avatar_w > scaled_buf_w or avatar_h > scaled_buf_h: if avatar_w > scaled_buf_w or avatar_h > scaled_buf_h:
# wait for 0.5 sec in case we leave earlier # wait for 0.5 sec in case we leave earlier
self.show_bigger_avatar_timeout_id = gobject.timeout_add(500, self.show_bigger_avatar_timeout_id = \
gobject.timeout_add(500,
self.show_bigger_avatar, widget) self.show_bigger_avatar, widget)
def on_avatar_eventbox_leave_notify_event(self, widget, event): def on_avatar_eventbox_leave_notify_event(self, widget, event):
'''we left the eventbox area that holds the avatar img''' '''we left the eventbox area that holds the avatar img'''
# did we add a timeout? if yes remove it # did we add a timeout? if yes remove it
if self.show_bigger_avatar_timeout_id is not None: if self.show_bigger_avatar_timeout_id is not None:
gobject.source_remove(self.show_bigger_avatar_timeout_id) gobject.source_remove(
self.show_bigger_avatar_timeout_id)
def on_avatar_eventbox_button_press_event(self, widget, event): def on_avatar_eventbox_button_press_event(self, widget, event):
'''If right-clicked, show popup''' '''If right-clicked, show popup'''