XGrabDeviceButton(display, device, button, modifiers, modifier_device, grab_window, owner_events, event_count, event_list, this_device_mode, other_devices_mode) Display *display; XDevice *device; unsigned int button; unsigned int modifiers; XDevice *modifier_device; Window grab_window; Bool owner_events; unsigned int event_count; XEventClass *event_list; int this_device_mode, other_devices_mode; XUngrabDeviceButton(display, device, button, modifiers, modifier_device, grab_window) Display *display; XDevice *device; unsigned int button; unsigned int modifiers; XDevice *modifier_device; Window grab_window;
残りの引き数の解釈は、XGrabDevice と同じである。 デバイスの全てのボタンが論理的に離された状態になったとき、アクティブな グラブは自動的に終了する。
デバイスのイベント処理が凍結されている場合、デバイスの論理的な状態(ク ライアントアプリケーションが見る)と物理的な状態の間にはずれがあるかも しれない点に注意すること。
このリクエストは、同じクライアントによる同じウィンドウの同じボタン/モ ディファイアの組合せに対する以前のグラブを上書きする。 モディファイアに AnyModifier を指定することは、可能なモディファ イアの組合せ全てに対してグラブリクエストを発行すること(モディファイア がない組合せも含む)と等価である。 指定された全てのモディファイアに対して、その時点で KeyCode が割り当て てられている必要は必ずしもない。 ボタンに AnyButton を指定することは、可能なボタン全ての組合せに 対してリクエストを発行することと等価である。 指定されたボタンがその時点で物理的なボタンに割り当てられている必要はな い。
値が NULL である modifier_device は、X のキーボードを modifier_device として使うことを指定する。
他のクライアントが、既に同じウィンドウ上で同じボタン/モディファイアの 組合せに対して XGrabDeviceButton を発行していた場合は、エラー BadAccess となる。 AnyModifier あるいは AnyButton を用いた場合、互いに干渉する組合せが1つでもあれば、リクエストは完全に 失敗し、エラー BadAccess となる(いかなるグラブも確立されない)。 XGrabDeviceButton はアクティブなグラブに対しては無効である。
XGrabDeviceButton はエラー BadClass, BadDevice, BadMatch, BadValue, BadWindow を起こすことがある。 XUngrabDeviceButton リクエストは、指定したウィンドウ上のボタン/モディファイアの組合せに対 して、このクライアントがその組合せをパッシブにグラブしていたならば、こ れを解放する。 モディファイアに AnyModifier を指定することは、可能であるモディ ファイアの組合せの全てに対してグラブ解放のリクエストを発行することと等 価である。この組合せは、モディファイアがない組合せも含む。 ボタンに AnyButton を指定することは、可能であるボタンの組合せの 全てに対してリクエストを送ることと等価である。 XUngrabDeviceButton はアクティブなグラブに対しては無効である。
値が NULL である modifier_device は、modifier_device として X のキーボー ドを使うことを指定する。
XUngrabDeviceButton は、エラー BadDevice, BadMatch, BadValue BadWindow を起こすことがある。