XAllowDeviceEvents(3XI) — NEWS-OS Programmer’s Manual
名称
XAllowDeviceEvents − キューに入っているイベントを開放する
形式
XAllowDeviceEvents(display, device, event_mode, time)
Display ∗display;
XDevice ∗device;
int event_mode;
Time time;
引数
display X サーバとの接続を指定する。
device イベントを許可するデバイスを指定する。
event_mode イベントモードを指定する。 AsyncThisDevice、 SyncThisDevice、 ReplayThisDevice、 AsyncOtherDevices、 SyncAll または AsyncAll などを渡すことができる。
time 時刻を指定する。 タイムスタンプまたは CurrentTime を渡すことができる。
解説
クライアントがあるデバイスをフリーズしている場合、 XAllowDeviceEvents 関数はキューに入っているイベントを開放できます。 もし、 クライアントまたはデバイスに対する最新の有効なグラブの 最終グラブ時刻より指定時刻が早い場合や、 指定時刻が現在の X サーバの時刻より後では影響はありません。
event_mode 引数としてどの定数を渡すかによって、 以下の処理が行われます。
AsyncThisDevice
クライアントによって指定デバイスがフリーズされている場合、 そのデバイスに対するイベント処理は通常通り継続します。 複数のグラブのためにクライアントによってデバイスが 複数回フリーズされている場合、 AsyncThisDevice は全てを解除します。 クライアントによって指定デバイスがフリーズされておらず、 デバイスがクライントによってグラブされる必要がない場合、 AsyncThisDevice は何も影響を与えません。
SyncThisDevice
指定デバイスがすでにクライアントによってフリーズされ、 アクティブにグラブされている場合、 そのデバイスに対するイベント処理は 次にキーまたはボタンが押されたことがクライアントに 報告されるまで通常通りに継続します。 この時、指定デバイスは再度フリーズします。 ただし、報告されたイベントがグラブを開放する場合、 指定デバイスはフリーズしません。 もし、指定デバイスがクライアントによってフリーズ されていなかったり、グラブされていなかった場合、 SyncThisDevice は何も影響を与えません。
ReplayThisDevice
もし、指定デバイスがクライントによってアクティブにグラブされていたり、 イベントがクライアントに送られた結果 指定デバイスがフリーズされ ている場合 (GrabDeviceButton の実行から、または SyncThisDevice モード での前の AllowDeviceEvents 、ただし GrabDevice からではない)、 グラブは開放され、そのイベントは完全に再処理されます。 ただし、この時にはグラブが開放されたウィンドウ または、(ルートに向かって)その上のウィンドウに対するグラブをリクエスト は無視します。 指定デバイスがクライアントにグラブされていなかったり、 イベントの結果としてフリーズされていなかったとき、 リクエストは何も影響を与えません。
AsyncOtherDevices
指定した以外のデバイスがクライアントによって フリーズされた場合、 イベント処理は通常通り継続します。 複数回グラブのために クライアントによって複数回フリーズされた場合、 AsyncOtherDevices は "解除" を全てに対して実行します。 クライアントによってデバイスがフリーズされていない場合、 AsyncOtherDevices は何も影響を与えません。
SyncAll 全てのデバイスが指定されたクライアントによってフリーズされている場合、 次にボタンまたはキーイベントが デバイスをグラブしたクライアントに報告されるまで、 イベント処理(全てのデバイス)は通常通り継続します。 このとき全てのデバイスが再度フリーズします。 ただし、報告されたイベントがグラブを開放する場合、 デバイスはフリーズしません。 しかし、いずれかのデバイスがグラブされたままの場合には、 "次のイベント" は 全てのデバイスをフリーズします。 全てのデバイスがクライアントによってフリーズされていない限り、 SyncAll は何も影響を持ちません。 2 回のグラブのためにクライアントによって、 いずれかのデバイスが 2 回フリーズされた場合、 SyncAll は両方に対して解除を実行します。 SyncAll の結果として起こるフリーズでは デバイス毎に一回のフリーズを行います。
AsyncAll クライアントによって全てのデバイスがフリーズされている場合、 全デバイスに関するイベント処理は通常通り継続します。 複数のグラブのために、クライアントにより いずれかのデバイスに複数回のフリーズが行われている場合、 AsyncAll は全てに対して解除を実行します。 全てのデバイスがクライアントによってフリーズされていない限り、 AsyncAll は何も影響を与えません。
AsyncThisDevice、 SyncThisDevice および ReplayThisDevice は指定デバイス以外からのイベント処理に 何も影響を与えません。 AsyncOtherDevices は指定デバイスからのイベント処理に何も 影響を与えません。 イベントモードが SyncAll または AsyncAll の場合、そのデバイス パラメータは 無視されます。
異なるデバイスに対するいくつかのグラブが、 同時にアクティブである同一または複数のクライアントによって、 行われることがあります。 もし、グラブの途中でデバイスがフリーズした場合、 そのデバイスに対してはイベント処理が行われません。 また、複数のグラブにより単一のデバイスがフリーズされることがあります。 この場合、イベントが再度処理できるようになる前に、 各グラブのためにフリーズが開放されなければなりません。
XAllowDeviceEvents は BadDevice または BadValue エラーを生成します。
診断
BadDevice 無効デバイスが指定された。指定デバイスが存在しない、 または XOpenInputDevice を使って指定されたクライアントによって オープンされていない。 指定デバイスが X キーボードまたは X ポインタデバイスの場合にも、 このエラーが発生することがあります。
BadValue リクエストにて無効なモードが指定された。
関連事項
XGrabDevice(3XI)
Programming With Xlib
NEWS-OSRelease 4.2.1R