<module>
    <!-- This GWT module inherits all Vaadin client side functionality modules. 
        This is the module you want to inherit in your client side project to be 
        able to use com.vaadin.* classes. -->

    <!-- Hint for WidgetSetBuilder not to automatically update the file -->
    <!-- WS Compiler: manually edited -->

    <inherits name="com.google.gwt.user.User" />

    <inherits name="com.google.gwt.http.HTTP" />

    <inherits name="com.google.gwt.json.JSON" />

    <inherits name="com.google.gwt.logging.Logging" />
    <!-- Firebug handler is deprecated but for some reason still enabled 
        by default -->
    <set-property name="gwt.logging.firebugHandler" value="DISABLED" />
    <!-- Disable popup logging as we have our own popup logger -->
    <set-property name="gwt.logging.popupHandler" value="DISABLED" />

    <inherits name="com.vaadin.VaadinBrowserSpecificOverrides" />

    <source path="client" />
    <source path="shared" />

    <!-- Use own Scheduler implementation to be able to track if commands 
        are running -->
    <replace-with class="com.vaadin.client.VSchedulerImpl">
        <when-type-is class="com.google.gwt.core.client.impl.SchedulerImpl" />
    </replace-with>

    <generate-with
        class="com.vaadin.server.widgetsetutils.AcceptCriteriaFactoryGenerator">
        <when-type-is class="com.vaadin.client.ui.dd.VAcceptCriterionFactory" />
    </generate-with>

    <generate-with
        class="com.vaadin.server.widgetsetutils.ConnectorBundleLoaderFactory">
        <when-type-assignable
            class="com.vaadin.client.metadata.ConnectorBundleLoader" />
    </generate-with>

    <replace-with
        class="com.vaadin.client.communication.AtmospherePushConnection">
        <when-type-is class="com.vaadin.client.communication.PushConnection" />
    </replace-with>

    <!-- Set vaadin.profiler to true to include profiling support in the 
        module -->
    <define-property name="vaadin.profiler" values="true,false" />
    <set-property name="vaadin.profiler" value="false" />

    <replace-with class="com.vaadin.client.Profiler.EnabledProfiler">
        <when-type-is class="com.vaadin.client.Profiler" />
        <when-property-is name="vaadin.profiler" value="true" />
    </replace-with>

    <!-- Use the new cross site linker to get a nocache.js without document.write -->
    <add-linker name="xsiframe" />
    <extend-property name="user.agent" values="opera" />

    <!-- Remove IE6/IE7 permutation as they are not supported -->
    <set-property name="user.agent" value="ie8,ie9,ie10,gecko1_8,safari,opera" />

    <!-- Pointer event support -->
    <define-property name="modernie" values="none,yes" />
    <property-provider name="modernie"><![CDATA[
      {
        var ua = $wnd.navigator.userAgent;
        if (ua.indexOf('IE') == -1 && ua.indexOf('Trident') != -1) { return 'yes'; }
        return 'none';
      }
    ]]></property-provider>

    <set-property name="modernie" value="none">
        <none>
            <when-property-is name="user.agent" value="gecko1_8" />
        </none>
    </set-property>

    <!-- Fall through to this rule when the browser doesn't support pointer 
        event -->
    <replace-with class="com.vaadin.client.event.PointerEventSupportImpl">
        <when-type-is class="com.vaadin.client.event.PointerEventSupportImpl" />
    </replace-with>

    <replace-with
        class="com.vaadin.client.event.PointerEventSupportImplModernIE">
        <when-type-is class="com.vaadin.client.event.PointerEventSupportImpl" />
        <none>
            <when-property-is value="none" name="modernie" />
        </none>
    </replace-with>

    <replace-with class="com.vaadin.client.event.PointerEventSupportImplIE10">
        <when-type-is class="com.vaadin.client.event.PointerEventSupportImpl" />
        <when-property-is value="ie10" name="user.agent" />
    </replace-with>
</module>
