flexxui / flexx

Write desktop and web apps in pure Python
http://flexx.readthedocs.io
BSD 2-Clause "Simplified" License
3.25k stars 257 forks source link

Ace editor grabs too many keys #534

Open edreamleo opened 5 years ago

edreamleo commented 5 years ago

The code in flexx issue #312 does not work in a flx.Widget that wraps an ace editor, as shown in the ace editor example. True, this is not really a flexx issue, but any words of wisdom would be appreciated.

Here is the present emitter for the body pane:

# **Does** fire for most plain keys and control keys.
# Does **not** fire for Ctrl-A, Ctrl-F, tab or backspace.

@flx.emitter
def key_press(self, e):
    ev = self._create_key_event(e)
    f_key = not ev['modifiers'] and ev['key'].startswith('F')
    print('BODY: key_press', repr(ev), 'preventDefault', not f_key)
    if not f_key:
        e.preventDefault()
    return ev

This is a serious problem for LeoWapp. I shall investigate what CodeMirror does.

Actually, this (over?) simplified emitter exhibits the same behavior:

@flx.emitter
def key_press(self, e):
    ev = self._create_key_event(e)
    e.preventDefault()
    return ev
Korijn commented 5 years ago

I believe you'll have to look up the specifics of the browser runtime you're using in this case.

edreamleo commented 5 years ago

@Korijn Thanks for your helpful comment. As a newbie, I was unaware of browser differences.

almarklein commented 5 years ago

I suspect that the editors will also consume (i.e. call e.preventDefault()) certain events. Tab is a good example. The editor need to consume that event, or the browser will see the tab key and change focus to the next tabbable element.