diff --git a/plugins/positioner/guest-js/index.ts b/plugins/positioner/guest-js/index.ts index d8f6204f..74d0295e 100644 --- a/plugins/positioner/guest-js/index.ts +++ b/plugins/positioner/guest-js/index.ts @@ -39,6 +39,19 @@ export async function moveWindow(to: Position): Promise { }) } +/** + * Moves the `Window` to the given {@link Position} using `WindowExt.move_window_constrained()` + * + * This move operation constrains the window to the screen dimensions in case of + * tray-icon positions. + * @param to The (tray) {@link Position} to move to. + */ +export async function moveWindowConstrained(to: Position): Promise { + await invoke('plugin:positioner|move_window_constrained', { + position: to + }) +} + export async function handleIconState(event: TrayIconEvent): Promise { await invoke('plugin:positioner|set_tray_icon_state', { position: event.rect.position, diff --git a/plugins/positioner/src/lib.rs b/plugins/positioner/src/lib.rs index df5eef18..84fea035 100644 --- a/plugins/positioner/src/lib.rs +++ b/plugins/positioner/src/lib.rs @@ -61,6 +61,13 @@ async fn move_window(window: tauri::Window, position: Position) - window.move_window(position) } +#[cfg(feature = "tray-icon")] +#[tauri::command] +async fn move_window_constrained(window: tauri::Window, position: Position) -> Result<()> { + window.move_window_constrained(position) +} + + #[cfg(feature = "tray-icon")] #[tauri::command] fn set_tray_icon_state( @@ -80,6 +87,8 @@ pub fn init() -> TauriPlugin { let plugin = plugin::Builder::new("positioner").invoke_handler(tauri::generate_handler![ move_window, #[cfg(feature = "tray-icon")] + move_window_constrained, + #[cfg(feature = "tray-icon")] set_tray_icon_state ]);