hterm: fix alt key tracking

We track the status of the alt key to so we can undo some keyboard
shortcuts (like "alt-backspace-is-meta-backspace" for Chrome OS).
In order to track alt+tab (which normally changes windows), we use
the blur event.  This ends up not working because:
- the blur event does not bubble
- we set the listener on the body element
- the x-screen element is the one that has focus

Thus when we switch away, the blur event fires for x-screen only
and we never see it.  This manifests as the alt key being "stuck":
- enable alt-backspace-is-meta-backspace
- type some text in a bash shell prompt
- alt+tab to a different window
- alt+tab back to Secure Shell
- try pressing the delete key and see it act as alt+backspace

Instead, let's use the focusout event to track the focus state.
This event bubbles, so the body element is properly notified.

BUG=chromium:704468

Change-Id: I7990c6e8e7c7a70e052deaf41f72ebb05c46c692
Reviewed-on: https://chromium-review.googlesource.com/475471
Reviewed-by: Brandon Gilmore <varz@google.com>
Reviewed-by: Rob Ginda <rginda@chromium.org>
Tested-by: Mike Frysinger <vapier@chromium.org>
1 file changed
tree: 63f52842aefeedb10a974d2c5326ccd29c437f9d
  1. hterm/
  2. libdot/
  3. nassh/
  4. saltpig/
  5. ssh_client/
  6. wam/
  7. wash/
  8. .gitignore
  9. HACK.md
  10. LICENSE
  11. package.json
  12. README.md
README.md

Hello

This repository contains the libdot JavaScript library and some web applications that make use of it.

The official copy of this repository is hosted at https://chromium.googlesource.com/apps/libapps.

There is also a mirror on github at https://github.com/libapps/libapps-mirror. Keep in mind that this mirror may occasionally be behind the official repository.

All changes must go through the Gerrit code review server on http://chromium-review.googlesource.com. Github pull requests cannot be accepted. Please see the HACK.md document in this directory for the details.

Top level directories

  • libdot/ is a small set of JS libraries initially developed as part of hterm, now available as shared code. It provides a base layer for web applications. The code is intended to work in any modern browser, in either a plain web page or a “privileged” environment such as a Chrome platform application or Firefox extension. In practice, it's only been put to use in Chrome platform applications so far.

  • hterm/ is a JS library that provides a terminal emulator. It is reasonably fast, reasonably correct, and reasonably portable across browsers.

  • nassh/ is the Secure Shell Chrome App (currently a “v1.5” app, soon to become a “v2” or platform app) that combines hterm with a NaCl build of OpenSSH to provide a PuTTY-like app for Chrome users.

  • ssh_client/ is the NaCl port of OpenSSH. It is used by nassh to create the Secure Shell App.

  • wash/ is a library for cross-origin virtual filesystems, similar to the Plan 9 filesystem. This directory also contains a simple bash-like shell environment for exploring these filesystems. The code in this directory is a work-in-progress.