diff --git a/src/App.vue b/src/App.vue index c55421c9..a6faa4d8 100644 --- a/src/App.vue +++ b/src/App.vue @@ -124,6 +124,7 @@ export default { this.checkForAppUpdateInstalled() this.initDirWatcherWorker() this.initEventHubListeners() + electron.ipcRenderer.invoke('main-window-loaded') } catch (error) { electron.ipcRenderer.send('show:errorWindow', { @@ -219,6 +220,10 @@ export default { }) }, initIPCListeners () { + electron.ipcRenderer.on('open-global-search', (event, data) => { + this.$store.dispatch('TOGGLE_GLOBAL_SEARCH') + }) + electron.ipcRenderer.on('store:action', (event, data) => { this.$store.dispatch(data.action, data.params) }) diff --git a/src/electronMain.js b/src/electronMain.js index 87c843ec..6e552e89 100644 --- a/src/electronMain.js +++ b/src/electronMain.js @@ -41,6 +41,9 @@ const windows = { trashManager: null, quickViewWindow: null } +const windowLoadedCallbacks = { + mainWindow: [] +} const globalShortcuts = {} let storageData let tray @@ -296,7 +299,20 @@ function createUtilWindow (fileName) { }) } +function runWindowLoadedCallbacks () { + for (const window in windowLoadedCallbacks) { + windowLoadedCallbacks[window].forEach(callback => { + callback() + }) + } +} + function initIPCListeners () { + electron.ipcMain.handle('main-window-loaded', async (event) => { + runWindowLoadedCallbacks() + }) + + electron.ipcMain.handle('get-app-storage-data', async (event) => { electron.ipcMain.on('compute-request:trashDirItems', (event, payload) => { if (payload.items.length === 0) { throw Error(` @@ -563,9 +579,12 @@ function getTrayMenu () { { label: 'Toggle window visibility', accelerator: globalShortcuts?.toggleApp?.shortcut || '', - click: () => { - global.toggleApp({type: 'tray'}) - } + click: () => global.toggleApp({type: 'tray'}) + }, + { + label: 'Open global search', + accelerator: globalShortcuts?.openGlobalSearch?.shortcut || '', + click: () => global.openGlobalSearch() }, { label: 'Create new note', @@ -660,6 +679,22 @@ global.toggleApp = (options = {}) => { } } +global.openGlobalSearch = () => { + if (windows.main) { + if (!windows.main.isFocused()) { + global.focusApp() + } + windows.main.webContents.send('open-global-search') + } + else { + global.focusApp() + windowLoadedCallbacks.mainWindow.push(() => { + global.focusApp() + windows.main.webContents.send('open-global-search') + }) + } +} + function getCustomizedAppProperties (storageData) { return { openAtLogin: storageData['storageData.settings.appProperties.openAtLogin'] ?? true diff --git a/src/shortcuts.js b/src/shortcuts.js index 677796e0..2c20f657 100644 --- a/src/shortcuts.js +++ b/src/shortcuts.js @@ -21,6 +21,16 @@ export default { shortcut: 'Ctrl + Shift + Space', description: 'Open / close the app window' }, + openGlobalSearch: { + isGlobal: true, + isReadOnly: false, + conditions: {}, + routes: ['all'], + icon: 'mdi-magnify', + action: {name: 'openGlobalSearch'}, + shortcut: 'Alt + Ctrl + Shift + F', + description: 'Open global search' + }, newNote: { isGlobal: true, isReadOnly: false,