[wayland_libdecor_egl] fill in some docs references

main
Allen Webster 2026-02-20 15:03:53 -08:00
parent b116b0ffd7
commit c33bbb7246
1 changed files with 42 additions and 30 deletions

View File

@ -7,12 +7,10 @@ exit 0
/*
** Reading From:
** (1) Wayland Docs https://wayland.freedesktop.org/docs/html/
** (2) XDG shell Docs https://wayland.app/protocols/xdg-shell#xdg_wm_base
** (egl) EGL spec https://registry.khronos.org/EGL/sdk/docs/man/
** (libdecor.h) /usr/include/libdecor-0/libdecor.h
**
** (nodocs-wl_egl) I cannot find any documentation for wl_egl_ except for
** headers and example code.
** (nodocs-libdecor) not officially documented, deductions from reading
** headers and example code.
*/
@ -96,7 +94,7 @@ const struct wl_registry_listener wl_registry_listener = {
};
/* (nodocs) */
/* (libdecor.h) libdecor_interface::error " An error event " */
static void
libdecorevent__error(struct libdecor *libdecor, enum libdecor_error error,
const char *msg){}
@ -108,8 +106,8 @@ struct libdecor_interface libdecor_interface = {
/* (libdecor.h) libdecor_frame_interface::configure
** " A new configuration was received. An application should respond to
** this by creating a suitable libdecor_state, and apply it using
** libdecor_frame_commit. "
** this by creating a suitable libdecor_state, and apply it using
** libdecor_frame_commit. "
*/
static void
libdecorevent__frame_configure(struct libdecor_frame *frame,
@ -117,10 +115,12 @@ libdecorevent__frame_configure(struct libdecor_frame *frame,
void *udata){
int w = ctx.w;
int h = ctx.h;
/* (nodocs) */
/* (libdecor.h)
** " Get the expected size of the content for this configuration. "
*/
if (libdecor_configuration_get_content_size(config, frame, &w, &h)){
/* (nodocs) */
/* (libdecor.h) " Create a new content surface state. " */
struct libdecor_state *state = libdecor_state_new(w, h);
/* (libdecor.h) libdecor_frame_commit
@ -131,7 +131,7 @@ libdecorevent__frame_configure(struct libdecor_frame *frame,
*/
libdecor_frame_commit(frame, state, config);
/* (nodocs) */
/* (libdecor.h) " Free a content surface state. " */
libdecor_state_free(state);
}
ctx.configured = 1;
@ -139,22 +139,41 @@ libdecorevent__frame_configure(struct libdecor_frame *frame,
ctx.h = h;
}
/* (nodocs) */
/* (libdecor.h) libdecor_frame_interface::close
** " The window was requested to be closed by the compositor. "
*/
static void
libdecorevent__frame_close(struct libdecor_frame *frame, void *udata){
ctx.close_signal = 1;
}
/* (nodocs) */
/* (libdecor.h) libdecor_frame_interface::commit
** " The window decoration asked to have the main surface to be
** committed. This is required when the decoration is implemented
** using synchronous subsurfaces. "
*/
static void
libdecorevent__frame_commit(struct libdecor_frame *frame, void *udata){
wl_surface_commit(ctx.wl_surface);
}
/* (libdecor.h) libdecor_frame_interface::dismiss_popup
** " Any mapped popup that has a grab on the given seat should be dismissed. "
*/
static void
libdecorevent__frame_dismiss_popup(){
}
/* (libdecor.h) libdecor_frame_interface::dismiss_popup
** " Any mapped popup that has a grab on the given seat should
** be dismissed. "
*/
struct libdecor_frame_interface libdecor_frame_interface = {
libdecorevent__frame_configure,
libdecorevent__frame_close,
libdecorevent__frame_commit,
libdecorevent__frame_dismiss_popup,
};
@ -203,7 +222,7 @@ int main(){
}
}
/* (nodocs) */
/* (libdecor.h) " Create a new libdecor context for the given wl_display " */
if (ctx.wl_display != 0 && ctx.wl_compositor != 0){
ctx.libdecor = libdecor_new(ctx.wl_display, &libdecor_interface);
}
@ -308,13 +327,13 @@ int main(){
}
if (ctx.wl_surface != 0){
/* (nodocs-libdecor) */
/* (libdecor.h) " Decorate the given content wl_surface. " */
ctx.libdecor_frame = libdecor_decorate(ctx.libdecor, ctx.wl_surface,
&libdecor_frame_interface, 0);
}
if (ctx.libdecor_frame != 0){
/* (nodocs-libdecor) */
/* (libdecor.h) " Set the title of the window. " */
libdecor_frame_set_title(ctx.libdecor_frame, "Example Window");
/* (libdecor.h) " This translates roughly to xdg_toplevel_set_min_size() "
@ -323,7 +342,7 @@ int main(){
*/
libdecor_frame_set_min_content_size(ctx.libdecor_frame, 80, 60);
/* (nodocs-libdecor) */
/* (libdecor.h) " Map the window. " */
libdecor_frame_map(ctx.libdecor_frame);
/* (nodocs-wl_egl) */
@ -398,25 +417,18 @@ int main(){
}
}
/* (egl) eglSwapBuffers
**~ NOTE: swap before loop for libdecor_dispatch (nodocs-libdecor)
*/
EGLBoolean initial_swap_success = 0;
if (swap_interval_success){
initial_swap_success = eglSwapBuffers(ctx.egl_display, ctx.egl_surface);
if (!initial_swap_success){
printf("eglSwapBuffers failed\n");
}
}
/*~ NOTE: Main loop */
int exit_loop = 0;
if (!initial_swap_success){
if (!swap_interval_success){
exit_loop = 1;
}
for (;!exit_loop;){
/* (nodocs-libdecor) */
libdecor_dispatch(ctx.libdecor, -1);
/* (libdecor.h)
** " Dispatch events. This function should be called when data is available on
** the file descriptor returned by libdecor_get_fd(). If timeout is zero, this
** function will never block. "
*/
libdecor_dispatch(ctx.libdecor, 0);
if (ctx.close_signal){
exit_loop = 1;