def dispatch_event(self, event):
""" Dispatch a launched event to all affected listeners.
@param event: Event launched.
@type event: C{L{Event}}
"""
if event.type in self.listeners and self.listeners[event.type]:
for obj in self.listeners[event.type]:
# Try to call event-specific handle method
fctname = obj.event_pattern %(event.type)
if hasattr(obj, fctname):
function = getattr(obj, fctname)
if callable(function):
if dispatcher == 'gobject':
import gobject
gobject.idle_add(function, event, priority=gobject.PRIORITY_HIGH)
elif dispatcher == 'callback':
function(event)
continue
else:
logger.warning('Event-specific handler found but not callable.')
# Try to call default handle method
if hasattr(obj, obj.event_default):
function = getattr(obj, obj.event_default)
if callable(function):
if dispatcher == 'gobject':
import gobject
gobject.idle_add(function, event, priority=gobject.PRIORITY_HIGH)
elif dispatcher == 'callback':
function(event)
continue
# No handle method found, raise error ?
if not obj.event_silent:
raise UnhandledEventError('%s has no method to handle %s' %(obj, event))
else:
#logger.warning('No listener for the event type %r.', event.type)
pass
评论列表
文章目录