app / src /utils /windowManager.ts
AZILS's picture
Upload 323 files
a21c316 verified
import { getCurrentWindow, LogicalSize } from '@tauri-apps/api/window';
import { isTauri } from './env';
/**
* Enter mini view mode
* @param contentHeight The height of the content to fit
* @param shouldCenter Whether to center the window (default: false)
*/
export const enterMiniMode = async (contentHeight: number, shouldCenter: boolean = false) => {
if (!isTauri()) return;
try {
const win = getCurrentWindow();
// Hide window decorations (title bar) first to ensure accurate sizing
await win.setDecorations(false);
// Set window size: width 300, height = content height
await win.setSize(new LogicalSize(300, contentHeight+2));
await win.setAlwaysOnTop(true);
// Enable window shadow
await win.setShadow(true);
// Disable resizing in mini mode
await win.setResizable(false);
// Center window only if requested (usually on first load)
if (shouldCenter) {
await win.center();
}
} catch (error) {
console.error('Failed to enter mini mode:', error);
}
};
/**
* Exit mini view mode and restore default window state
*/
export const exitMiniMode = async () => {
if (!isTauri()) return;
try {
const win = getCurrentWindow();
// Restore to a reasonable default size
await win.setSize(new LogicalSize(1200, 800));
await win.setAlwaysOnTop(false);
await win.center();
// Restore window decorations (title bar)
await win.setDecorations(true);
// Re-enable resizing
await win.setResizable(true);
} catch (error) {
console.error('Failed to exit mini mode:', error);
}
};
/**
* Ensure window is in valid full view state (Self-healing)
* Used on app startup to recover from improper shutdown in mini mode
*/
export const ensureFullViewState = async () => {
if (!isTauri()) return;
try {
const win = getCurrentWindow();
const size = await win.outerSize();
// If window is suspiciously narrow (likely leftover from Mini View), restore default size
if (size.width < 500) {
await win.setSize(new LogicalSize(1200, 800));
await win.center();
}
// Always enforce standard window properties for Full View
await win.setDecorations(true);
await win.setResizable(true);
await win.setAlwaysOnTop(false);
} catch (error) {
console.error('Failed to ensure full view state:', error);
}
};