protected void onTargetMouseOver(MouseOverEvent event) {
   Element source = event.getNativeEvent().getEventTarget().cast();
   EventTarget from = event.getNativeEvent().getRelatedEventTarget();
   if (from == null || !source.isOrHasChild(from.<Element>cast())) {
     onTargetOver(event.getNativeEvent().<Event>cast());
   }
 }
  @Override
  public void onBrowserEvent(Event event) {
    super.onBrowserEvent(event);

    switch (DOM.eventGetType(event)) {
      case Event.ONCONTEXTMENU:
        EventTarget target = event.getEventTarget();

        Element svg = this.getElement().getElementsByTagName("svg").getItem(0);

        if (target.equals(svg)) {
          m_client.getContextMenu().showAt(this, event.getClientX(), event.getClientY());
          event.preventDefault();
          event.stopPropagation();
        }
        break;

      case Event.ONMOUSEDOWN:
        break;

      case Event.ONMOUSEWHEEL:
        double delta = event.getMouseWheelVelocityY() / 30.0;
        double oldScale = m_scale;
        final double newScale = oldScale + delta;
        final int clientX = event.getClientX();
        final int clientY = event.getClientY();
        // broken now need to fix it
        //    	    Command cmd = new Command() {
        //
        //                public void execute() {
        //                    m_client.updateVariable(m_paintableId, "mapScale", newScale, false);
        //                    m_client.updateVariable(m_paintableId, "clientX", clientX, false);
        //                    m_client.updateVariable(m_paintableId, "clientY", clientY, false);
        //
        //                    m_client.sendPendingVariableChanges();
        //                }
        //            };
        //
        //            if(BrowserInfo.get().isWebkit()) {
        //                Scheduler.get().scheduleDeferred(cmd);
        //            }else {
        //                cmd.execute();
        //            }

        break;
    }
  }