mirror of
https://github.com/zulip/zulip-desktop.git
synced 2025-11-10 08:55:43 +00:00
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:
@@ -372,10 +372,20 @@ function getDarwinTpl(props: any): Electron.MenuItemConstructorOptions[] {
|
|||||||
label: t.__('Edit'),
|
label: t.__('Edit'),
|
||||||
submenu: [{
|
submenu: [{
|
||||||
label: t.__('Undo'),
|
label: t.__('Undo'),
|
||||||
role: 'undo'
|
accelerator: 'Cmd+Z',
|
||||||
|
click(_item: any, focusedWindow: any) {
|
||||||
|
if (focusedWindow) {
|
||||||
|
sendAction('undo');
|
||||||
|
}
|
||||||
|
}
|
||||||
}, {
|
}, {
|
||||||
label: t.__('Redo'),
|
label: t.__('Redo'),
|
||||||
role: 'redo'
|
accelerator: 'Cmd+Shift+Z',
|
||||||
|
click(_item: any, focusedWindow: any) {
|
||||||
|
if (focusedWindow) {
|
||||||
|
sendAction('redo');
|
||||||
|
}
|
||||||
|
}
|
||||||
}, {
|
}, {
|
||||||
type: 'separator'
|
type: 'separator'
|
||||||
}, {
|
}, {
|
||||||
|
|||||||
@@ -711,10 +711,8 @@ class ServerManagerView {
|
|||||||
}
|
}
|
||||||
|
|
||||||
updateGeneralSettings(setting: string, value: any): void {
|
updateGeneralSettings(setting: string, value: any): void {
|
||||||
const selector = 'webview:not([class*=disabled])';
|
if (this.getActiveWebview()) {
|
||||||
const webview: Electron.WebviewTag = document.querySelector(selector);
|
const webContents = this.getActiveWebview().getWebContents();
|
||||||
if (webview) {
|
|
||||||
const webContents = webview.getWebContents();
|
|
||||||
webContents.send(setting, value);
|
webContents.send(setting, value);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -738,6 +736,12 @@ class ServerManagerView {
|
|||||||
return !(url.endsWith('/login/') || this.tabs[tabIndex].webview.loading);
|
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 {
|
addContextMenu($serverImg: HTMLImageElement, index: number): void {
|
||||||
$serverImg.addEventListener('contextmenu', e => {
|
$serverImg.addEventListener('contextmenu', e => {
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
@@ -909,9 +913,7 @@ class ServerManagerView {
|
|||||||
ipcRenderer.on('toggle-dnd', (event: Event, state: boolean, newSettings: SettingsOptions) => {
|
ipcRenderer.on('toggle-dnd', (event: Event, state: boolean, newSettings: SettingsOptions) => {
|
||||||
this.toggleDNDButton(state);
|
this.toggleDNDButton(state);
|
||||||
ipcRenderer.send('forward-message', 'toggle-silent', newSettings.silent);
|
ipcRenderer.send('forward-message', 'toggle-silent', newSettings.silent);
|
||||||
const selector = 'webview:not([class*=disabled])';
|
const webContents = this.getActiveWebview().getWebContents();
|
||||||
const webview: Electron.WebviewTag = document.querySelector(selector);
|
|
||||||
const webContents = webview.getWebContents();
|
|
||||||
webContents.send('toggle-dnd', state, newSettings);
|
webContents.send('toggle-dnd', state, newSettings);
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -1016,6 +1018,15 @@ class ServerManagerView {
|
|||||||
this.openSettings('AddServer');
|
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', () => {
|
ipcRenderer.on('set-active', () => {
|
||||||
const webviews: NodeListOf<Electron.WebviewTag> = document.querySelectorAll('webview');
|
const webviews: NodeListOf<Electron.WebviewTag> = document.querySelectorAll('webview');
|
||||||
webviews.forEach(webview => {
|
webviews.forEach(webview => {
|
||||||
|
|||||||
Reference in New Issue
Block a user