macOS: Fix undo redo not working on macOS.

The default API provided by Electron doesn't work
as expected. More info here -
https://github.com/electron/electron/issues/15728

Fixes: #866.
This commit is contained in:
Akash Nimare
2020-03-10 00:32:05 +05:30
committed by GitHub
parent 7ac35cc087
commit 01f6e77237
2 changed files with 30 additions and 9 deletions

View File

@@ -711,10 +711,8 @@ class ServerManagerView {
}
updateGeneralSettings(setting: string, value: any): void {
const selector = 'webview:not([class*=disabled])';
const webview: Electron.WebviewTag = document.querySelector(selector);
if (webview) {
const webContents = webview.getWebContents();
if (this.getActiveWebview()) {
const webContents = this.getActiveWebview().getWebContents();
webContents.send(setting, value);
}
}
@@ -738,6 +736,12 @@ class ServerManagerView {
return !(url.endsWith('/login/') || this.tabs[tabIndex].webview.loading);
}
getActiveWebview(): Electron.WebviewTag {
const selector = 'webview:not(.disabled)';
const webview: Electron.WebviewTag = document.querySelector(selector);
return webview;
}
addContextMenu($serverImg: HTMLImageElement, index: number): void {
$serverImg.addEventListener('contextmenu', e => {
e.preventDefault();
@@ -909,9 +913,7 @@ class ServerManagerView {
ipcRenderer.on('toggle-dnd', (event: Event, state: boolean, newSettings: SettingsOptions) => {
this.toggleDNDButton(state);
ipcRenderer.send('forward-message', 'toggle-silent', newSettings.silent);
const selector = 'webview:not([class*=disabled])';
const webview: Electron.WebviewTag = document.querySelector(selector);
const webContents = webview.getWebContents();
const webContents = this.getActiveWebview().getWebContents();
webContents.send('toggle-dnd', state, newSettings);
});
@@ -1016,6 +1018,15 @@ class ServerManagerView {
this.openSettings('AddServer');
});
// Redo and undo functionality since the default API doesn't work on macOS
ipcRenderer.on('undo', () => {
return this.getActiveWebview().undo();
});
ipcRenderer.on('redo', () => {
return this.getActiveWebview().redo();
});
ipcRenderer.on('set-active', () => {
const webviews: NodeListOf<Electron.WebviewTag> = document.querySelectorAll('webview');
webviews.forEach(webview => {