(Wondering if I should take the lack of response here as a resounding vote
of confidence regarding the flawless design proposal?)

Thanks for the reply Hironori,
Since this proposal contains facilities for pingponging event
handling between the browser and renderer even if it doesn't solve the
IME issues directly it should provide common infrastructure to build
on.

I look forward to seeing your writeup, but I think these are orthogonal
issues.  Please correct me if I'm wrong [which is a definite possibility].

Best regards,
Jeremy


2009/5/28 Hironori Bono (坊野 博典) <hb...@chromium.org>

> Hi Jeremy,
>
> I have been investigating keyboard events on Windows, Linux, and Mac
> to find solutions for these issues. Shall we have a discussion about
> these issues when I finish writing my report (maybe sometime next
> week)?
>
> Regards,
>
> Hironori Bono
> E-mail: hb...@chromium.org
>
> On Thu, May 28, 2009 at 7:14 AM, Jeremy Moskovich <jer...@chromium.org>
> wrote:
> > Hi All,
> > We currently fudge our keyboard handling on OSX, we interpret command key
> > shortcuts ourselves and thus miss out on quite a few Cocoa text handling
> > niceities.  We also don't support IMEs.
> > Relevant bugs:
> > http://crbug.com/10862 - OS X: Can't use command-key shortcuts with
> foreign
> > keyboard layouts
> > http://crbug.com/12698 - standard macintosh text editing keyboard
> shortcuts
> > are missing
> > http://crbug.com/11981 - Deadkeys do not work
> > http://crbug.com/11952 - IME support (Chinese input method doesnt work)
> > We also don't handle activation/deactivation of edit menu items correctly
> > (select all is always disabled).
> > I've done a little digging in WebKit's keyboard handling and what follows
> is
> > a proposal on how we can more closely match the OSX keyboard handling
> code
> > and [hopefully] do things the right way.  I don't purport to understand
> this
> > all and there may be simpler ways to achieve this so feel free to
> comment.
> > Standard commands (Copy/Paste/Select-all):
> > WebKit handles these through the regular obj-c selectors in WebHTMLView,
> see
> > the WEBCORE_COMMAND macro.
> > We could do the same thing and add these selectors
> > to BrowserWindowController which would then send an IPC message over to
> the
> > renderer process to execute the appropriate command.
> > The tricky bit is updating the menus, the model in Cocoa is for the OS to
> > call you for each menu item before displaying a menu.  We can't block the
> > browser process on the renderer process so the browser process would
> always
> > need to know if there is an active selection.  WebCore appears to already
> > have a mechanism to do this via notifyAccessibilityForSelectionChange() -
> we
> > could use the same or a similar mechanism to send an IPC message back to
> the
> > browser process each time the selection changes.
> > Emacs keyboard commands and IMEs:
> > The IME part of the title may be nonsense, but looking at the code it
> > appears the code path and issues are the same.
> > I've attached the stack trace for hitting cntrl-t to the end of this
> email.
> >  The tricky bit here is that WebCore is first given a shot at handling
> the
> > event and then passes it back to WebHTMLView to take another look at the
> > event which is where it's actually parsed.  I assume this is to give JS
> code
> > a chance to listen on these events.
> > Since we can't serialize an NSEvent, we can't replicate this code solely
> in
> > the renderer.
> > A possible solution to this would be to store a queue of the last N
> NSEvents
> > per renderer matched with an ID.  the event would then be serialized and
> > sent to the renderer which could then send it's own IPC message back to
> the
> > browser process to get Cocoa to handle the message, we could pick the
> > NSEvent out of the queue by ID and send back the relevant edit command to
> > the renderer.
> > Since the events belong to a specific renderer a malicious renderer
> process
> > can't access events not targeted at them.
> > Best regards,
> > Jeremy
> > Stack trace of hitting cntrl-t (transpose) in a text view, Cocoa
> > [browser-process] stuff marked in bold.
> > #0 WebCore::executeTranspose (frame=0x70b9800) at
> >
> /Users/Shared/playmobil/work/git.WebKit/WebCore/editing/EditorCommand.cpp:961
> > #1 0x03702f0f in WebCore::Editor::Command::execute (this=0xbfffe2f4,
> > paramet...@0xbfffe2ac, triggeringEvent=0x24178380) at
> >
> /Users/Shared/playmobil/work/git.WebKit/WebCore/editing/EditorCommand.cpp:1450
> > #2 0x037052ad in WebCore::Editor::Command::execute (this=0xbfffe2f4,
> > triggeringEvent=0x24178380) at
> >
> /Users/Shared/playmobil/work/git.WebKit/WebCore/editing/EditorCommand.cpp:1455
> > #3 0x0031d3da in -[WebHTMLView(WebNSTextInputSupport)
> doCommandBySelector:]
> > (self=0x6cefe90, _cmd=0x943edca4, selector=0x94423fa4) at
> >
> /Users/Shared/playmobil/work/git.WebKit/WebKit/mac/WebView/WebHTMLView.mm:5337
> > #4 0x0031c238 in -[WebHTMLView(WebInternal)
> > _interceptEditingKeyEvent:shouldSaveCommand:] (self=0x6cefe90,
> > _cmd=0x3a405c, event=0x24178380, shouldSave=0 '\000') at
> >
> /Users/Shared/playmobil/work/git.WebKit/WebKit/mac/WebView/WebHTMLView.mm:4966
> > #5 0x002eb19b in WebEditorClient::handleKeyboardEvent (this=0x6c31aa0,
> > event=0x24178380) at
> >
> /Users/Shared/playmobil/work/git.WebKit/WebKit/mac/WebCoreSupport/WebEditorClient.mm:440
> > #6 0x036f8875 in WebCore::Editor::handleKeyboardEvent (this=0x70b9cd4,
> > event=0x24178380) at
> > /Users/Shared/playmobil/work/git.WebKit/WebCore/editing/Editor.cpp:105
> > #7 0x037156fb in WebCore::EventHandler::defaultKeyboardEventHandler
> > (this=0x70b9d00, event=0x24178380) at
> >
> /Users/Shared/playmobil/work/git.WebKit/WebCore/page/EventHandler.cpp:1907
> > #8 0x03a7876e in WebCore::Node::defaultEventHandler (this=0x1c23f430,
> > event=0x24178380) at
> > /Users/Shared/playmobil/work/git.WebKit/WebCore/dom/Node.cpp:2812
> > #9 0x037c7d17 in WebCore::HTMLInputElement::defaultEventHandler
> > (this=0x1c23f430, evt=0x24178380) at
> >
> /Users/Shared/playmobil/work/git.WebKit/WebCore/html/HTMLInputElement.cpp:1120
> > #10 0x03a70c27 in WebCore::Node::dispatchGenericEvent (this=0x1c23f430,
> > prpeve...@0xbfffe63c) at
> > /Users/Shared/playmobil/work/git.WebKit/WebCore/dom/Node.cpp:2439
> > #11 0x03a70f0f in WebCore::Node::dispatchEvent (this=0x1c23f430,
> > e...@0xbfffe6e8, e...@0xbfffe6cc) at
> > /Users/Shared/playmobil/work/git.WebKit/WebCore/dom/Node.cpp:2336
> > #12 0x03718720 in WebCore::EventHandler::keyEvent (this=0x70b9d00,
> > initialkeyeve...@0xbfffe74c) at
> >
> /Users/Shared/playmobil/work/git.WebKit/WebCore/page/EventHandler.cpp:1848
> > #13 0x0371da3b in WebCore::EventHandler::keyEvent (this=0x70b9d00,
> > event=0x2416ded0) at
> >
> /Users/Shared/playmobil/work/git.WebKit/WebCore/page/mac/EventHandlerMac.mm:172
> > #14 0x003138ce in -[WebHTMLView performKeyEquivalent:] (self=0x6cefe90,
> > _cmd=0x94421a60, event=0x2416ded0) at
> >
> /Users/Shared/playmobil/work/git.WebKit/WebKit/mac/WebView/WebHTMLView.mm:4013
> > #15 0x959398b6 in -[NSControl _performKeyEquivalent:conditionally:] ()
> > #16 0x95939782 in -[NSView performKeyEquivalent:] ()
> > #17 0x95939782 in -[NSView performKeyEquivalent:] ()
> > #18 0x95939782 in -[NSView performKeyEquivalent:] ()
> > #19 0x95939782 in -[NSView performKeyEquivalent:] ()
> > #20 0x95939782 in -[NSView performKeyEquivalent:] ()
> > #21 0x95939782 in -[NSView performKeyEquivalent:] ()
> > #22 0x95939782 in -[NSView performKeyEquivalent:] ()
> > #23 0x95939782 in -[NSView performKeyEquivalent:] ()
> > #24 0x959394eb in -[NSWindow performKeyEquivalent:] ()
> > #25 0x0004dbc1 in ?? ()
> > #26 0x959391af in -[NSApplication _handleKeyEquivalent:] ()
> > #27 0x958560fb in -[NSApplication sendEvent:] ()
> > #28 0x0003918a in ?? ()
> > #29 0x957b362f in -[NSApplication run] ()
> > #30 0x95780834 in NSApplicationMain ()
> > #31 0x00003296 in ?? ()
>

--~--~---------~--~----~------------~-------~--~----~
Chromium Developers mailing list: chromium-dev@googlegroups.com 
View archives, change email options, or unsubscribe: 
    http://groups.google.com/group/chromium-dev
-~----------~----~----~----~------~----~------~--~---

Reply via email to