mirror of https://github.com/Fabio286/antares.git
fix: CTRL+Right/Left not working on text editor, closes #427
This commit is contained in:
parent
1fb1205319
commit
ffc645ba5e
|
@ -1,4 +1,4 @@
|
||||||
import { BrowserWindow, globalShortcut } from 'electron';
|
import { BrowserWindow, globalShortcut, Menu, MenuItem, MenuItemConstructorOptions } from 'electron';
|
||||||
import * as Store from 'electron-store';
|
import * as Store from 'electron-store';
|
||||||
import { ShortcutRecord, shortcuts } from 'common/shortcuts';
|
import { ShortcutRecord, shortcuts } from 'common/shortcuts';
|
||||||
|
|
||||||
|
@ -6,17 +6,27 @@ const shortcutsStore = new Store({ name: 'shortcuts' });
|
||||||
const isDevelopment = process.env.NODE_ENV !== 'production';
|
const isDevelopment = process.env.NODE_ENV !== 'production';
|
||||||
const defaultShortcuts = shortcuts.filter(s => s.os.includes(process.platform));
|
const defaultShortcuts = shortcuts.filter(s => s.os.includes(process.platform));
|
||||||
|
|
||||||
|
export type ShortcutMode = 'local' | 'global'
|
||||||
|
export type OsMenu = {
|
||||||
|
[key in NodeJS.Platform]?: MenuItemConstructorOptions[];
|
||||||
|
};
|
||||||
|
|
||||||
export class ShortcutRegister {
|
export class ShortcutRegister {
|
||||||
private _shortcuts: ShortcutRecord[];
|
private _shortcuts: ShortcutRecord[];
|
||||||
private _mainWindow: BrowserWindow;
|
private _mainWindow: BrowserWindow;
|
||||||
|
private _menu: Menu;
|
||||||
|
private _menuTemplate: OsMenu;
|
||||||
|
private _mode: ShortcutMode;
|
||||||
private static _instance: ShortcutRegister;
|
private static _instance: ShortcutRegister;
|
||||||
|
|
||||||
private constructor (args: { mainWindow: BrowserWindow }) {
|
private constructor (args: { mainWindow: BrowserWindow; menuTemplate: OsMenu; mode: ShortcutMode }) {
|
||||||
this._mainWindow = args.mainWindow;
|
this._mainWindow = args.mainWindow;
|
||||||
|
this._menuTemplate = args.menuTemplate;
|
||||||
|
this._mode = args.mode;
|
||||||
this.shortcuts = shortcutsStore.get('shortcuts', defaultShortcuts) as ShortcutRecord[];
|
this.shortcuts = shortcutsStore.get('shortcuts', defaultShortcuts) as ShortcutRecord[];
|
||||||
}
|
}
|
||||||
|
|
||||||
public static getInstance (args: { mainWindow: BrowserWindow }) {
|
public static getInstance (args: { mainWindow: BrowserWindow; menuTemplate: OsMenu; mode: ShortcutMode }) {
|
||||||
if (!ShortcutRegister._instance)
|
if (!ShortcutRegister._instance)
|
||||||
ShortcutRegister._instance = new ShortcutRegister(args);
|
ShortcutRegister._instance = new ShortcutRegister(args);
|
||||||
|
|
||||||
|
@ -33,24 +43,73 @@ export class ShortcutRegister {
|
||||||
}
|
}
|
||||||
|
|
||||||
init () {
|
init () {
|
||||||
|
this._mainWindow.webContents.send('update-shortcuts', this.shortcuts);
|
||||||
|
|
||||||
|
this.buildBaseMenu();
|
||||||
|
|
||||||
|
if (this._mode === 'global')
|
||||||
|
this.setGlobalShortcuts();
|
||||||
|
else if (this._mode === 'local')
|
||||||
|
this.setLocalShortcuts();
|
||||||
|
else
|
||||||
|
throw new Error(`Unknown mode "${this._mode}"`);
|
||||||
|
|
||||||
|
Menu.setApplicationMenu(this._menu);
|
||||||
|
}
|
||||||
|
|
||||||
|
private buildBaseMenu () {
|
||||||
|
if (Object.keys(this._menuTemplate).includes(process.platform))
|
||||||
|
this._menu = Menu.buildFromTemplate(this._menuTemplate[process.platform]);
|
||||||
|
else
|
||||||
|
this._menu = new Menu();
|
||||||
|
}
|
||||||
|
|
||||||
|
private setLocalShortcuts () {
|
||||||
for (const shortcut of this.shortcuts) {
|
for (const shortcut of this.shortcuts) {
|
||||||
if (shortcut.os.includes(process.platform)) {
|
if (shortcut.os.includes(process.platform)) {
|
||||||
for (const key of shortcut.keys) {
|
for (const key of shortcut.keys) {
|
||||||
try {
|
try {
|
||||||
globalShortcut.register(key, () => {
|
this._menu.append(new MenuItem({
|
||||||
this._mainWindow.webContents.send(shortcut.event);
|
label: 'Shortcuts',
|
||||||
if (isDevelopment) console.log('EVENT:', shortcut);
|
submenu: [{
|
||||||
});
|
label: String(key),
|
||||||
|
accelerator: key,
|
||||||
|
visible: false,
|
||||||
|
click: () => {
|
||||||
|
this._mainWindow.webContents.send(shortcut.event);
|
||||||
|
if (isDevelopment) console.log('LOCAL EVENT:', shortcut);
|
||||||
|
}
|
||||||
|
}]
|
||||||
|
}));
|
||||||
}
|
}
|
||||||
catch (error) {
|
catch (error) {
|
||||||
|
if (isDevelopment) console.log(error);
|
||||||
this.restoreDefaults();
|
this.restoreDefaults();
|
||||||
throw error;
|
throw error;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
this._mainWindow.webContents.send('update-shortcuts', this.shortcuts);
|
private setGlobalShortcuts () {
|
||||||
|
for (const shortcut of this.shortcuts) {
|
||||||
|
if (shortcut.os.includes(process.platform)) {
|
||||||
|
for (const key of shortcut.keys) {
|
||||||
|
try {
|
||||||
|
globalShortcut.register(key, () => {
|
||||||
|
this._mainWindow.webContents.send(shortcut.event);
|
||||||
|
if (isDevelopment) console.log('GLOBAL EVENT:', shortcut);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
catch (error) {
|
||||||
|
if (isDevelopment) console.log(error);
|
||||||
|
this.restoreDefaults();
|
||||||
|
throw error;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
reload () {
|
reload () {
|
||||||
|
@ -69,6 +128,6 @@ export class ShortcutRegister {
|
||||||
}
|
}
|
||||||
|
|
||||||
unregister () {
|
unregister () {
|
||||||
globalShortcut.unregisterAll();
|
if (this._mode === 'global') globalShortcut.unregisterAll();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,16 +1,14 @@
|
||||||
import { app, BrowserWindow, globalShortcut, nativeImage, Menu, ipcMain } from 'electron';
|
import { app, BrowserWindow, nativeImage, ipcMain } from 'electron';
|
||||||
import * as path from 'path';
|
import * as path from 'path';
|
||||||
import * as Store from 'electron-store';
|
import * as Store from 'electron-store';
|
||||||
import * as windowStateKeeper from 'electron-window-state';
|
import * as windowStateKeeper from 'electron-window-state';
|
||||||
import * as remoteMain from '@electron/remote/main';
|
import * as remoteMain from '@electron/remote/main';
|
||||||
|
|
||||||
import ipcHandlers from './ipc-handlers';
|
import ipcHandlers from './ipc-handlers';
|
||||||
import { ShortcutRegister } from './libs/ShortcutRegister';
|
import { OsMenu, ShortcutRegister } from './libs/ShortcutRegister';
|
||||||
|
|
||||||
Store.initRenderer();
|
Store.initRenderer();
|
||||||
const settingsStore = new Store({ name: 'settings' });
|
const settingsStore = new Store({ name: 'settings' });
|
||||||
|
|
||||||
let shortCutRegister: ShortcutRegister;
|
|
||||||
const appTheme = settingsStore.get('application_theme');
|
const appTheme = settingsStore.get('application_theme');
|
||||||
const isDevelopment = process.env.NODE_ENV !== 'production';
|
const isDevelopment = process.env.NODE_ENV !== 'production';
|
||||||
const isMacOS = process.platform === 'darwin';
|
const isMacOS = process.platform === 'darwin';
|
||||||
|
@ -122,32 +120,12 @@ else {
|
||||||
mainWindow = await createMainWindow();
|
mainWindow = await createMainWindow();
|
||||||
createAppMenu();
|
createAppMenu();
|
||||||
|
|
||||||
shortCutRegister = ShortcutRegister.getInstance({ mainWindow });
|
|
||||||
|
|
||||||
if (isWindows)
|
if (isWindows)
|
||||||
mainWindow.show();
|
mainWindow.show();
|
||||||
|
|
||||||
if (isDevelopment)
|
if (isDevelopment)
|
||||||
mainWindow.webContents.openDevTools();
|
mainWindow.webContents.openDevTools();
|
||||||
|
|
||||||
app.on('browser-window-focus', () => {
|
|
||||||
// Send registered shortcut events to window
|
|
||||||
shortCutRegister.init();
|
|
||||||
|
|
||||||
if (isDevelopment) { // Dev shortcuts
|
|
||||||
globalShortcut.register('Shift+CommandOrControl+F5', () => {
|
|
||||||
mainWindow.reload();
|
|
||||||
});
|
|
||||||
globalShortcut.register('Shift+CommandOrControl+F12', () => {
|
|
||||||
mainWindow.webContents.openDevTools();
|
|
||||||
});
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
app.on('browser-window-blur', () => {
|
|
||||||
shortCutRegister.unregister();
|
|
||||||
});
|
|
||||||
|
|
||||||
process.on('uncaughtException', error => {
|
process.on('uncaughtException', error => {
|
||||||
mainWindow.webContents.send('unhandled-exception', error);
|
mainWindow.webContents.send('unhandled-exception', error);
|
||||||
});
|
});
|
||||||
|
@ -167,10 +145,8 @@ else {
|
||||||
}
|
}
|
||||||
|
|
||||||
function createAppMenu () {
|
function createAppMenu () {
|
||||||
let menu: Electron.Menu = null;
|
const menuTemplate: OsMenu = {
|
||||||
|
darwin: [
|
||||||
if (isMacOS) {
|
|
||||||
menu = Menu.buildFromTemplate([
|
|
||||||
{
|
{
|
||||||
label: app.name,
|
label: app.name,
|
||||||
submenu: [
|
submenu: [
|
||||||
|
@ -201,10 +177,11 @@ function createAppMenu () {
|
||||||
{
|
{
|
||||||
role: 'windowMenu'
|
role: 'windowMenu'
|
||||||
}
|
}
|
||||||
]);
|
]
|
||||||
}
|
};
|
||||||
|
|
||||||
Menu.setApplicationMenu(menu);
|
const shortCutRegister = ShortcutRegister.getInstance({ mainWindow, menuTemplate, mode: 'local' });
|
||||||
|
shortCutRegister.init();
|
||||||
}
|
}
|
||||||
|
|
||||||
function saveWindowState () {
|
function saveWindowState () {
|
||||||
|
|
|
@ -611,7 +611,7 @@ const onKey = async (e: KeyboardEvent) => {
|
||||||
selectAllRows(e);
|
selectAllRows(e);
|
||||||
|
|
||||||
// row navigation stuff
|
// row navigation stuff
|
||||||
if ((e.code.includes('Arrow') || e.code === 'Tab') && sortedResults.value.length > 0 && !e.altKey) {
|
if (!(e.ctrlKey || e.metaKey) && (e.code.includes('Arrow') || e.code === 'Tab') && sortedResults.value.length > 0 && !e.altKey) {
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
|
|
||||||
const aviableFields= Object.keys(sortedResults.value[0]).slice(0, -1); // removes _antares_id
|
const aviableFields= Object.keys(sortedResults.value[0]).slice(0, -1); // removes _antares_id
|
||||||
|
|
Loading…
Reference in New Issue