Author: asterix Date: 2007-03-10 12:30:23 +0100 (Sat, 10 Mar 2007) New Revision: 8008
Modified: trunk/src/common/events.py trunk/src/systray.py Log: [Mikhail Gusarov and me] Use listeners when an event is added / removed to the events class and use them to update systray.
Modified: trunk/src/common/events.py =================================================================== --- trunk/src/common/events.py 2007-03-09 19:58:21 UTC (rev 8007) +++ trunk/src/common/events.py 2007-03-10 11:30:23 UTC (rev 8008) @@ -21,7 +21,6 @@ ##
import time -import gajim
class Event: '''Information concerning each event''' @@ -48,7 +47,37 @@ '''Information concerning all events''' def __init__(self): self._events = {} # list of events {acct: {jid1: [E1, E2]}, } + self._event_added_listeners = [] + self._event_removed_listeners = []
+ def event_added_subscribe(self, listener): + '''Add a listener when an event is added to the queue''' + if not listener in self._event_added_listeners: + self._event_added_listeners.append(listener) + + def event_added_unsubscribe(self, listener): + '''Remove a listener when an event is added to the queue''' + if listener in self._event_added_listeners: + self._event_added_listeners.remove(listener) + + def event_removed_subscribe(self, listener): + '''Add a listener when an event is removed from the queue''' + if not listener in self._event_removed_listeners: + self._event_removed_listeners.append(listener) + + def event_removed_unsubscribe(self, listener): + '''Remove a listener when an event is removed from the queue''' + if listener in self._event_removed_listeners: + self._event_removed_listeners.remove(listener) + + def fire_event_added(self, event): + for listener in self._event_added_listeners: + listener(event) + + def fire_event_removed(self): + for listener in self._event_removed_listeners: + listener() + def change_account_name(self, old_name, new_name): if self._events.has_key(old_name): self._events[new_name] = self._events[old_name] @@ -77,8 +106,7 @@ self._events[account][jid] = [event] else: self._events[account][jid].append(event) - if event.show_in_systray and gajim.interface.systray_capabilities: - gajim.interface.systray.set_img() + self.fire_event_added(event)
def remove_events(self, account, jid, event = None, types = []): '''if event is not specified, remove all events from this jid, @@ -94,8 +122,7 @@ del self._events[account][jid] else: self._events[account][jid].remove(event) - if event.show_in_systray and gajim.interface.systray_capabilities: - gajim.interface.systray.set_img() + self.fire_event_deleted(event) return else: return True @@ -110,13 +137,11 @@ self._events[account][jid] = new_list else: del self._events[account][jid] - if gajim.interface.systray_capabilities: - gajim.interface.systray.set_img() + self.fire_event_removed() return # no event nor type given, remove them all del self._events[account][jid] - if gajim.interface.systray_capabilities: - gajim.interface.systray.set_img() + self.fire_event_removed()
def change_jid(self, account, old_jid, new_jid): if not self._events[account].has_key(old_jid):
Modified: trunk/src/systray.py =================================================================== --- trunk/src/systray.py 2007-03-09 19:58:21 UTC (rev 8007) +++ trunk/src/systray.py 2007-03-10 11:30:23 UTC (rev 8008) @@ -59,6 +59,25 @@ self.xml.signal_autoconnect(self) self.popup_menus = []
+ def subscribe_events(self): + '''Register listeners to the events class''' + gajim.events.event_added_subscribe(self.on_event_added) + gajim.events.event_removed_subscribe(self.on_event_removed) + + def unsubscribe_events(self): + '''Unregister listeners to the events class''' + gajim.events.event_added_unsubscribe(self.on_event_added) + gajim.events.event_removed_unsubscribe(self.on_event_removed) + + def on_event_added(self, event): + '''Called when an event is added to the event list''' + if event.show_in_systray: + self.set_img() + + def on_event_removed(self): + '''Called when one or more events are removed from the event list''' + self.set_img() + def set_img(self): if not gajim.interface.systray_enabled: return @@ -373,9 +392,11 @@ eb.add(self.img_tray) self.t.add(eb) self.set_img() + self.subscribe_events() self.t.show_all()
def hide_icon(self): if self.t: self.t.destroy() self.t = None + self.unsubscribe_events()