XGetDeviceFocus(3) 拡張入力デバイスのフォーカスを制御する

Other Alias

XSetDeviceFocus

書式

XSetDeviceFocus(display, device, focus, revert_to, time)

      Display *display;

      Display *device;

      Window focus;

      int revert_to

      Time time

XGetDeviceFocus(display, device, focus_return, revert_to_return, time_return)

      Display *display;

      Display *device;

      Window *focus_return;

      int *revert_to_return;

      int *time_return;

引き数

display
X サーバへの接続を指定する。
device
フォーカスの問い合わせや変更を行なうデバイスを指定する。
focus
ウィンドウ、 PointerRoot, FollowKeyboard, None のいずれかを指定する。
focus_return
フォーカスウィンドウ、 PointerRoot, FollowKeyboard, None のいずれかが返される。
revert_to
ウィンドウが表示不能になった時入力フォーカスがどこに戻るかを指定する。 RevertToParent, RevertToPointerRoot, RevertToFollowKeyboard, RevertToNone のいずれかを指定できる。
revert_to_return
現在のフォーカスの状態が RevertToParent, RevertToPointerRoot, RevertToFollowKeyboard, RevertToNone のいずれかで返される。
time_return
デバイスの last_focus_time が返される。
time
時間を指定する。 タイムスタンプか CurrentTime を渡すことができる。

説明

XSetDeviceFocus リクエストは指定したデバイスのフォーカスと最終フォーカス変更時間 (last-focus-change time)を変更する。 指定した時間が現在の最終フォーカス変更時間よりも早い場合や、現在の X サーバの時間より遅い場合には何も行われない。 CurrentTime is replaced by the current X server time). そうでない場合は、最終フォーカス変更時間は指定した時間に設定され、 CurrentTime は現在の X サーバの時間に置き換えられる。 XSetDeviceFocus は X サーバに DeviceFocusIn イベントと DeviceFocusOut イベントを生成させる。

focus 引き数に従って、以下の動作が起こる。

  • focus が None の場合、全てのデバイスイベントは新しいフォーカスウィンドウが設定 されるまで破棄され、引き数 revert_to は無視される。
  • focus がウィンドウの場合、これがデバイスのフォーカスウィンドウとなる。 生成されたデバイスイベントは通常はこのウィンドウかその下位ウィンドウに 通知された場合には、イベントは通常通りに通知される。 そうでない場合、イベントはフォーカスウィンドウに関して通知される。
  • focus が PointerRoot, の場合、指定したデバイスから各イベントが通知された時にポインタがある、 任意のスクリーンのルートウィンドウが動的にフォーカスウィンドウになる。 この場合、引き数 revert_to は無視される。
  • focus が FollowKeyboard の場合、それぞれの入力イベントの際に X のキーボードフォーカスが設定されている ウィンドウが動的にフォーカスウィンドウになる。

指定したフォーカスウィンドウは XSetDeviceFocus が呼び出されたときに表示可能でなければならない。そうでなければエラー BadMatch となる。 フォーカスウィンドウが後から表示可能でなくなった場合、X サーバは引き数 revert_to を評価して以下のように新しいフォーカスウィンドウを決定する。

  • revert_to が RevertToParent の場合、フォーカスは親ウィンドウ(あるいは最も近い表示可能な 先祖ウィンドウ)に戻り、新しい revert_to の値は RevertToNone となる。
  • revert_to が RevertToPointerRoot の場合、フォーカスは PointerRoot に戻る。 同様に RevertToFollowKeyboard の場合は FollowKeyboard に、 RevertToNone の場合は None に戻る。

フォーカスが戻った場合、X サーバは DeviceFocusIn イベントと DeviceFocusOut を生成するが、最終フォーカス変更時間は影響を受けない。

入力拡張デバイスは必ずしもフォーカスされる機能に対応する必要はない。 このリクエストに対応していないデバイスにフォーカスを設定しようと すると BadMatch エラーとなる。 あるデバイスがこのリクエストに対応しているかどうかは XOpenDevice が返す情報によって知ることができる。 フォーカスに対応しているデバイスに対しては、XOpenDevice は input_class フィールドが定数 FocusClass (これは XI.h 内で 定義されている)である XInputClassInfo 構造体を返す。

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

XGetDeviceFocus リクエストはフォーカスウィンドウとその現在のフォーカス状態を返す。

全ての入力拡張デバイスがフォーカス可能であるわけではない。フォーカスす ることができないデバイスのフォーカス状態を問い合わせようとすると、 BadMatch エラーとなる。フォーカスすることができるデバイスは、 XOpenDevice リクエストが行われた時の入力クラスフォーカスの情報を 返す。

XGetDeviceFocus はエラー BadDevice, BadMatch を起こすことがある。

返り値

BadDevice
不正なデバイスが指定された。指定したデバイスが存在しないか、クライアン トが XOpenInputDevice でオープンしていない。このエラーは、指定し たデバイスが X のキーボードデバイスや X のポインタデバイスであった時に も起こる。
BadValue
指定された数値に、リクエストの許容範囲を越えているものがある。引き数に対 して特定の範囲が指定されていなければ、引き数の型で定義されている全ての範 囲が許される。選択肢として定義されている引き数はこのエラーを起こすことが ある。
BadWindow
引き数 Window の値が定義されている Window を指していない。
BadMatch
このエラーは、 XGetDeviceFocusリクエスト か XSetDeviceFocus リクエストにサーバの実装によりフォーカスができないデバイスを指定したし た場合に起こる。