🎨 Fix focus issues on Windows after dialog interactions (#16073)

fix https://github.com/siyuan-note/siyuan/issues/16071
This commit is contained in:
Jeffrey Chen 2025-10-18 10:43:29 +08:00 committed by GitHub
parent 8725e5daa8
commit 067db0791f
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 47 additions and 0 deletions

View file

@ -866,6 +866,13 @@ app.whenReady().then(() => {
event.sender.send("siyuan-event", "leave-full-screen"); 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-cmd", (event, data) => { ipcMain.on("siyuan-cmd", (event, data) => {
let cmd = data; let cmd = data;
let webContentsId = event.sender.id; let webContentsId = event.sender.id;

View file

@ -7,6 +7,7 @@ import * as fs from "fs";
import * as path from "path"; import * as path from "path";
import {afterExport} from "../protyle/export/util"; import {afterExport} from "../protyle/export/util";
import {onWindowsMsg} from "../window/onWindowsMsg"; import {onWindowsMsg} from "../window/onWindowsMsg";
import {initFocusFix} from "../protyle/util/compatibility";
/// #endif /// #endif
import {Constants} from "../constants"; import {Constants} from "../constants";
import {appearance} from "../config/appearance"; import {appearance} from "../config/appearance";
@ -68,6 +69,9 @@ export const onGetConfig = (isStart: boolean, app: App) => {
initBar(app); initBar(app);
initStatus(); initStatus();
initWindow(app); initWindow(app);
/// #if !BROWSER
initFocusFix();
/// #endif
appearance.onSetAppearance(window.siyuan.config.appearance); appearance.onSetAppearance(window.siyuan.config.appearance);
initAssets(); initAssets();
setInlineStyle(); setInlineStyle();

View file

@ -3,6 +3,7 @@ import {fetchPost, fetchSyncPost} from "../../util/fetch";
import {Constants} from "../../constants"; import {Constants} from "../../constants";
/// #if !BROWSER /// #if !BROWSER
import {clipboard} from "electron"; import {clipboard} from "electron";
import {ipcRenderer} from "electron";
/// #endif /// #endif
export const encodeBase64 = (text: string): string => { export const encodeBase64 = (text: string): string => {
@ -512,3 +513,38 @@ export const setStorageVal = (key: string, val: any, cb?: () => void) => {
} }
}); });
}; };
/// #if !BROWSER
export const initFocusFix = () => {
if (!isWindows()) {
return;
}
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();
return undefined;
}
};
window.confirm = function(message: string) {
try {
const result = originalConfirm.call(this, message);
fixFocusAfterDialog();
return result;
} catch (error) {
console.error("confirm error:", error);
fixFocusAfterDialog();
return false;
}
};
};
/// #endif