Improve select_contact method.

* use correct API in session.py
 * only filter when really needed
This commit is contained in:
Stephan Erb 2008-05-19 20:00:41 +00:00
parent 5f7f717e29
commit ea00e4d933
3 changed files with 22 additions and 31 deletions

View File

@ -2419,8 +2419,8 @@ class Interface:
self.roster.add_to_not_in_the_roster(account, jid) self.roster.add_to_not_in_the_roster(account, jid)
self.roster.draw_contact(jid, account) self.roster.draw_contact(jid, account)
# Show contact in roster (if he is invisible for example) and select line # Select the contact in roster, it's visible because it has events.
self.roster.show_and_select_contact_if_having_events(jid, account) self.roster.select_contact(jid, account)
def remove_first_event(self, account, jid, type_ = None): def remove_first_event(self, account, jid, type_ = None):
event = gajim.events.get_first_event(account, jid, type_) event = gajim.events.get_first_event(account, jid, type_)

View File

@ -949,6 +949,12 @@ class RosterWindow:
name = gobject.markup_escape_text(contact.get_shown_name()) name = gobject.markup_escape_text(contact.get_shown_name())
groups = contact.groups
if contact.is_observer():
groups = [_('Observers')]
elif not groups:
groups = [_('General')]
# gets number of unread gc marked messages # gets number of unread gc marked messages
if jid in gajim.interface.minimized_controls[account]: if jid in gajim.interface.minimized_controls[account]:
nb_unread = len(gajim.events.get_events(account, jid, nb_unread = len(gajim.events.get_events(account, jid,
@ -966,11 +972,6 @@ class RosterWindow:
if jid in gajim.connections[account].blocked_contacts: if jid in gajim.connections[account].blocked_contacts:
strike = True strike = True
else: else:
groups = contact.groups
if contact.is_observer():
groups = [_('Observers')]
elif not groups:
groups = [_('General')]
for group in groups: for group in groups:
if group in gajim.connections[account].blocked_groups: if group in gajim.connections[account].blocked_groups:
strike = True strike = True
@ -1117,6 +1118,13 @@ class RosterWindow:
for c, acc in brothers: for c, acc in brothers:
self.draw_contact(c.jid, acc) self.draw_contact(c.jid, acc)
self.draw_avatar(c.jid, acc) self.draw_avatar(c.jid, acc)
for group in groups:
# We need to make sure that _visible_func is called for
# our groups otherwise we might not be shown
iterG = self._get_group_iter(group, account, model = self.model)
self.model[iterG][C_JID] = self.model[iterG][C_JID]
return False return False
@ -1232,10 +1240,13 @@ class RosterWindow:
self.tree.columns_autosize() self.tree.columns_autosize()
def show_and_select_contact_if_having_events(self, jid, account): def select_contact(self, jid, account):
'''Select contact in roster. If contact is hidden but has eventsi, '''Select contact in roster. If contact is hidden but has eventsi,
show him.''' show him.'''
self.refilter_shown_roster_items() # Refiltering SHOULD NOT be needed:
# When a contact gets a new event he will be redrawn and his
# icon changes, so _visible_func WILL be called on him anyway
iters = self._get_contact_iter(jid, account) iters = self._get_contact_iter(jid, account)
if not iters: if not iters:
# Not visible in roster # Not visible in roster

View File

@ -330,13 +330,6 @@ class ChatControlSession(stanza_session.EncryptedStanzaSession):
contact = gajim.interface.roster.add_to_not_in_the_roster( contact = gajim.interface.roster.add_to_not_in_the_roster(
self.conn.name, jid, user_nick) self.conn.name, jid, user_nick)
# If visible, try to get first line of contact in roster
path = None
iters = gajim.interface.roster._get_contact_iter(jid, self.conn.name,
contact=contact)
if iters:
path = gajim.interface.roster.modelfilter.get_path(iters[0])
if not self.control: if not self.control:
# if no control exists and message comes from highest prio, the new # if no control exists and message comes from highest prio, the new
# control shouldn't have a resource # control shouldn't have a resource
@ -395,23 +388,10 @@ class ChatControlSession(stanza_session.EncryptedStanzaSession):
if len(gajim.events.get_events(self.conn.name, fjid)): if len(gajim.events.get_events(self.conn.name, fjid)):
self.control.read_queue() self.control.read_queue()
if path and not gajim.interface.roster.dragging and \
gajim.config.get('scroll_roster_to_last_message'):
# we curently see contact in our roster
# show and select his line in roster
# do not change selection while DND'ing
tree = gajim.interface.roster.tree
tree.expand_row(path[0:1], False)
tree.expand_row(path[0:2], False)
tree.scroll_to_cell(path)
tree.set_cursor(path)
else: else:
if no_queue: # We didn't have a queue: we change icons if no_queue: # We didn't have a queue: we change icons
gajim.interface.roster.draw_contact(jid, self.conn.name) gajim.interface.roster.draw_contact(jid, self.conn.name)
gajim.interface.roster.show_title() # we show the * or [n] gajim.interface.roster.show_title() # we show the * or [n]
# Show contact in roster (if he is invisible for example) and select # Select contact row in roster.
# line gajim.interface.roster.select_contact(jid, self.conn.name)
gajim.interface.roster.show_and_select_contact_if_having_events(jid,
self.conn.name)