See also: IRC log
<rbyers> Scribe: Tim_Dresser
<rbyers> ScribeNick: tdresser
rbyers: Anything else on the agenda?
[none]
<rbyers> touch
<rbyers> http://lists.w3.org/Archives/Public/public-touchevents/2015Jan/0017.html
rbyers: Should we use constructor names, or interface names?
jrossi: We need flexibility to
enable this with pointer events.
... If you were a browser that only supported pointer events,
would you return true on
mouseevent.FiredFrom("TouchEvent")?
rbyers: No, it's about "what code
have we triggered in our application?," not "what input device
did this come from?".
... The goal is to prevent double handling, not figuring out
the input device.
... We want this to be hard to misuse. What questions might
developers be trying to ask which would cause them to misuse
this api?
jrossi: Looks reasonable.
rbyers: What about
mouseevent.FiredFrom("MouseEvent")?
... We can just return always false.
jrossi: Always false or always true is fine with me - false makes more sense.
rbyers: FiredFrom means: would have been suppressed if that other event had been cancelled.
jrossi: Not sure it's always cancellable, for example, you may not be able to prevent a click event by cancelling a Keyboard event.
rbyers: Can the definition be up to interpretation then? This is kind of fuzzy.
jrossi: +1
... It is still the default action, it's just that sometimes
default actions aren't cancellable.
rbyers: Any other examples of where FiredFrom would return true?
jrossi: Maybe IME composition events?
mbrubeck: How about the click event? Is it FiredFrom("MouseEvent")?
rbyers: Maybe
clickEvent.firedFrom("MouseEvent") would be useful.
... When you press enter on a checkbox, do you get synthetic
mouse events?
jrossi: It probably varies.
rbyers: If we don't have a definite use case, lets say clickevent.FiredFrom("MouseEvent") is false.
mbrubeck: +1
rbyers: Is a wheel event fired from a mousewheel event?
jrossi: There's something like
three different events types for mouse wheel input.
... wheel event, mousewheel event, and some other interface for
the third one. They each have different properties.
rbyers: In blink we don't fire one as the default action of another. It's something like "If there's a wheel event handler, don't fire the legacy events"
scott_gonzalez: I just tested, that looks correct.
rbyers: So to prevent double
handling, this api could be useful here.
... So I should make these tweaks and send this out?
jrossi: We should write an
idl.
... That spec is going to change names today.
rbyers: Have you talked about
this with Travis?
... I'll bring this up with some internal google people
too.
jrossi: Spacebar presses don't appear to cause synthetic mouse events.
<jrossi> http://jsbin.com/watina/57/edit?html,js,console,output
jrossi: It could be a problem in
the same way that we had problems with hasFeature.
... Browsers will need to return different values, making it a
fragile api.
... As long as we hit the core scenarios, we should be
fine.
rbyers: +1
... Whenever we define a new api, we should try to ship a
polyfill first. Maybe we should do that here?
... Touch should be easy to polyfill, but polyfilling all the
common cases would be a lot of work.
jrossi: Don't you need to make assumptions?
rbyers: Yes, you do need to make assumptions.
jrossi: I don't think we need to make a polyfill, this is a low level primitive that will enable other polyfills.
rbyers: Right, this is a primitive, sounds good.
scott_gonzalez: In jquery, we have an autocomplete component where an element appears under the mouse cursor, which causes synthetic mouse events. Is there a way we could use this api to determine where the mouse events came from?
rbyers: This sounds more similar
to the sourceDevice problem.
... Maybe we should also be talking about that at some
point?
... This is part of the reason why we have different
co-ordinates passed with the events. You can sometimes check if
the event co-ordinates changed to solve this.
scott_gonzalez: What we do here is look at when keys are pressed in the text input, and then set a timer, and within that timer we ignore the mouse events.
<scott_gonzalez> http://dev-test.nemikor.com/behavior/mouseover-when-element-is-shown.html
scott_gonzalez: The behavior is different across browsers.
rbyers: What does PointerEvents give you for the pointer type?
jrossi: We don't have this issue. If I understand correctly, chrome has a timer that synthesizes these mouse events.
rbyers: When we don't have this behavior, we get people complaining that you don't get mouse hover when you'd expect to get mouse hover.
jrossi: You can make the opposite
argument, where you're getting mouse move events when the mouse
didn't work.
... I'm not in opposition to that behavior, we just haven't
gotten around to it.
... You aren't going to have this problem with input modalities
other than mouse, as they jiggle a lot.
rbyers: Let's come back to this at some point, when we talk about SourceDevice.
<rbyers> http://lists.w3.org/Archives/Public/public-touchevents/2015Jan/0002.html
rbyers: Main scenario I want to
solve here is to identify when a touch end event will result in
a tap.
... Lots of sites try to do this already, using some
heuristics, and there can be some subtle bugs.
... At the very least, having a bit in the touch event that
says "a tap will occur" will be valuable.
... Safari proposed a rich api that exposed the state of the
gesture recognizer through the touch events.
... There would be some property that said "Here's the events
that can happen if you don't cancel this event."
mbrubeck: This is basically exposing the browser gesture recognition state machine?
rbyers: Not the full state
machine, but exposing the key state transitions.
... I'm not sure how much value there is in gestures other than
tap.
... I can see some value in the other gestures though. It would
be tricky to detect them in JS.
jrossi: I'm not sure this will
work successfully unless we add interoperable definitions of
what these gestures mean, which isn't going to happen.
... There may be a more tractable smaller set of events we can
deal with.
mbrubeck: Click seems feasible,
pan seems trickier because there's a lot more variation in
browser implementations.
... Same thing with pinch.
jrossi: Are there click scenarios
other than the fastclick scenario? Fastclick should go away
eventually anyways, with touch action.
... Are we just solving the problem twice?
rbyers: The click and pan cases are interlinked. At least in Chrome, they're mutually exclusive.
jrossi: We've definitely seen
people looking at the delta from touch start, and try to
identify when a pan is starting.
... This happens when you're implementing your own panning, and
you want to know that a pan has started as early as
possible.
rbyers: Maybe I'm conflating two
problems here.
... We don't want sites to use heuristics to identify
taps.
... We suppress some touchmoves, because some web devs assume
that they can make decisions based on the first touchmove
sent.
... The first touchmove may not be a good predictor of what the
finger is going to do.
... Our touchmove suppression is confusing here - we'd like a
better solution that let's us give the application all the
events.
jrossi: The most common scenario
I've seen for panning is when a web dev is trying to determine
the direction of a pan.
... Touch action enables this though.
... This happens when someone wants to prevent scrolling in one
direction, but not the other.
rbyers: I've seen this scenario a
lot too.
... A bunch of people were excited that touch action would
solve this, but we had to delay shipping touch action. Touch
action with Chrome's new model of touch event dispatching
doesn't solve this problem, since the page doesn't know when
scrolling has started.
jrossi: You need something like the awfully named "ManipulationStateChanged" event.
rbyers: That's the event fired when you start scrolling?
jrossi: Yes.
rbyers: So we want to identify when an event is going to occur. When is ManipulationStateChanged dispatched?
jrossi: Today in IE it would come
directly after pointercancel and touchcancel, starting the
pan.
... In our implementation where we dispatch touch events during
scrolling, it fires at the same time, but we don't fire a
touchcancel.
... It let's you solve the carousel case with touch action and
ManipulationStateChanged.
... You ignore touch events when ManipulationStateChanged has
indicated that scroll has started.
rbyers: The cancellable bit
doesn't solve this problem. If you're at the top of the page
and you scroll upwards, those events are set as
cancelable.
... It enables customized overscroll - when you reach the top
of the document you start pulling down some header.
... We could solve this just for click - the dual of firedFrom,
something like willFire. But the most interesting case is
probably identifying when a scroll is about to happen.
jrossi: We need to nail down the exact use cases here.
rbyers: Safari's proposal was
that this would be true if the touch event will cause the
gesture to occur.
... It's the transition to when a scroll is started - it's a
notification that this is the developers last chance to cancel
the gesture.
... We might be able to accomplish this using the same api that
jrossi proposed.
... It's willFire("ScrollEvent").
... Though scrollevent is a UIEvent, which is annoying.
... After all of this discussion, should we be trying to solve
the problem of identifying touches that will result in
clicks?
... Ideally we don't try to predict a click, we just use the
click.
jrossi: Is this worth posting to specifiction, where we can get some more feedback?
rbyers: The click problem doesn't
seem compelling enough with the data we've got right now.
... Scrolling is a separate issue, and I've been conflating
them.
... I think I have enough evidence that the scrolling issue is
worth trying to solve.
... jrossi, do you think there is a solution to that problem
that you could participate in?
jrossi: Yes.
rbyers: So what about just
touchEvent.canStartScroll?
... I would like to go with a pattern we can extend than an api
that forces us to handle all the cases.
rbyers: We're out of time. How
about I send a concrete proposal to the list?
... I'll try to get agreement with some internal folks, and we
can talk about it more next week.
<scott_gonzalez> I had to drop off as I have another meeting that just started.
rbyers: Shouldn't this be a problem for the pointer event polyfill as well?
jrossi: I don't think so.
rbyers: You've got to know when to send the pointercancel.
jrossi: You can look for when a scroll occurs.
rbyers: If you're at the top of
the page and scroll up, then chromium gives you no indication
that a scroll has started.
... Scott, does this sound valuable?
... We'll talk about this next week.
... mbrubeck, some of this would previously have been hard for
us to implement, would this stuff be hard for firefox?
mbrubeck: I'll run it by the people who are involved in that code.
<rbyers> s/^Topic:.*mouse events derived from$//
<rbyers> s/^Topic:.*mouse events derived from $//
This is scribe.perl Revision: 1.140 of Date: 2014-11-06 18:16:30 Check for newer version at http://dev.w3.org/cvsweb/~checkout~/2002/scribe/ Guessing input format: RRSAgent_Text_Format (score 1.00) Succeeded: s/Fedback/Feedback/ Succeeded: s/??/scott_gonzalez/ Succeeded: s/scott_gonzalez/jrossi/ Succeeded: s/touch event/touch events/ Succeeded: s/Safaris/Safari's/ FAILED: s/^Topic:.*mouse events derived from$// FAILED: s/^Topic:.*mouse events derived from $// Succeeded: s/Topic: Fedback on updated proposal for Identifying mouse events derived from//g Found Scribe: Tim_Dresser Found ScribeNick: tdresser Default Present: rbyers, Scott_Gonzalez, jrossi, Matt_Brubeck Present: Jacob_Rossi Scott_Gonzalez Rick_Byers Tim_Dresser Regrets: Patrick_Lauke Olli_Pettay Agenda: http://lists.w3.org/Archives/Public/public-touchevents/2015Jan/0018.html Got date from IRC log name: 13 Jan 2015 Guessing minutes URL: http://www.w3.org/2015/01/13-touchevents-minutes.html People with action items: WARNING: Input appears to use implicit continuation lines. You may need the "-implicitContinuations" option.[End of scribe.perl diagnostic output]