XAllowDeviceEvents(3) キューに入っているイベントを解放する

書式

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度凍結された場合、SyncAll は両方の凍結を解除する。これ に続く SyncAll に対する凍結は、それぞれのデバイスを1度だけ凍結す る。
AsyncAll
全てのデバイスがクライアントによって凍結されている場合、全てのイベント 処理は通常通り継続される。複数の異なるグラブのためにクライアントが複数 回デバイスを凍結した場合、AsyncAll は全ての凍結を解除する。全て のデバイスがクライアントによって凍結されていない限り、AsyncAll は無効である。

AsyncThisDevice, SyncThisDevice, ReplayThisDevice は、残りのデバイスから受け取ったイベントの処理については影響を及ぼさな い。 AsyncOtherDevices は指定したデバイスから受け取ったイベントの処理 には影響を及ぼさない。 event_mode が SyncAll あるいは AsyncAll ならば、デバイスのパラメータは無視される。

1つあるいは複数のクライアントは、いくつかの異なるデバイスのグラブを同 時にアクティブにすることができる。デバイスがなんらかのグラブのために凍 結された場合、そのデバイスに対するイベント処理は全く行われない。 複数のグラブによって単一のデバイスを凍結することができる。 この場合、イベントが再び処理できるようになる前に、各グラブのために凍結 が解除されなければならない。

XAllowDeviceEvents はエラー BadDevice, BadValue を起こすことがある。

返り値

BadDevice
不正なデバイスが指定された。指定したデバイスが存在しないか、クライアン トが XOpenInputDevice でデバイスをオープンしていない。指定したデ バイスが X のキーボードデバイスや X のポインタデバイスである場合にも、 このエラーが起こる。
BadValue
リクエストで不正なモードが指定された。