XSetDeviceFocus(3XI) — NEWS-OS Programmer’s Manual
名称
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 リクエストは 指定デバイスのフォーカスおよび フォーカスを最後に変更した時刻を変更します。 フォーカスを最後に変更した時刻より早かったり、 現在の X サーバ時刻より遅かったりした場合、 その値は無視されます。 そのような場合には、 フォーカスの最終変更時刻が指定時刻となり、 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、 RevertToFollowKeyboard、 または RevertToNone の場合、 フォーカスはそれぞれ PointerRoot、 FollowKeyboard、または None に戻ります。
フォーカスが戻った場合、 X サーバは DeviceFocusIn および DeviceFocusOut イベントを生成します。 しかし、最終フォーカス変更時刻は影響されません。
入力拡張デバイスはフォーカスされる能力をサポートするために必要ありません。 このリクエストをサポートしないデバイスのフォーカス 設定しようとすると、BadMatch エラーとなります。 指定デバイスがこのリクエストを サポートできるかどうかは XOpenDevice が戻す情報にて決定されます。 フォーカスをサポートするデバイスに関して、 XOpenDevice は 定数 FocusClass (ファイル XI.h に定義)と 同等な input_class フィールドを持つ XInputClassInfo 構造体を返します。
XSetDeviceFocus は BadDevice、 BadMatch、 BadValue、 および BadWindow エラーを生成します。
XGetDeviceFocus リクエストはフォーカスウィンドウおよび現在のフォーカス状態を返します。
全ての入力拡張デバイスはフォーカスできません。 フォーカスできないデバイスのフォーカス状態を 要求しようとすると、BadMatch エラーとなります。 フォーカスできるデバイスは、 XOpenDevice リクエストが実行された場合に 入力 Class Focus に関する情報を返します。
XGetDeviceFocus は BadDevice、 および BadMatch エラーを生成します。
自己診断
BadDevice 無効デバイスが指定された。 指定デバイスが存在しない、 または XOpenInputDevice 経由にてクライアント からオープンされていない。 指定デバイスが X キーボードまたはX ポインタデバイスの場合、 このエラーが発生します。
BadValue いくつかの数値が、リクエストによって認められる範囲外である。 指定範囲が引数に対してでなければ、 引数のタイプで定義した範囲全てが認められます。 二者択一のセットで定義された引数の場合、 このエラーが発生します。
BadWindow Window 引数の値が定義ウィンドウに一致しない。
BadMatch サーバインプリメンテーションがフォーカスを 認めていないデバイスを指定することで、 XGetDeviceFocus または XSetDeviceFocus が実行される場合、このエラーが発生します。
関連事項
Programming with Xlib
NEWS-OSRelease 4.2.1R