Even when there is no tooltip, setTooltip() accounts for about 5% of the
time spent setting the values on an ArrayEditable, of which about 2% is
Ox.filter.
There only a few possible sets of events, so use object identity rather
than calculating the set difference. In particular, this is a lot faster
when self.options.tooltip is false-y.
(I think it was actually wrong before, anyway:
bindTooltipEvents({mouseenter, mouseleave})
bindTooltipEvents({mousemove, mouseleave})
would (correctly) unbind mouseenter and bind mousemove, but would set
boundTooltipEvents = {mousemove} even though mouseleave is still bound.)
In strict mode (in recent browsers), modifying deltaX on a WheelEvent
throws an exception:
Uncaught TypeError: Cannot set property deltaX of #<WheelEvent> which has only a getter
In non-strict mode or older browsers, assigning to deltaX is just a
no-op.
https://github.com/jquery/jquery-mousewheel/blob/master/jquery.mousewheel.js
is cited in this function; it uses $.event.fix() to make a mutable
jQuery.Event-flavoured copy of the native event before modifying its
properties. Let's do the same.
Fixes#2751