[#85] Extract EventSource related code into EventSourceWidget