OpenSiv3D icon indicating copy to clipboard operation
OpenSiv3D copied to clipboard

通知機能の実装 (Linux版)

Open wynd2608 opened this issue 5 years ago • 5 comments

wynd2608 avatar Nov 16 '19 08:11 wynd2608

残りの作業 ( https://github.com/Siv3D/OpenSiv3D/commit/0dc8d7afc6b960210838fc0a08302b8dc15c575e 時点)

  • actionsとして表示するボタンの文字列を設定する機能
  • actionsとしてどのボタンが押されたか取得する機能
  • 通知のアプリケーション名を実行ファイル名から取る
  • 他、共通APIのうち未実装のもの

wynd2608 avatar Dec 13 '19 10:12 wynd2608

@Reputeless Windows版の通知機能にある Hide() 関数と Clear() 関数について質問です。

前者は通知のIDを渡すとその通知を見えない状態にするがその通知自体はアクションセンターを開くことで閲覧できる、後者は消えていない通知全てをアクションセンターから削除する、という認識なのですがあっていますか?

wynd2608 avatar Dec 14 '19 08:12 wynd2608

それで正しいです。

Reputeless avatar Dec 14 '19 08:12 Reputeless

@Reputeless 質問です。

  1. ToastNotificationStateのうち、ShownとActivatedの違いが知りたいです。
  2. ToastNotificationStateのうち、ApplicationHiddenはHide()関数によって隠されているということでしょうか。
  3. Windowsのトースト通知のタイムアウトは、見えなくなるだけなのか、アクションセンターからその通知が消えるのかどちらでしょうか。

wynd2608 avatar Jan 25 '20 04:01 wynd2608

回答します。

  1. ToastNotification::Show() によって通知が現れると Shown になり、ユーザが、通知または通知上の Action ボタンのいずれかをクリックすると Activated (ユーザが反応した) になります。ただし通知上の「→」ボタンを押したときは通知はアクションセンターに格納され UserCanceled 状態になります。

  2. ApplicationHidden 状態になるには、Hide() 関数または Clear() 関数をプログラムで呼ぶ以外の方法はありません。また、ApplicationHidden ではすでに通知はどこにも存在しません。

  3. デスクトップ上の通知を一定時間無視すると、OS は通知を自動的にアクションセンターに格納します。このとき TimedOut になります。アクションセンターからは自動では消えません。

Windows での挙動

None

  • Show() を呼ぶ → 通知がデスクトップ上に現れ、Shown になる

Shown

通知はデスクトップ上に表示されている image

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

Activated

通知はデスクトップ上にもアクションセンター上にも存在しない

UserCanceled かつ、通知はアクションセンター上に格納されている

image

  • 通知をクリックする → 通知は消え、UserCanceled のまま
  • 通知の「×」ボタンをクリックする → 通知は消え、UserCanceled のまま
  • 通知のアクションボタンをクリックする → 通知は消え、Activated になる
  • ToastNotification::Hide() を呼ぶ → OpenSiv3D では未規定(Windows では何も起こらない)
  • ToastNotification::Clear() を呼ぶ → 通知は消え、ApplicationHidden になる

TimedOut

通知はアクションセンター上に格納されている (UserCanceled と見た目は同じ) image

  • 通知をクリックする → 通知は消え、この次の状態は OpenSiv3D では未規定(Windows 版では変わらず)
  • 通知の「×」ボタンをクリックする → 通知は消え、UserCanceled になる
  • 通知のアクションボタンをクリックする → 通知は消え、Activated になる
  • ToastNotification::Hide() を呼ぶ → OpenSiv3D では未規定(Windows では何も起こらない)
  • ToastNotification::Clear() を呼ぶ → 通知は消え、ApplicationHidden になる

ApplicationHidden

通知はデスクトップ上にもアクションセンター上にも存在しない


  • Shown 状態での通知クリックは Activated を作りますが、アクションセンター上でのアクションボタン以外のクリックは Activate をもたらしません。 -「未規定」の部分は、実装の余裕を持たせるためプラットフォーム依存にしています。

Reputeless avatar Jan 30 '20 08:01 Reputeless