The intent was for WebKeyboardEvent to mirror PlatformKeyboardEvent such
that conversion between the two was a simple as copying fields directly.
 Generation of WebKeyboardEvent would then be done in a platform-specific
manner.
So, ideally event_conversion.cc would end up with zero #ifdefs.

Any problems with this approach?

-Darin

On Wed, Nov 12, 2008 at 2:59 PM, Evan Martin <[EMAIL PROTECTED]> wrote:

>
> I spent some time studying the keyboard code and talking with various
> people and here's how I think it should work.  This discussion also
> likely generalizes to other events.
>
> Some background:  keyboard events on different platforms work
> (surprise!) differently:
>  - On Windows you get some events when a key goes down, a series of
> events while the key is held, and another when the key is released.
>  - On GTK you just have key-pressed and key-released.
>  - Mac is surely some third thing.
>
> The stack of data structures and handling works like this:
> 1) At the bottom of the event food chain is the API expected by
> websites: for better or for worse, which events happen and what key
> codes are used are often based on Windows.  WebKit internally handles
> forwarding events to the proper JavaScript, etc. handlers.
> 2) WebKit internally uses a PlatformKeyboardEvent structure to
> represent the data necessary for keyboard events.  The WebKit ports
> include code to convert their respective platforms' events into the
> PlatformKeyboardEvent structure.
> 3) However, for Chromium we have the IPC system and sandbox: renderers
> don't have access to the platform-native event information.  Instead,
> our glue library has a generic WebKeyboardEvent structure that
> represents a platform-generic keyboard event (matching
> PlatformKeyboardEvent), and we have code that knows how to serialize
> those over the IPC layer as well as convert them into
> PlatformKeyboardEvents.  The latter conversion code lives in
> webkit/glue/event_conversion.*, and (here's the reason I'm writing
> this email) *should be platform-inspecific*.  That is, all of the
> #ifdefs in there for Mac and Linux are in the wrong place.
> 4) Instead, WebKeyboardEvent knows how to convert platform-specific
> events into a plain WebKeyboardEvent.  That code lives in
> webkit/glue/webinput_event*, and we already have platform-specific
> files for those.
>
> There's one additional twist particular to the way keys work: on some
> platforms (Windows) you get separate key down/up events and "character
> entered" events, while on others (GTK and I believe Mac) some of those
> are smooshed together.  Internally in WebKit there's code to split a
> keyboard event into the two Windows types -- grep the WebKit code for
> "disambiguateKeyDownEvent".  Then in
> WebCore/page/EventHandler.cpp:EventHandler::keyEvent it actually will
> split a single key press event into a series of key-down and
> character-entered events.
>
> In summary, our Mac and Linux code are definitely wrong, and I haven't
> yet studied the Windows code enough to verify it's correct either.  :)
>
> >
>

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"Chromium-dev" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/chromium-dev?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to