title: How does HandlerManager work with source?
body: <p>I've analyzed <a href="http://code.google.com/p/google-web-toolkit/source/browse/trunk/user/src/com/google/gwt/event/shared/HandlerManager.java" rel="nofollow">HandlerManager</a> and <strong>I do not</strong> see how it handles event source. Line 117:</p>
  
  <pre><code>public void fireEvent(GwtEvent&lt;?&gt; event) {
      ...
      Object oldSource = event.getSource();
      event.overrideSource(source);
      try {
  
        // May throw an UmbrellaException.
        eventBus.fireEvent(event); // &lt;--- LOOK HERE
      } catch (com.google.web.bindery.event.shared.UmbrellaException e) {
        throw new UmbrellaException(e.getCauses());
      } finally {
        ....
      }
  }
  </code></pre>
  
  <p>But <a href="http://code.google.com/p/google-web-toolkit/source/browse/trunk/user/src/com/google/web/bindery/event/shared/SimpleEventBus.java" rel="nofollow">simple event bus</a> implementation has following code, line 86:</p>
  
  <pre><code>@Override
  public void fireEvent(Event&lt;?&gt; event) {
      doFire(event, null); // &lt;---- SOURCE IS NULL???
  }
  
  @Override
  public void fireEventFromSource(Event&lt;?&gt; event, Object source) {
      if (source == null) {
        throw new NullPointerException("Cannot fire from a null source");
      }
      doFire(event, source);
  }
  </code></pre>
  
  <p>So, HandlerManager <strong>does not</strong> fire events with source, because it always calls <em>doFire(event, null);</em></p>
  
  <p>Could you make it clear how does HandlerManager fire event for source? As HandlerManager used in Widget, how does it fire events for Widget instance only?</p>