Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
33 changes: 20 additions & 13 deletions src/application.js
Original file line number Diff line number Diff line change
Expand Up @@ -43,18 +43,23 @@ const Application = (config) => {
let lastInputTime = 0
let lastInputKey = null
let mouseListenersAdded = false
const eventTarget = Settings.get('eventTarget', document)
const _window = (typeof window === 'object') ? window : undefined


config.hooks[symbols.destroy] = function () {
// Cancel pending key-hold timeout and reset hold state so focus is not left in hold mode after teardown
clearTimeout(holdTimeout)
Focus.hold = false
document.removeEventListener('keydown', keyDownHandler)
document.removeEventListener('keyup', keyUpHandler)
eventTarget.removeEventListener('keydown', keyDownHandler)
eventTarget.removeEventListener('keyup', keyUpHandler)
if (mouseListenersAdded) {
document.removeEventListener('mousemove', mouseMoveHandler)
document.removeEventListener('click', mouseClickHandler)
window.removeEventListener('resize', updateCanvasRect)
window.removeEventListener('scroll', updateCanvasRect)
eventTarget.removeEventListener('mousemove', mouseMoveHandler)
eventTarget.removeEventListener('click', mouseClickHandler)
if (_window) {
_window.removeEventListener('resize', updateCanvasRect)
_window.removeEventListener('scroll', updateCanvasRect)
}
Hover.clear()
}
}
Expand Down Expand Up @@ -195,15 +200,17 @@ const Application = (config) => {
currentComponent.$input(e)
}

document.addEventListener('keydown', keyDownHandler)
document.addEventListener('keyup', keyUpHandler)
eventTarget.addEventListener('keydown', keyDownHandler)
eventTarget.addEventListener('keyup', keyUpHandler)
if (mouseEnabled === true) {
updateCanvasRect()
document.addEventListener('mousemove', mouseMoveHandler)
document.addEventListener('click', mouseClickHandler)
window.addEventListener('resize', updateCanvasRect)
window.addEventListener('scroll', updateCanvasRect)
mouseListenersAdded = true
eventTarget.addEventListener('mousemove', mouseMoveHandler)
eventTarget.addEventListener('click', mouseClickHandler)
if (_window) {
_window.addEventListener('resize', updateCanvasRect)
_window.addEventListener('scroll', updateCanvasRect)
mouseListenersAdded = true
}
}

// next tick
Expand Down
4 changes: 3 additions & 1 deletion src/focus/focus.js
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,8 @@ let focusedComponent = null
let focusChain = []
let setFocusTimeout

const _eventTarget = Settings.get('eventTarget', document)

export const keyUpCallbacks = new Map()

export default {
Expand Down Expand Up @@ -135,6 +137,6 @@ const setFocus = (component, event) => {

if (event instanceof KeyboardEvent) {
const internalEvent = new InternalKeyboardEvent('keydown', event)
document.dispatchEvent(internalEvent)
_eventTarget.dispatchEvent(internalEvent)
}
}
1 change: 1 addition & 0 deletions src/launch.js
Original file line number Diff line number Diff line change
Expand Up @@ -90,6 +90,7 @@ async function rendererVersion() {
* @property {boolean} [announcer] - Whether or not the announcer should be activated on initialization
* @property {boolean} [enableMouse] - Enable mouse support (hover and click-to-focus). Defaults to false.
* @property {number} [maxFPS] - Maximum FPS
* @property {EventTarget} [eventTarget] - Event target to listen on and dipatch events to
*/

/**
Expand Down