Tauri では、setupハンドラなどの初期ハンドラのほかに、
ウィンドウのイベントに関するハンドラも用意されています。
この記事では、Tauriのメインプロセス側(Rust)で、使える主なイベントハンドラを紹介。
Tauri 各イベントハンドラ一覧
- setup
- on_page_load
- on_window_event
- Resized
- Moved
- CloseRequested
- Destroyed
- Focused
- FileDrop
- Hovered
- Dropped
- Cancelled
setup
setupは、Builderに設定できるセットアップ用ハンドラです。
ブラウザウィンドウを表示する前に、1度だけコールされます。
ここからはじめて、メインのWindowインスタンスと、
Appインスタンスまたは、Managerインスタンスなどが取得できるようになります。
最初に作成されるウィンドウは、”main”というラベルのブラウザウィンドウになっています。
開発時だけ、devtoolsを表示したい際はここでopen_devtoolsメソッドをコールしておく良いでしょう。
tauri::Builder::default()
.setup(|app| {
// 一度だけコールされる。
// ここではじめて、appインスタンスや、mainのウィンドウインスタンスを取得できます。
// 開発時だけ、devtoolsを表示したい場合。
#[cfg(debug_assertions)]
app.get_window("main").unwrap().open_devtools();
Ok(())
})
.run(tauri::generate_context!())
.expect("error while running tauri application");
on_page_load
ブラウザウィンドウ内のページがロードされたタイミングでコールされます。
どのウィンドウの話なのか、windowインスタンスのラベルで判定できます。
payloadから、ロードされたページのURLが取得できます。
tauri::Builder::default()
.on_page_load(|window, payload| {
println!("on page_load {:?}", payload);
})
.run(tauri::generate_context!())
.expect("error while running tauri application");
on_window_event
ブラウザウィンドウのOS側での移動や、リサイズ、終了時にコールされます。
どのウィンドウのイベントなのかは、let window = event.window();
でwindowインスタンスを取得できるので、ラベルで判定できます。
ウィンドウのなんのイベントかは、WindowEventに列挙されてるので使いたいものを、マッチさせてハンドリングします。
tauri::Builder::default()
.on_window_event(|event| match event.event() {
WindowEvent::Resized(size) => {
println!("on Resized ({:?})", size);
}
WindowEvent::Moved(pos) => {
println!("on Moved ({:?})", pos);
}
WindowEvent::CloseRequested { api, .. } => {
println!("on CloseRequested");
// もし、終了をキャンセルしたい場合、prevent_closeできる。
//api.prevent_close();
}
WindowEvent::Destroyed => {
println!("on Destroyed");
}
WindowEvent::Focused(focused) => {
println!("on Focused ({})", focused);
}
WindowEvent::FileDrop(drop_event) => match drop_event {
FileDropEvent::Hovered(files) => {
println!("on FileDrop Hovered ({:?})", files);
}
FileDropEvent::(files) => {
println!("on FileDrop Dropped ({:?})", files);
}
FileDropEvent::Cancelled => {
println!("on FileDrop Cancelled");
}
other => {
println!("on FileDrop ({:?})", other);
}
}
_ => { }
})
.run(tauri::generate_context!())
.expect("error while running tauri application");
CloseRequestedに関しては、prevent_closeメソッドをコールする事で、
ウィンドウが閉じることをキャンセルすることができます。