Tauri メインプロセス側で取得できるイベント

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メソッドをコールする事で、
ウィンドウが閉じることをキャンセルすることができます。

タイトルとURLをコピーしました