XSetDeviceFocus(3X11)

名前
XSetDeviceFocus, XGetDeviceFocus - 拡張入力デバイスのフォーカスを制御

書式
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 リクエストにサーバの実装によりフォーカスができないデバイスを指定したし た場合に起こる。

関連項目
Programming with Xlib