On 2/8/2011 7:18 PM, Glenn Maynard wrote:
On Tue, Feb 8, 2011 at 8:54 PM, Kenneth Russell <k...@google.com
<mailto:k...@google.com>> wrote:
> How would you satisfy that use-case without enabling abusive
behavior by Web
> sites?
Per the proposal posted earlier and at
http://www.w3.org/Bugs/Public/show_bug.cgi?id=9557 :
1. Only enable mouse capture in response to a user gesture (clicking
on the element).
This proposal seems to say that mouse capture is enabled by adding an
event handler to an element. I don't like this:
- It's a major break from the normal event model. Merely defining an
event shouldn't cause side-effects.
window.open is another item that only fires during an event handle. I'm
sure full screen is on that grounds.
Drag+drop does that. [input type=file] is another.
User initiated events are part of the security model; and the current
issues with mouse capture are about security.
- It permanently bakes the requirement that mouse capture can only
happen in response to a click into the API. There are legitimate
cases to capture the mouse without first requiring a click. Browsers
may not want to allow this, but if they can do so without causing
abuse then it should be possible to do so.
Agreed, but I think it should still be tied to a user event.
For an API, I'd suggest simply adding "element.captureMouse()" and
"element.releaseMouse()", with events when the mouse is actually
captured and released. Browsers can still choose to ignore
captureMouse if not called in response to a click, and the spec can
require that at the start if that's really wanted, but that behavior
isn't baked permanently into the API and could be relaxed later on.
The way the current APIs are implemented, that makes sense. I think
we're looking at extending it to more use cases.
Note that "mouse capture" may be the wrong name for this. Mouse
capture usually refers to capturing mouse movement even when the mouse
leaves the window, usually to implement dragging--this is what IE's
"mouse capture" API is for. This is different--the mouse cursor is
typically hidden and locked in place, so mouse motion never hits the
boundaries of the screen and clicks never go to another window. It
might be better to call this something else to avoid confusion with
regular mouse capture; I'd suggest "mouse grabbing".
I for-the-first-time, hit this issue when looking at how screen
magnifiers work.
The CSS 2D Transform (scale) allows really easy addition of basic screen
magnification; but doing more complex things,
like grabbing the mouse, is not easy.
I hope the use case helps.
-Charles