def remove_listener(self, event, callback, single=None, priority=None):
        """ Remove the event listener matching the same signature used for
        adding it.  This will remove AT MOST one entry meeting the signature
        requirements. """
        event_stack = self._events[event]
        for x in event_stack:
            if x['callback'] == callback and \
               (single is None or x['single'] == single) and \
               (priority is None or x['priority'] == priority):
                event_stack.remove(x)
                break
        else:
            raise KeyError('Listener not found for "%s": %s' % (event,
                           callback))
Remove the event listener matching the same signature used for
        adding it.  This will remove AT MOST one entry meeting the signature
        requirements.