ディスプレイ | |
wl_display_connect | Wayland ディスプレイに接続 |
---|---|
wl_display_connect_to_fd | fd からディスプレイ接続 |
wl_display_disconnect | ディスプレイの接続を閉じる |
wl_display_get_fd | ディスプレイに関連付けられた fd を取得 |
エラー | |
wl_display_get_error | ディスプレイ上で最後に発生したエラーを取得 |
wl_display_get_protocol_error | プロトコルエラーの情報を取得 |
リクエスト | |
wl_display_flush | クライアントバッファ内のリクエストをサーバーに送る |
wl_display_roundtrip | サーバーがすべてのリクエストを処理するまで待つ |
wl_display_roundtrip_queue | サーバーがすべてのリクエストを処理するまで待つ (キュー指定) |
イベント | |
wl_display_dispatch | イベントのディスパッチ |
wl_display_dispatch_pending | イベントのディスパッチ (ブロックなし) |
wl_display_dispatch_queue | イベントのディスパッチ (キュー指定) |
wl_display_dispatch_queue_pending | イベントのディスパッチ (キュー指定、ブロックなし) |
wl_display_create_queue | 新しいイベントキューを作成 |
wl_display_prepare_read_queue | イベントを読み込む準備をする |
wl_display_prepare_read | イベントを読み込む準備をする (デフォルトキュー) |
wl_display_cancel_read | イベントの読み込み準備を取り消す |
wl_display_read_events | イベント読み込み |
ディスプレイ
struct wl_display *wl_display_connect(const char *name);
Wayland ディスプレイに接続
name
ディスプレイの名前。
NULL の場合は、環境変数 WAYLAND_DISPLAY の名前が使われる。
環境変数が設定されていない場合は、"wayland-0"。
NULL の場合は、環境変数 WAYLAND_DISPLAY の名前が使われる。
環境変数が設定されていない場合は、"wayland-0"。
戻り値
NULL で失敗。
struct wl_display *wl_display_connect_to_fd(int fd);
すでに開いているファイルディスクリプタに Wayland ディスプレイを接続。
成功した場合は、fd の所有権を取得し、ディスプレイが破棄された時は、自動的に fd が閉じられる。
この関数が失敗した場合、fd は閉じられる。
成功した場合は、fd の所有権を取得し、ディスプレイが破棄された時は、自動的に fd が閉じられる。
この関数が失敗した場合、fd は閉じられる。
戻り値
NULL で失敗。
エラー
int wl_display_get_error(struct wl_display *display);
ディスプレイ上で最後に発生したエラー (サーバーまたはクライアント上で発生したもの) を返す。
戻り値
エラーコード。0 でエラーなし。
uint32_t wl_display_get_protocol_error(struct wl_display *display, const struct wl_interface **interface, uint32_t *id);
プロトコルエラーの情報を取得する。
int err = wl_display_get_error(display); if (err == EPROTO) { code = wl_display_get_protocol_error(display, &interface, &id); handle_error(code, interface, id); }
interface
NULL 以外で、エラーのあったインターフェイスのポインタを取得。
id
NULL 以外で、オブジェクト ID を取得。
オブジェクト ID が不明の場合は、0 を返す。
この関数の実行時点で、そのオブジェクトが存在しているという保証はない。
オブジェクト ID が不明の場合は、0 を返す。
この関数の実行時点で、そのオブジェクトが存在しているという保証はない。
戻り値
エラーコード
リクエスト
int wl_display_flush(struct wl_display *display);
クライアントのバッファ内にある、すべてのリクエストデータを、サーバーに送信する。
クライアントがイベントを読み込む前に、常にこの関数を呼び出すべき。
一回でできるだけ多くのデータを書き込もうとするが、すべてのデータを書き込めなかった場合は -1 が返り、errno は EAGAIN になる。
クライアントがイベントを読み込む前に、常にこの関数を呼び出すべき。
一回でできるだけ多くのデータを書き込もうとするが、すべてのデータを書き込めなかった場合は -1 が返り、errno は EAGAIN になる。
戻り値
サーバーに送信されたバイト数。失敗時は -1。
int wl_display_roundtrip(struct wl_display *display);
サーバーが、現在発行されているすべてのリクエストの処理を完了するまで、ブロックする。
デフォルトのキューが対象となる。
この関数は、wl_display_dispatch_queue() を内部で使用する。
スレッドがイベントを読み込む準備をしている間は、この関数を呼び出すことはできない。それを行うと、デッドロックが発生する。
デフォルトのキューが対象となる。
この関数は、wl_display_dispatch_queue() を内部で使用する。
スレッドがイベントを読み込む準備をしている間は、この関数を呼び出すことはできない。それを行うと、デッドロックが発生する。
戻り値
成功した場合、ディスパッチされたイベントの数。失敗時は -1。
int wl_display_roundtrip_queue(struct wl_display *display, struct wl_event_queue *queue);
wl_display_roundtrip() のキュー指定版。
※指定キュー以外のイベントもディスパッチされる場合がある。
※指定キュー以外のイベントもディスパッチされる場合がある。
戻り値
成功した場合、ディスパッチされたイベントの数。失敗時は -1。
イベント
int wl_display_dispatch(struct wl_display *display);
デフォルトのイベントキューで、イベントをディスパッチする。
(サーバーから送られてきたイベントを、クライアント側で処理できるように、コールバック関数などを実行する)。
キューが空の場合は、イベントが発生するまで待つ。
マルチスレッドでは、この関数を呼び出す前に、poll() などの関数を手動で使わないこと。デッドロックが発生する可能性がある。
この関数は、正しいスレッドにディスパッチする限り、スレッドセーフである。
また、wl_display_prepare_read_queue() と互換性があり、同等の機能を内部で使用する。
prepare_read で準備している間は、この関数を呼び出すことはできない (使うと、デッドロックが発生する)。
※キューにイベントがあるかどうかを確認することはできない。
(サーバーから送られてきたイベントを、クライアント側で処理できるように、コールバック関数などを実行する)。
キューが空の場合は、イベントが発生するまで待つ。
マルチスレッドでは、この関数を呼び出す前に、poll() などの関数を手動で使わないこと。デッドロックが発生する可能性がある。
この関数は、正しいスレッドにディスパッチする限り、スレッドセーフである。
また、wl_display_prepare_read_queue() と互換性があり、同等の機能を内部で使用する。
prepare_read で準備している間は、この関数を呼び出すことはできない (使うと、デッドロックが発生する)。
※キューにイベントがあるかどうかを確認することはできない。
戻り値
ディスパッチされたイベントの数。
失敗時は -1 となり、errno が設定される。
失敗時は -1 となり、errno が設定される。
int wl_display_dispatch_pending(struct wl_display *display);
wl_display_dispatch() と同等だが、キューが空の場合は、ブロックせずに 0 を返す。
戻り値
ディスパッチされたイベントの数。失敗時は -1。
int wl_display_dispatch_queue(struct wl_display *display, struct wl_event_queue *queue);
wl_display_dispatch() のキュー指定版。
※Wayland 1.5 以降、ディスプレイには、独自のイベント (delete_id 用) の余分なキューがあり、このキューは常にディスパッチされる。
そのため、指定キューがディスパッチされていなくても、0 以外の値を返す場合がある。
※Wayland 1.5 以降、ディスプレイには、独自のイベント (delete_id 用) の余分なキューがあり、このキューは常にディスパッチされる。
そのため、指定キューがディスパッチされていなくても、0 以外の値を返す場合がある。
戻り値
ディスパッチされたイベントの数。
失敗時は -1。errno が設定される。
失敗時は -1。errno が設定される。
int wl_display_dispatch_queue_pending(struct wl_display *display, struct wl_event_queue *queue);
wl_display_dispatch_queue() と同等だが、キューが空の場合は、ブロックせずにすぐ戻る。
ver 1.0.2
ver 1.0.2
戻り値
ディスパッチされたイベントの数。失敗時は -1。
struct wl_event_queue *wl_display_create_queue(struct wl_display *display);
新しいイベントキューを作成する。
戻り値
作成されたキュー。NULL で失敗。
int wl_display_prepare_read_queue(struct wl_display *display, struct wl_event_queue *queue);
wl_display_read_events() でイベントを読み込む前に、この関数を呼び出す必要がある。
実行すると、呼び出し元のスレッドで、イベントを読み込むという意思が通知される。
スレッドの読み込み準備が完了した後、wl_display_read_events() が呼び出されるまでの間、他のスレッドは fd から読み込むことができない。
この関数は、キューが空の場合、失敗する。
この関数を使った後は、wl_display_read_events() でイベントを読み込むか、wl_display_cancel_read() で読み込みをキャンセルする必要がある。
▼ 使用例
実行すると、呼び出し元のスレッドで、イベントを読み込むという意思が通知される。
スレッドの読み込み準備が完了した後、wl_display_read_events() が呼び出されるまでの間、他のスレッドは fd から読み込むことができない。
この関数は、キューが空の場合、失敗する。
この関数を使った後は、wl_display_read_events() でイベントを読み込むか、wl_display_cancel_read() で読み込みをキャンセルする必要がある。
▼ 使用例
while(wl_display_prepare_read_queue(display, queue) != 0) wl_display_dispatch_queue_pending(display, queue); wl_display_flush(display); ret = poll(fds, nfds, -1); if(has_error(ret)) wl_display_cancel_read(display); else wl_display_read_events(display); wl_display_dispatch_queue_pending(display, queue);
戻り値
0 で成功、-1 でイベントキューは空でない
int wl_display_prepare_read(struct wl_display *display);
wl_display_prepare_read_queue() と同等だが、デフォルトキューを使う。