OpenSiv3D
OpenSiv3D copied to clipboard
通知機能の実装 (Linux版)
残りの作業 ( https://github.com/Siv3D/OpenSiv3D/commit/0dc8d7afc6b960210838fc0a08302b8dc15c575e 時点)
- actionsとして表示するボタンの文字列を設定する機能
- actionsとしてどのボタンが押されたか取得する機能
- 通知のアプリケーション名を実行ファイル名から取る
- 他、共通APIのうち未実装のもの
@Reputeless Windows版の通知機能にある Hide() 関数と Clear() 関数について質問です。
前者は通知のIDを渡すとその通知を見えない状態にするがその通知自体はアクションセンターを開くことで閲覧できる、後者は消えていない通知全てをアクションセンターから削除する、という認識なのですがあっていますか?
それで正しいです。
@Reputeless 質問です。
- ToastNotificationStateのうち、ShownとActivatedの違いが知りたいです。
- ToastNotificationStateのうち、ApplicationHiddenはHide()関数によって隠されているということでしょうか。
- Windowsのトースト通知のタイムアウトは、見えなくなるだけなのか、アクションセンターからその通知が消えるのかどちらでしょうか。
回答します。
-
ToastNotification::Show()によって通知が現れるとShownになり、ユーザが、通知または通知上の Action ボタンのいずれかをクリックするとActivated(ユーザが反応した) になります。ただし通知上の「→」ボタンを押したときは通知はアクションセンターに格納されUserCanceled状態になります。 -
ApplicationHidden状態になるには、Hide()関数またはClear()関数をプログラムで呼ぶ以外の方法はありません。また、ApplicationHiddenではすでに通知はどこにも存在しません。 -
デスクトップ上の通知を一定時間無視すると、OS は通知を自動的にアクションセンターに格納します。このとき
TimedOutになります。アクションセンターからは自動では消えません。
Windows での挙動
None
- Show() を呼ぶ → 通知がデスクトップ上に現れ、
Shownになる
Shown
通知はデスクトップ上に表示されている

- 通知をクリックする → 通知は消え、
Activatedになる - 通知のアクションボタンをクリックする → 通知は消え、
Activatedになる - 通知の「→」ボタンを押す → 通知はアクションセンターに格納され
UserCanceledになる - 何も押さずに一定時間 (OS の設定による。デフォルトでは 25 秒前後) 経過 → 通知はアクションセンターに格納され
TimedOutになる ToastNotification::Hide()を呼ぶ → 通知は消え、ApplicationHiddenになるToastNotification::Clear()を呼ぶ → 通知は消え、ApplicationHiddenになる
Activated
通知はデスクトップ上にもアクションセンター上にも存在しない
UserCanceled かつ、通知はアクションセンター上に格納されている

- 通知をクリックする → 通知は消え、
UserCanceledのまま - 通知の「×」ボタンをクリックする → 通知は消え、
UserCanceledのまま - 通知のアクションボタンをクリックする → 通知は消え、
Activatedになる ToastNotification::Hide()を呼ぶ → OpenSiv3D では未規定(Windows では何も起こらない)ToastNotification::Clear()を呼ぶ → 通知は消え、ApplicationHiddenになる
TimedOut
通知はアクションセンター上に格納されている (UserCanceled と見た目は同じ)

- 通知をクリックする → 通知は消え、この次の状態は OpenSiv3D では未規定(Windows 版では変わらず)
- 通知の「×」ボタンをクリックする → 通知は消え、
UserCanceledになる - 通知のアクションボタンをクリックする → 通知は消え、
Activatedになる ToastNotification::Hide()を呼ぶ → OpenSiv3D では未規定(Windows では何も起こらない)ToastNotification::Clear()を呼ぶ → 通知は消え、ApplicationHiddenになる
ApplicationHidden
通知はデスクトップ上にもアクションセンター上にも存在しない
Shown状態での通知クリックはActivatedを作りますが、アクションセンター上でのアクションボタン以外のクリックはActivateをもたらしません。 -「未規定」の部分は、実装の余裕を持たせるためプラットフォーム依存にしています。