mirror of
https://github.com/siyuan-note/siyuan.git
synced 2026-02-21 14:34:06 +01:00
🎨 Fix focus issues on Windows after dialog interactions (#16862)
https://github.com/siyuan-note/siyuan/pull/16073 https://github.com/siyuan-note/siyuan/issues/16071 https://github.com/siyuan-note/siyuan/issues/12349
This commit is contained in:
parent
6cd3e47a5d
commit
93bed6e29f
3 changed files with 48 additions and 28 deletions
|
|
@ -948,12 +948,14 @@ app.whenReady().then(() => {
|
|||
event.sender.send("siyuan-event", "leave-full-screen");
|
||||
});
|
||||
});
|
||||
ipcMain.on("siyuan-focus-fix", (event) => {
|
||||
const currentWindow = getWindowByContentId(event.sender.id);
|
||||
if (currentWindow && process.platform === "win32") {
|
||||
currentWindow.blur();
|
||||
currentWindow.focus();
|
||||
}
|
||||
ipcMain.on("siyuan-confirm-dialog", (event, options) => {
|
||||
const window = BrowserWindow.fromWebContents(event.sender);
|
||||
event.returnValue = dialog.showMessageBoxSync(window || BrowserWindow.getFocusedWindow(), options);
|
||||
});
|
||||
ipcMain.on("siyuan-alert-dialog", (event, options) => {
|
||||
const window = BrowserWindow.fromWebContents(event.sender);
|
||||
dialog.showMessageBoxSync(window || BrowserWindow.getFocusedWindow(), options);
|
||||
event.returnValue = undefined;
|
||||
});
|
||||
ipcMain.on("siyuan-cmd", (event, data) => {
|
||||
let cmd = data;
|
||||
|
|
|
|||
|
|
@ -7,7 +7,7 @@ import * as fs from "fs";
|
|||
import * as path from "path";
|
||||
import {afterExport} from "../protyle/export/util";
|
||||
import {onWindowsMsg} from "../window/onWindowsMsg";
|
||||
import {initFocusFix} from "../protyle/util/compatibility";
|
||||
import {initNativeDialogOverride} from "../protyle/util/compatibility";
|
||||
/// #endif
|
||||
import {Constants} from "../constants";
|
||||
import {appearance} from "../config/appearance";
|
||||
|
|
@ -70,7 +70,7 @@ export const onGetConfig = (isStart: boolean, app: App) => {
|
|||
initStatus();
|
||||
initWindow(app);
|
||||
/// #if !BROWSER
|
||||
initFocusFix();
|
||||
initNativeDialogOverride();
|
||||
/// #endif
|
||||
appearance.onSetAppearance(window.siyuan.config.appearance);
|
||||
initAssets();
|
||||
|
|
|
|||
|
|
@ -576,35 +576,53 @@ export const setStorageVal = (key: string, val: any, cb?: () => void) => {
|
|||
};
|
||||
|
||||
/// #if !BROWSER
|
||||
export const initFocusFix = () => {
|
||||
if (!isWindows()) {
|
||||
return;
|
||||
}
|
||||
export const initNativeDialogOverride = () => {
|
||||
const originalAlert = window.alert;
|
||||
const originalConfirm = window.confirm;
|
||||
const fixFocusAfterDialog = () => {
|
||||
ipcRenderer.send("siyuan-focus-fix");
|
||||
};
|
||||
|
||||
window.alert = function (message: string) {
|
||||
try {
|
||||
const result = originalAlert.call(this, message);
|
||||
fixFocusAfterDialog();
|
||||
return result;
|
||||
} catch (error) {
|
||||
console.error("alert error:", error);
|
||||
fixFocusAfterDialog();
|
||||
ipcRenderer.sendSync("siyuan-alert-dialog", {
|
||||
title: window.siyuan?.languages?.siyuanNote || "SiYuan",
|
||||
message,
|
||||
buttons: [window.siyuan?.languages?.confirm || "OK"],
|
||||
noLink: true,
|
||||
});
|
||||
|
||||
return undefined;
|
||||
} catch (error) {
|
||||
console.error("SiYuan alert error:", error);
|
||||
try {
|
||||
const result = originalAlert.call(this, message);
|
||||
return result;
|
||||
} catch (e) {
|
||||
console.error("Original alert error:", e);
|
||||
return undefined;
|
||||
}
|
||||
}
|
||||
};
|
||||
window.confirm = function (message: string) {
|
||||
|
||||
window.confirm = function (message: string): boolean {
|
||||
try {
|
||||
const result = originalConfirm.call(this, message);
|
||||
fixFocusAfterDialog();
|
||||
return result;
|
||||
const buttonIndex = ipcRenderer.sendSync("siyuan-confirm-dialog", {
|
||||
title: window.siyuan?.languages?.siyuanNote || "SiYuan",
|
||||
message,
|
||||
buttons: [window.siyuan?.languages?.cancel || "Cancel", window.siyuan?.languages?.confirm || "OK"],
|
||||
cancelId: 0,
|
||||
defaultId: 1,
|
||||
noLink: true,
|
||||
});
|
||||
|
||||
return buttonIndex === 1;
|
||||
} catch (error) {
|
||||
console.error("confirm error:", error);
|
||||
fixFocusAfterDialog();
|
||||
return false;
|
||||
console.error("SiYuan confirm error:", error);
|
||||
try {
|
||||
const result = originalConfirm.call(this, message);
|
||||
return result;
|
||||
} catch (e) {
|
||||
console.error("Original confirm error:", e);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
};
|
||||
};
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue