Remove event listeners when scanning is disabled

This commit is contained in:
toasted-nutbread 2019-10-03 20:22:12 -04:00
parent bac237336e
commit c967b7a9f1

View File

@ -38,6 +38,9 @@ class Frontend {
this.mouseDownPrevent = false; this.mouseDownPrevent = false;
this.clickPrevent = false; this.clickPrevent = false;
this.scrollPrevent = false; this.scrollPrevent = false;
this.enabled = false;
this.eventListeners = [];
} }
static create() { static create() {
@ -53,23 +56,7 @@ class Frontend {
async prepare() { async prepare() {
try { try {
this.options = await apiOptionsGet(this.getOptionsContext()); await this.updateOptions();
window.addEventListener('message', this.onWindowMessage.bind(this));
window.addEventListener('mousedown', this.onMouseDown.bind(this));
window.addEventListener('mousemove', this.onMouseMove.bind(this));
window.addEventListener('mouseover', this.onMouseOver.bind(this));
window.addEventListener('mouseout', this.onMouseOut.bind(this));
window.addEventListener('resize', this.onResize.bind(this));
if (this.options.scanning.touchInputEnabled) {
window.addEventListener('click', this.onClick.bind(this));
window.addEventListener('touchstart', this.onTouchStart.bind(this));
window.addEventListener('touchend', this.onTouchEnd.bind(this));
window.addEventListener('touchcancel', this.onTouchCancel.bind(this));
window.addEventListener('touchmove', this.onTouchMove.bind(this), {passive: false});
window.addEventListener('contextmenu', this.onContextMenu.bind(this));
}
chrome.runtime.onMessage.addListener(this.onRuntimeMessage.bind(this)); chrome.runtime.onMessage.addListener(this.onRuntimeMessage.bind(this));
} catch (e) { } catch (e) {
@ -88,7 +75,6 @@ class Frontend {
if ( if (
this.pendingLookup || this.pendingLookup ||
!this.options.general.enable ||
(e.buttons & 0x1) !== 0x0 // Left mouse button (e.buttons & 0x1) !== 0x0 // Left mouse button
) { ) {
return; return;
@ -245,13 +231,56 @@ class Frontend {
console.log(error); console.log(error);
} }
async updateOptions() { setEnabled(enabled) {
this.options = await apiOptionsGet(this.getOptionsContext()); if (enabled) {
if (!this.options.enable) { if (!this.enabled) {
this.hookEvents();
this.enabled = true;
}
} else {
if (this.enabled) {
this.clearEventListeners();
this.enabled = false;
}
this.searchClear(false); this.searchClear(false);
} }
} }
hookEvents() {
this.addEventListener(window, 'message', this.onWindowMessage.bind(this));
this.addEventListener(window, 'mousedown', this.onMouseDown.bind(this));
this.addEventListener(window, 'mousemove', this.onMouseMove.bind(this));
this.addEventListener(window, 'mouseover', this.onMouseOver.bind(this));
this.addEventListener(window, 'mouseout', this.onMouseOut.bind(this));
this.addEventListener(window, 'resize', this.onResize.bind(this));
if (this.options.scanning.touchInputEnabled) {
this.addEventListener(window, 'click', this.onClick.bind(this));
this.addEventListener(window, 'touchstart', this.onTouchStart.bind(this));
this.addEventListener(window, 'touchend', this.onTouchEnd.bind(this));
this.addEventListener(window, 'touchcancel', this.onTouchCancel.bind(this));
this.addEventListener(window, 'touchmove', this.onTouchMove.bind(this), {passive: false});
this.addEventListener(window, 'contextmenu', this.onContextMenu.bind(this));
}
}
addEventListener(node, type, listener, options) {
node.addEventListener(type, listener, options);
this.eventListeners.push([node, type, listener, options]);
}
clearEventListeners() {
for (const [node, type, listener, options] of this.eventListeners) {
node.removeEventListener(type, listener, options);
}
this.eventListeners = [];
}
async updateOptions() {
this.options = await apiOptionsGet(this.getOptionsContext());
this.setEnabled(this.options.general.enable);
}
popupTimerSet(callback) { popupTimerSet(callback) {
const delay = this.options.scanning.delay; const delay = this.options.scanning.delay;
if (delay > 0) { if (delay > 0) {
@ -452,7 +481,7 @@ class Frontend {
searchFromTouch(x, y, cause) { searchFromTouch(x, y, cause) {
this.popupTimerClear(); this.popupTimerClear();
if (!this.options.general.enable || this.pendingLookup) { if (this.pendingLookup) {
return; return;
} }