Changeset 173

Show
Ignore:
Timestamp:
04/28/2005 03:12:37 AM (4 years ago)
Author:
petli
Message:

Improve IM tracing: avoid having clients of the same type overwriting each others unseen status

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • trunk/examples/petliwm.py

    r172 r173  
    7272     
    7373    def __client_init__(self): 
     74        self.traceim_unseen = None 
     75        self.traceim_message = None 
     76        self.traceim_is_unseen = 0 
     77         
    7478        for enable, unseen, message in self.traceim_clients: 
    7579            if enable(self): 
     80                wmanager.debug('traceim', 'Enabling IM tracing for %s' % self.get_title()) 
    7681                self.traceim_unseen = unseen 
    7782                self.traceim_message = message 
     
    7984                self.dispatch.add_handler(wmevents.ClientIconified, self.traceim_handle_iconified) 
    8085                self.dispatch.add_handler(wmevents.ClientDeiconified, self.traceim_handle_iconified) 
     86                self.traceim_update() 
    8187                break 
    8288 
     89    def __client_del__(self): 
     90        if self.traceim_is_unseen: 
     91            self.wm.traceim_remove_message(self) 
    8392 
    8493    def traceim_handle_property(self, evt): 
     
    91100    def traceim_update(self): 
    92101        if self.traceim_unseen(self): 
    93             self.wm.traceim_add_message(self.traceim_message) 
     102            if not self.traceim_is_unseen: 
     103                wmanager.debug('traceim', 'Unseen IM for %s' % self.get_title()) 
     104                self.traceim_is_unseen = 1 
     105                self.wm.traceim_add_message(self, self.traceim_message) 
    94106        else: 
    95             self.wm.traceim_remove_message(self.traceim_message) 
     107            if self.traceim_is_unseen: 
     108                wmanager.debug('traceim', 'No longer unseen IM for %s' % self.get_title()) 
     109                self.traceim_is_unseen = 0 
     110                self.wm.traceim_remove_message(self) 
    96111             
    97112 
     
    100115    mw_traceim_justification = modewindow.LEFT 
    101116     
    102     def __wm_init__(self): 
    103         self.mw_traceim_messages = [] 
     117    def __wm_screen_init__(self): 
     118        self.mw_traceim_unseen_clients = {} 
    104119        self.mw_traceim_message = modewindow.Message(self.mw_traceim_position, 
    105120                                                     self.mw_traceim_justification) 
     121 
     122    def __wm_init__(self): 
    106123        for s in self.screens: 
    107124            s.modewindow_add_message(self.mw_traceim_message) 
    108125             
    109     def traceim_add_message(self, message): 
    110         if message not in self.mw_traceim_messages: 
    111             self.mw_traceim_messages.append(message) 
    112             self.mw_traceim_message.set_text(' '.join(self.mw_traceim_messages)) 
    113  
    114     def traceim_remove_message(self, message): 
     126    def traceim_add_message(self, client, message): 
     127        self.mw_traceim_unseen_clients[client] = message 
     128        self.mw_traceim_message.set_text(' '.join(self.mw_traceim_unseen_clients.values())) 
     129 
     130    def traceim_remove_message(self, client): 
    115131        try: 
    116             self.mw_traceim_messages.remove(message) 
    117         except ValueError: 
     132            del self.mw_traceim_unseen_clients[client] 
     133        except KeyError: 
    118134            return 
    119135         
    120         self.mw_traceim_message.set_text(' '.join(self.mw_traceim_messages)) 
     136        self.mw_traceim_message.set_text(' '.join(self.mw_traceim_unseen_clients.values())) 
    121137         
    122138 
     
    141157 
    142158    traceim_clients = [ 
    143         (And(name('Emacs'), re_title('KOM')), # only KOM client Emacs 
     159        (name('Emacs'),                       # KOM runs in Emacs 
    144160         And(iconified, re_title('Olästa')),  # only when iconified and unread 
    145161         'Olästa')