]> git.gir.st - VimFx.git/blob - packages/events.coffee
Added extension icon, and renamed the toolbar button icons to icon16*.png
[VimFx.git] / packages / events.coffee
1 utils = require 'utils'
2 { getCommand } = require 'commands'
3 { Vim } = require 'vim'
4 { getPref } = require 'prefs'
5
6 { interfaces: Ci } = Components
7
8 vimBucket = new utils.Bucket utils.getWindowId, (obj) -> new Vim obj
9
10 suppressEvent = (event) ->
11 event.preventDefault()
12 event.stopPropagation()
13
14 # The following handlers are installed on every top level DOM window
15 handlers =
16 'keydown': (event) ->
17 if getPref 'disabled'
18 return
19
20 try
21 isEditable = utils.isElementEditable event.originalTarget
22 keyStr = utils.keyboardEventKeyString event
23
24 # We only handle the key if there is no focused editable element
25 # or if it's the *Esc* key, which will remote the focus from
26 # the currently focused element
27 if keyStr and (keyStr == 'Esc' or not isEditable)
28 if window = utils.getCurrentTabWindow event
29 if vimBucket.get(window)?.pushKey keyStr
30 suppressEvent event
31 catch err
32 console.log err
33
34 'keypress': (event) ->
35 if getPref 'disabled'
36 return
37
38 try
39 # Try to execute keys that were accumulated so far.
40 # Suppress event if there is a matching command.
41 if window = utils.getCurrentTabWindow event
42 if vimBucket.get(window)?.execKeys()
43 suppressEvent event
44 catch err
45 console.log err
46
47 'TabClose': (event) ->
48 if gBrowser = utils.getEventTabBrowser event
49 if browser = gBrowser.getBrowserForTab event.originalTarget
50 vimBucket.forget browser.contentWindow.wrappedJSObject
51
52 # When the top level window closes we should release all Vims that were
53 # associated with tabs in this window
54 'DOMWindowClose': (event) ->
55 if gBrowser = event.originalTarget.gBrowser
56 for tab in gBrowser.tabs
57 if browser = gBrowser.getBrowserForTab tab
58 vimBucket.forget browser.contentWindow.wrappedJSObject
59
60 addEventListeners = (window) ->
61 for name, handler of handlers
62 window.addEventListener name, handler, true
63
64 removeEventListeners = ->
65 for name, handler of handlers
66 window.removeEventListener name, handler, true
67
68 unload -> removeEventListeners window
69
70 exports.addEventListeners = addEventListeners
Imprint / Impressum