diff --git a/src-main/windows/addons.js b/src-main/windows/addons.js index a7a9fbf8..9b287c43 100644 --- a/src-main/windows/addons.js +++ b/src-main/windows/addons.js @@ -7,7 +7,10 @@ const prompts = require('../prompts'); const {writeFileAtomic} = require('../atomic-write-stream'); class AddonsWindow extends BaseWindow { - constructor () { + /** + * @param {string|null} search + */ + constructor (search) { super(); this.window.on('page-title-updated', event => { @@ -41,7 +44,7 @@ class AddonsWindow extends BaseWindow { await writeFileAtomic(result.filePath, settings); }); - this.loadURL(`tw-editor://./addons/addons.html`); + this.loadURL(`tw-editor://./addons/addons.html${search ? `#${search}` : ''}`); } getDimensions () { @@ -63,8 +66,18 @@ class AddonsWindow extends BaseWindow { return '#111111'; } - static show () { - const window = BaseWindow.singleton(AddonsWindow); + static show (search) { + // If we were asked to show a specific search query, always open a new window + // Even if the search was the same as an existing window, we don't have a way to + // know if the user changed the search. + let window; + if (search) { + const windows = BaseWindow.getWindowsByClass(AddonsWindow); + windows.forEach(i => i.window.destroy()); + window = new AddonsWindow(search); + } else { + window = BaseWindow.singleton(AddonsWindow); + } window.show(); } } diff --git a/src-main/windows/editor.js b/src-main/windows/editor.js index f91d8176..0f12afde 100644 --- a/src-main/windows/editor.js +++ b/src-main/windows/editor.js @@ -368,8 +368,8 @@ class EditorWindow extends ProjectRunningWindow { EditorWindow.newWindow(); }); - ipc.handle('open-addon-settings', () => { - AddonsWindow.show(); + ipc.handle('open-addon-settings', (event, search) => { + AddonsWindow.show(search); }); ipc.handle('open-desktop-settings', () => { diff --git a/src-preload/editor.js b/src-preload/editor.js index f196f81f..94d80229 100644 --- a/src-preload/editor.js +++ b/src-preload/editor.js @@ -10,7 +10,7 @@ contextBridge.exposeInMainWorld('EditorPreload', { setLocale: (locale) => ipcRenderer.sendSync('set-locale', locale), setChanged: (changed) => ipcRenderer.invoke('set-changed', changed), openNewWindow: () => ipcRenderer.invoke('open-new-window'), - openAddonSettings: () => ipcRenderer.invoke('open-addon-settings'), + openAddonSettings: (search) => ipcRenderer.invoke('open-addon-settings', search), openPackager: () => ipcRenderer.invoke('open-packager'), openDesktopSettings: () => ipcRenderer.invoke('open-desktop-settings'), openPrivacy: () => ipcRenderer.invoke('open-privacy'), diff --git a/src-renderer-webpack/editor/gui/desktop-hoc.jsx b/src-renderer-webpack/editor/gui/desktop-hoc.jsx index 01bf733e..87ffc69a 100644 --- a/src-renderer-webpack/editor/gui/desktop-hoc.jsx +++ b/src-renderer-webpack/editor/gui/desktop-hoc.jsx @@ -26,8 +26,8 @@ const getDefaultProjectTitle = (filename) => { return match[1]; }; -const handleClickAddonSettings = () => { - EditorPreload.openAddonSettings(); +const handleClickAddonSettings = (search) => { + EditorPreload.openAddonSettings(typeof search === 'string' ? search : null); }; const handleClickNewWindow = () => {