aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKuuuube <61125188+Kuuuube@users.noreply.github.com>2024-05-28 15:32:56 -0400
committerGitHub <noreply@github.com>2024-05-28 19:32:56 +0000
commit3bfd56bbe46a4f2ee9c66f0c7baeec3c6292718c (patch)
tree668f8ce77c043308ad4d6c57911931ef03565bf1
parentb414e3f1fa351c0754b1fc9e0ee33bef7e1962d3 (diff)
Fix clipboard monitor in popups (#1003)
* Fix naming of _clipboardReaderLike * Allow clipboard monitors in popup searches * Only run _onClipboardTextChange if a search tab does not exist
-rw-r--r--ext/js/background/backend.js13
-rw-r--r--ext/js/display/search-display-controller.js7
2 files changed, 16 insertions, 4 deletions
diff --git a/ext/js/background/backend.js b/ext/js/background/backend.js
index da720315..41989db3 100644
--- a/ext/js/background/backend.js
+++ b/ext/js/background/backend.js
@@ -314,6 +314,9 @@ export class Backend {
* @param {import('clipboard-monitor').EventArgument<'change'>} details
*/
async _onClipboardTextChange({text}) {
+ // Only update if tab does not exist
+ if (await this._tabExists('/search.html')) { return; }
+
const {
general: {language},
clipboard: {maximumSearchLength}
@@ -1200,6 +1203,16 @@ export class Backend {
}
/**
+ * @param {string} urlParam
+ * @returns {Promise<boolean>}
+ */
+ async _tabExists(urlParam) {
+ const baseUrl = chrome.runtime.getURL(urlParam);
+ const urlPredicate = (/** @type {?string} */ url) => url !== null && url.startsWith(baseUrl);
+ return await this._findSearchPopupTab(urlPredicate) !== null;
+ }
+
+ /**
* @param {string} url
* @param {import('settings').ProfileOptions} options
* @returns {chrome.windows.CreateData}
diff --git a/ext/js/display/search-display-controller.js b/ext/js/display/search-display-controller.js
index 815c51c9..62dbf343 100644
--- a/ext/js/display/search-display-controller.js
+++ b/ext/js/display/search-display-controller.js
@@ -66,11 +66,11 @@ export class SearchDisplayController {
/** @type {boolean} */
this._clipboardMonitorEnabled = false;
/** @type {import('clipboard-monitor').ClipboardReaderLike} */
- this.clipboardReaderLike = {
+ this._clipboardReaderLike = {
getText: this._display.application.api.clipboardGet.bind(this._display.application.api)
};
/** @type {ClipboardMonitor} */
- this._clipboardMonitor = new ClipboardMonitor(this.clipboardReaderLike);
+ this._clipboardMonitor = new ClipboardMonitor(this._clipboardReaderLike);
/** @type {import('application').ApiMap} */
this._apiMap = createApiMap([
['searchDisplayControllerGetMode', this._onMessageGetMode.bind(this)],
@@ -271,7 +271,7 @@ export class SearchDisplayController {
/** */
async _onCopy() {
// Ignore copy from search page
- this._clipboardMonitor.setPreviousText(document.hasFocus() ? await this.clipboardReaderLike.getText(false) : '');
+ this._clipboardMonitor.setPreviousText(document.hasFocus() ? await this._clipboardReaderLike.getText(false) : '');
}
/** @type {import('application').ApiHandler<'searchDisplayControllerUpdateSearchQuery'>} */
@@ -498,7 +498,6 @@ export class SearchDisplayController {
*/
_canEnableClipboardMonitor() {
switch (this._searchPersistentStateController.mode) {
- case 'popup':
case 'action-popup':
return false;
default: