Triggers the event specified by name and passes
        self in keyword argument "event_origin"

        All additional arguments and keyword arguments are passed
        through as well

def trigger(self, name, *args, **kwargs):
        """
        Triggers the event specified by name and passes
        self in keyword argument "event_origin"

        All additional arguments and keyword arguments are passed
        through as well
        """

        mark_remove = []
        for callback, once in self.event_listeners.get(name, []):
            callback(event_origin=self, *args, **kwargs)
            if once:
                mark_remove.append( (callback, once) )

        for callback, once in mark_remove:
            self.off(name, callback, once=once)