diff --git a/changelog.md b/changelog.md index c273540..885cf69 100644 --- a/changelog.md +++ b/changelog.md @@ -5,5 +5,6 @@ ### New Features - 支持使用外部编辑器打开文件 +- 添加窗口置顶按钮 - 允许禁用系统标题栏 - 重写连接页面 diff --git a/src/main/utils/ipc.ts b/src/main/utils/ipc.ts index dc90e5e..e3abb08 100644 --- a/src/main/utils/ipc.ts +++ b/src/main/utils/ipc.ts @@ -182,6 +182,12 @@ export function registerIpcMainHandlers(): void { ipcMain.handle('setTitleBarOverlay', (_e, overlay) => { mainWindow?.setTitleBarOverlay(overlay) }) + ipcMain.handle('setAlwaysOnTop', (_e, alwaysOnTop) => { + mainWindow?.setAlwaysOnTop(alwaysOnTop) + }) + ipcMain.handle('isAlwaysOnTop', () => { + return mainWindow?.isAlwaysOnTop() + }) ipcMain.handle('openFile', (_e, type, id, ext) => openFile(type, id, ext)) ipcMain.handle('copyEnv', ipcErrorWrapper(copyEnv)) ipcMain.handle('alert', (_e, msg) => { diff --git a/src/renderer/src/App.tsx b/src/renderer/src/App.tsx index 88bd172..62f4f6a 100644 --- a/src/renderer/src/App.tsx +++ b/src/renderer/src/App.tsx @@ -5,6 +5,7 @@ import OutboundModeSwitcher from '@renderer/components/sider/outbound-mode-switc import SysproxySwitcher from '@renderer/components/sider/sysproxy-switcher' import TunSwitcher from '@renderer/components/sider/tun-switcher' import { Button, Divider } from '@nextui-org/react' +import { BsFillPinFill } from 'react-icons/bs' import { IoSettings } from 'react-icons/io5' import routes from '@renderer/routes' import { @@ -28,7 +29,7 @@ import MihomoCoreCard from '@renderer/components/sider/mihomo-core-card' import ResourceCard from '@renderer/components/sider/resource-card' import UpdaterButton from '@renderer/components/updater/updater-button' import { useAppConfig } from './hooks/use-app-config' -import { setNativeTheme, setTitleBarOverlay } from './utils/ipc' +import { isAlwaysOnTop, setAlwaysOnTop, setNativeTheme, setTitleBarOverlay } from './utils/ipc' import { platform } from './utils/init' import { TitleBarOverlayOptions } from 'electron' @@ -56,11 +57,16 @@ const App: React.FC = () => { } = appConfig || {} const [order, setOrder] = useState(siderOrder) const sensors = useSensors(useSensor(PointerSensor)) + const [onTop, setOnTop] = useState(false) const { setTheme, systemTheme } = useTheme() const navigate = useNavigate() const location = useLocation() const page = useRoutes(routes) + const updateAlwaysOnTop = async (): Promise => { + setOnTop(await isAlwaysOnTop()) + } + useEffect(() => { setOrder(siderOrder) }, [siderOrder]) @@ -141,17 +147,31 @@ const App: React.FC = () => { Mihomo Party -