client-protocol [1]

wl_display
struct wl_display_listenerハンドラ構造体
wl_display_add_listenerハンドラの設定
wl_display_set_user_dataユーザー定義値をセット
wl_display_get_user_dataユーザー定義値を取得
wl_display_syncイベントの同期
wl_display_get_registrywl_registry を作成
wl_registry
struct wl_registry_listenerハンドラ構造体
wl_registry_add_listenerハンドラ設定
wl_registry_bindバインドする
wl_registry_destroy破棄
wl_buffer
struct wl_buffer_listenerハンドラ構造体
wl_buffer_add_listenerハンドラ設定
wl_buffer_destroy破棄
wl_callback
struct wl_callback_listenerハンドラ構造体
wl_callback_add_listenerハンドラ設定
wl_callback_destroy破棄
<name>_get_user_data() と <name>_set_user_data() は、各々で載せてはいないが、すべてのオブジェクトで使用できる。
wl_display
struct wl_display_listener {
    void (*error)(void *data, struct wl_display *wl_display, void *object_id, uint32_t code, const char *message);
    void (*delete_id)(void *data, struct wl_display *wl_display, uint32_t id);
};
ハンドラ構造体
error
致命的なエラーが発生した時に実行される。
object_id : エラーが発生したオブジェクト。
code : 各インターフェイスごとのエラーコード。
message : エラーメッセージ。
delete_id
クライアントがオブジェクトを削除した時、サーバーはこのイベントを送信して、削除リクエストを受け取ったことを通知する。
このイベント後は、id のオブジェクト ID を安全に再利用できる。
int wl_display_add_listener(struct wl_display *wl_display,
    const struct wl_display_listener *listener, void *data);
ハンドラの設定
void wl_display_set_user_data(struct wl_display *wl_display, void *user_data);
ユーザー定義値をセット
void *wl_display_get_user_data(struct wl_display *wl_display);
ユーザー定義値を取得
struct wl_callback *wl_display_sync(struct wl_display *wl_display);
現時点で発行されている、すべてのイベントの処理が完了した時、wl_callback の done イベントを送信させる。

done イベントで渡される callback_data は、イベントシリアル値。
戻り値
実際にコールバックが発生した後は、この wl_callback はコンポジターによって破棄されるため、それ以降は、このポインタを使ってはならない。
struct wl_registry *wl_display_get_registry(struct wl_display *wl_display);
クライアントが、コンポジターから、利用可能なグローバルオブジェクトを一覧表示、およびバインドできるようにするための wl_registry を作成する。
wl_registry
struct wl_registry_listener {
    void (*global)(void *data, struct wl_registry *wl_registry, uint32_t name,
        const char *interface, uint32_t version);
    void (*global_remove)(void *data, struct wl_registry *wl_registry, uint32_t name);
};
ハンドラ構造体
global
グローバルオブジェクトが利用可能になった時
global_remove
グローバルオブジェクトが利用できない状態になった時。
name のオブジェクトをバインドしている場合は、オブジェクトを削除する必要がある。
int wl_registry_add_listener(struct wl_registry *wl_registry,
    const struct wl_registry_listener *listener, void *data);
ハンドラ設定
void *wl_registry_bind(struct wl_registry *wl_registry,
    uint32_t name, const struct wl_interface *interface, uint32_t version);
サーバーにバインドして、オブジェクトを作成する。
name
オブジェクトの数値識別子
interface
各インターフェースごとに定義されている、グローバル変数のポインタを渡す。
各ヘッダファイル内で、"<name>_interface" の名前で定義されている。

例えば、wl_seat なら、以下のように定義されている。
extern const struct wl_interface wl_seat_interface;
version
使用するバージョン。
クライアントが対応しているバージョンより高い値を指定しないこと。
void wl_registry_destroy(struct wl_registry *wl_registry);
破棄
wl_buffer
struct wl_buffer_listener {
    void (*release)(void *data, struct wl_buffer *wl_buffer);
};
ハンドラ構造体
wl_buffer
コンポジタが、描画時にバッファを解放した時。
wl_surface_commit() の後に、この wl_buffer がコンポジタで使用されなくなった時に送信される。
このコールバック後、wl_buffer は削除したりすることができる。

wl_surface_frame() のコールバックより前に release イベントが来た場合、コンポジタがコピーを保持しているので、wl_buffer は自由に使って良い。
int wl_buffer_add_listener(struct wl_buffer *wl_buffer,
    const struct wl_buffer_listener *listener, void *data);
ハンドラ設定
void wl_buffer_destroy(struct wl_buffer *wl_buffer);
破棄
wl_callback
struct wl_callback_listener {
    void (*done)(void *data, struct wl_callback *wl_callback, uint32_t callback_data);
};
ハンドラ構造体
done
各コールバック条件が達成された時
int wl_callback_add_listener(struct wl_callback *wl_callback,
    const struct wl_callback_listener *listener, void *data);
各処理ごとの条件が達成された時に実行される、コールバック関数をセットする。
void wl_callback_destroy(struct wl_callback *wl_callback);
破棄