From 08ada6844af424e8ff28e592fc6b9dbc1a9a97eb Mon Sep 17 00:00:00 2001
From: toasted-nutbread <toasted-nutbread@users.noreply.github.com>
Date: Sat, 2 May 2020 12:47:15 -0400
Subject: Remove Frontend inheritance (#486)

* Make Frontend use composition instead of inheritance for TextScanner

* Use push instead of concat

* Update setOptions and setEnabled APIs

* Update how onWindowMessage event listener is added/removed

* Rename options to _options

* Use bind instead of arrow function

* Fix selection being cleared due to settings changes
---
 ext/mixed/js/text-scanner.js | 22 ++++++++++++++++------
 1 file changed, 16 insertions(+), 6 deletions(-)

(limited to 'ext/mixed/js')

diff --git a/ext/mixed/js/text-scanner.js b/ext/mixed/js/text-scanner.js
index c582ccd8..774eef44 100644
--- a/ext/mixed/js/text-scanner.js
+++ b/ext/mixed/js/text-scanner.js
@@ -45,6 +45,16 @@ class TextScanner extends EventDispatcher {
         this.preventNextMouseDown = false;
         this.preventNextClick = false;
         this.preventScroll = false;
+
+        this._canClearSelection = true;
+    }
+
+    get canClearSelection() {
+        return this._canClearSelection;
+    }
+
+    set canClearSelection(value) {
+        this._canClearSelection = value;
     }
 
     onMouseOver(e) {
@@ -222,9 +232,9 @@ class TextScanner extends EventDispatcher {
         }
     }
 
-    setEnabled(enabled, canEnable) {
+    setEnabled(enabled) {
         this.eventListeners.removeAllEventListeners();
-        this.enabled = enabled && canEnable;
+        this.enabled = enabled;
         if (this.enabled) {
             this.hookEvents();
         } else {
@@ -233,9 +243,9 @@ class TextScanner extends EventDispatcher {
     }
 
     hookEvents() {
-        let eventListenerInfos = this.getMouseEventListeners();
+        const eventListenerInfos = this.getMouseEventListeners();
         if (this.options.scanning.touchInputEnabled) {
-            eventListenerInfos = eventListenerInfos.concat(this.getTouchEventListeners());
+            eventListenerInfos.push(...this.getTouchEventListeners());
         }
 
         for (const [node, type, listener, options] of eventListenerInfos) {
@@ -264,9 +274,8 @@ class TextScanner extends EventDispatcher {
         ];
     }
 
-    setOptions(options, canEnable=true) {
+    setOptions(options) {
         this.options = options;
-        this.setEnabled(this.options.general.enable, canEnable);
     }
 
     async searchAt(x, y, cause) {
@@ -324,6 +333,7 @@ class TextScanner extends EventDispatcher {
     }
 
     clearSelection(passive) {
+        if (!this._canClearSelection) { return; }
         if (this.textSourceCurrent !== null) {
             if (this.textSourceCurrentSelected) {
                 this.textSourceCurrent.deselect();
-- 
cgit v1.2.3