docs: 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)