タスクバーでウィンドウを点滅させる

Recipe ID: win-020

タスクバー上のプリアイコンを点滅させ、ユーザーに注意を促す(User Attention Request)方法を紹介します。

長時間実行していた処理が完了した際や、緊急の通知がある場合など、ウィンドウが非アクティブな状態でもユーザーに気付いてもらうために有効です。
フロントエンド、バックエンドそれぞれから、点滅の種類(Critical/Informational)を指定して実行する手順を解説します。

:::warning 注意
ウィンドウの点滅は、ウィンドウにフォーカスが当たっていない(アクティブでない)場合のみ有効です。
すでにウィンドウがアクティブな状態でこの機能を実行しても、視覚的な効果は発生しませんのでご注意ください。
:::

前提条件

Permissions (権限) の設定

src-tauri/capabilities/default.json に以下の権限を追加します。

{
  "permissions": [
    ...,
    "core:window:default",
    "core:window:allow-request-user-attention"
  ]
}

1. フロントエンドから変更する (TypeScript)

requestUserAttention を使用します。

サンプルコード

import { getCurrentWindow } from '@tauri-apps/api/window';

const appWindow = getCurrentWindow();

// タスクバーでウィンドウを点滅させる (注意を引く)
await appWindow.requestUserAttention(1); // 1 = Critical

// 点滅を止める
await appWindow.requestUserAttention(null);

パラメータ説明

  • 1 (Critical): 強い点滅 (Windowsでは継続的に点滅)
  • 2 (Informational): 軽い点滅 (Windowsでは数回点滅して停止)
  • null: 点滅を停止

2. バックエンドから変更する (Rust)

request_user_attention メソッドを使用します。

use tauri::{Manager, UserAttentionType};

#[tauri::command]
fn flash_window(app_handle: tauri::AppHandle) {
    if let Some(window) = app_handle.get_webview_window("main") {
        // Critical な点滅を開始
        window.request_user_attention(Some(UserAttentionType::Critical)).unwrap();
    }
}

#[tauri::command]
fn stop_flash(app_handle: tauri::AppHandle) {
    if let Some(window) = app_handle.get_webview_window("main") {
        // 点滅を停止
        window.request_user_attention(None).unwrap();
    }
}