int XGrabDevice(display, device, grab_window, owner_events, event_count, event_list, this_device_mode, other_devices_mode, time) Display *display; XDevice *device; Window grab_window; Bool owner_events; int event_count; XEventClass *event_list; int this_device_mode, other_devices_mode; Time time; XUngrabDevice(display, device, time) Display *display; XDevice *device; Time time;
引き数 this_device_mode が GrabModeAsync ならば、デバイスイベントの処理は通常通り続けられる。 デバイスが現在このクライアントによって凍結されている場合は、その後にデ バイスイベントの処理が再開される。 引き数 this_device_mode が GrabModeSync ならば、デバイスの状態(クライアントアプリケーションから見たもの)は凍結 されていると考えられ、X サーバはそれ以降のデバイスイベントを生成しなく なる。これは、グラブを行っているクライアントが XAllowDeviceEvents の呼び出しによる解放を行うか、デバイスのグラブが解放されるまで続く。 デバイスが凍結されている間も、実際のデバイスの変化は失われない。後で処 理するために、X サーバは単にこれらの変化をキューに入れておく。
other_devices_mode が GrabModeAsync ならば、他のデバイスから受け取ったイベントの処理は、グラブのアクティブ 化による影響を受けない。 other_devices_mode が GrabModeSync ならば、グラブされているデバイスを除く全てのデバイスの状態(クライアン トアプリケーションから見たもの)は凍結されていると考えられ、X サーバは それ以降これらのデバイスからのイベントを生成しなくなる。 これは、グラブを行っているクライアントが XAllowDeviceEvents によって解放を行うか、デバイスのグラブが解放されるまで続く。 デバイスが凍結されている間も、実際のイベントは失われない。後で処理する ために、X サーバは単にこれらの変化をキューに入れておく。
他のクライアントがデバイスをアクティブにグラブしている場合、 XGrabDevice は失敗し、 AlreadyGrabbed を返す。 grab_window が表示可能でない場合もこの関数は失敗し、 GrabNotViewable を返す。 デバイスが他のクライアントのアクティブなグラブによって凍結されている場 合、この関数は失敗し GrabFrozen を返す。 指定された時刻が最終デバイスグラブ時刻よりも早い場合や、X サーバの現在 の時刻よりも遅い場合は、この関数は失敗し、 GrabInvalidTime を返す。 これら以外の場合には、最終デバイスグラブ時刻には指定された時刻がセット される( CurrentTime は X サーバの現在時刻に置き換えられる)。
クライアントによるアクティブがグラブが有効な状態で、このクライアントが このデバイスを閉じた場合、アクティブがグラブは解放される。デバイスが要 求しているクライアントのアクティブなグラブによって凍結されている場合、 凍結は解除される。
XGrabDevice は、エラー BadClass, BadDevice, BadValue, BadWindow を起こすことがある。
XUngrabDevice リクエストは、クライアントが XGrabDevice や XGrabDeviceKey を使ってデバイスをアクティブにグラブしていた場合、このデバイスとキュー に入っているイベントを解放する。 他のデバイスがこのグラブによって凍結されている場合、 XUngrabDevice は凍結を解除する。 指定した時刻が最終デバイスグラブ時刻より早い場合や、X サーバの現在時刻 よりも遅い場合には、 XUngrabDevice はデバイスやキューに入っているイベントを解放しない。 このリクエストは DeviceFocusIn イベントと DeviceFocusOut イベントを生成する。 デバイスのアクティブなグラブに対するイベントウィンドウが表示可能でなく なった場合、X サーバは自動的に UngrabDevice リクエストを出す。
XUngrabDevice はエラー BadDevice を起こすことがある。