mirror of
https://github.com/t8y2/dbx.git
synced 2026-11-02 00:29:30 +00:00
68 lines
1.9 KiB
TypeScript
68 lines
1.9 KiB
TypeScript
import { ref, onMounted, onUnmounted } from "vue";
|
|
import { isTauriRuntime } from "@/lib/tauriRuntime";
|
|
import { isMacOS } from "@/lib/platform";
|
|
|
|
export function shouldReserveMacTrafficLightInset(isMac: boolean, isFullscreen: boolean, isDesktop = true): boolean {
|
|
return isDesktop && isMac && !isFullscreen;
|
|
}
|
|
|
|
export function useWindowControls() {
|
|
const isMaximized = ref(false);
|
|
const isFullscreen = ref(false);
|
|
const isMac = isMacOS();
|
|
const isDesktop = isTauriRuntime();
|
|
const showControls = isDesktop && !isMac;
|
|
|
|
let unlisten: (() => void) | null = null;
|
|
|
|
async function updateWindowState() {
|
|
if (!isDesktop) return;
|
|
const { getCurrentWindow } = await import("@tauri-apps/api/window");
|
|
const currentWindow = getCurrentWindow();
|
|
const [maximized, fullscreen] = await Promise.all([currentWindow.isMaximized(), currentWindow.isFullscreen()]);
|
|
isMaximized.value = maximized;
|
|
isFullscreen.value = fullscreen;
|
|
}
|
|
|
|
async function minimize() {
|
|
const { getCurrentWindow } = await import("@tauri-apps/api/window");
|
|
await getCurrentWindow().minimize();
|
|
}
|
|
|
|
async function toggleMaximize() {
|
|
const { getCurrentWindow } = await import("@tauri-apps/api/window");
|
|
await getCurrentWindow().toggleMaximize();
|
|
setTimeout(updateWindowState, 50);
|
|
}
|
|
|
|
async function close() {
|
|
const { getCurrentWindow } = await import("@tauri-apps/api/window");
|
|
await getCurrentWindow().close();
|
|
}
|
|
|
|
onMounted(async () => {
|
|
if (!isDesktop) return;
|
|
await updateWindowState();
|
|
const { getCurrentWindow } = await import("@tauri-apps/api/window");
|
|
const unlistenFn = await getCurrentWindow().onResized(() => {
|
|
void updateWindowState();
|
|
});
|
|
unlisten = unlistenFn;
|
|
});
|
|
|
|
onUnmounted(() => {
|
|
unlisten?.();
|
|
});
|
|
|
|
return {
|
|
isMac,
|
|
isDesktop,
|
|
showControls,
|
|
isMaximized,
|
|
isFullscreen,
|
|
minimize,
|
|
toggleMaximize,
|
|
close,
|
|
};
|
|
}
|