Hi,

re "Type ctrl-a on hebrew keyboard": On OS X, ctrl-a usually does not
select all text (that's what cmd-a does) but goes to the beginning of
the current line, as in emacs. But that can be overridden (
http://www.hcs.harvard.edu/~jrus/site/cocoa-text.html ).

Nico

2009/6/5 Hironori Bono (坊野 博典) <hb...@chromium.org>:
> Hi Jeremy, et al,
>
> Sorry for my slow update.
> This is the draft report of my investigation that implements the
> NSTextInput protocol on Mac, implements the GtkIMContext on Linux and
> observes keyboard events on Windows, Mac, and Linux. (Sorry, I would
> like to send it as a PDF file because the google site somehow
> compresses its figures too much to make its characters unreadable.)
> Since I'm still finding the best solutions for the issues, any
> comments and suggestions are definitely welcome.
>
> Regards,
>
> Hironori Bono
> E-mail: hb...@chromium.org
>
> 2009/5/29 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