code: def run(self):
          
          try:
              while self.py3_wrapper.running:
                  event_str = self.poller_inp.readline()
                  if not event_str:
                      continue
                  try:
                      # remove leading comma if present
                      if event_str[0] == ",":
                          event_str = event_str[1:]
                      event = loads(event_str)
                      self.dispatch_event(event)
                  except Exception:
                      self.py3_wrapper.report_exception("Event failed")
          except:  # noqa e722
              err = "Events thread died, click events are disabled."
              self.py3_wrapper.report_exception(err, notify_user=False)
              self.py3_wrapper.notify_user(err, level="warning")
docs: Wait for an i3bar JSON event, then find the right module to dispatch
          the message to based on the 'name' and 'instance' of the event.
  
          In case the module does NOT support click_events, the default
          implementation is to clear the module's cache
          when the MIDDLE button (2) is pressed on it.
  
          Example event:
          {'y': 13, 'x': 1737, 'button': 1, 'name': 'empty', 'instance': 'first'}