tauri_winutils_crate/
lib.rs

1pub mod window_manager;
2pub mod workspace;
3pub mod layout;
4pub mod config;
5pub mod commands;
6pub mod system_window;
7
8pub use window_manager::{WindowManager, ManagedWindow, WindowPosition, WindowSize, WindowState};
9pub use workspace::Workspace;
10pub use layout::LayoutType;
11pub use config::{Config, KeyBindings};
12pub use commands::*;
13pub use system_window::{SystemWindow, SystemWindowManager, PlatformWindowManager};
14
15use tauri::{Manager, AppHandle, State};
16
17/// Initialize the window manager plugin for a Tauri application
18pub fn init_window_manager<R: tauri::Runtime>() -> tauri::plugin::TauriPlugin<R> {
19    tauri::plugin::Builder::new("window-manager")
20        .invoke_handler(tauri::generate_handler![
21            get_windows,
22            create_workspace,
23            switch_workspace,
24            get_workspaces,
25            arrange_windows,
26            close_window,
27            minimize_window,
28            maximize_window,
29            focus_window,
30            get_config,
31            update_config,
32            add_window_to_manager,
33            remove_window_from_manager,
34            get_system_windows,
35            move_system_window,
36            resize_system_window,
37            set_system_window_bounds,
38            minimize_system_window,
39            maximize_system_window,
40            restore_system_window,
41            close_system_window,
42            focus_system_window,
43            hide_system_window,
44            show_system_window,
45            arrange_system_windows
46        ])
47        .setup(|app_handle, _| {  // <-- fixed here, 2 args now
48            app_handle.manage(WindowManager::new());
49            Ok(())
50        })
51        .build()
52}
53
54/// Helper function to get the window manager from app state
55pub fn get_window_manager(app_handle: &AppHandle) -> Option<State<WindowManager>> {
56    app_handle.try_state::<WindowManager>()
57}
58
59/// Convenience macro for easy integration
60#[macro_export]
61macro_rules! setup_window_manager {
62    ($app:expr) => {
63        $app.plugin(tauri_window_manager_crate::init_window_manager())
64    };
65}