xdg-shell: add wlr_xdg_toplevel_configure()

A struct wlr_xdg_toplevel_configure is passed in with the whole
state. This makes it a lot clearer that the size and WM state are
always sent to the client.
This commit is contained in:
Simon Ser 2024-04-17 11:30:46 +02:00 committed by Kirill Primak
parent 8582b45c9e
commit 098cb9b7a3
2 changed files with 30 additions and 0 deletions

View File

@ -374,6 +374,12 @@ struct wlr_xdg_positioner *wlr_xdg_positioner_from_resource(
*/
void wlr_xdg_surface_ping(struct wlr_xdg_surface *surface);
/**
* Configure the toplevel. Returns the associated configure serial.
*/
uint32_t wlr_xdg_toplevel_configure(struct wlr_xdg_toplevel *toplevel,
const struct wlr_xdg_toplevel_configure *configure);
/**
* Request that this toplevel surface be the given size. Returns the associated
* configure serial.

View File

@ -545,6 +545,30 @@ void wlr_xdg_toplevel_send_close(struct wlr_xdg_toplevel *toplevel) {
xdg_toplevel_send_close(toplevel->resource);
}
uint32_t wlr_xdg_toplevel_configure(struct wlr_xdg_toplevel *toplevel,
const struct wlr_xdg_toplevel_configure *configure) {
toplevel->scheduled.width = configure->width;
toplevel->scheduled.height = configure->height;
toplevel->scheduled.maximized = configure->maximized;
toplevel->scheduled.fullscreen = configure->fullscreen;
toplevel->scheduled.resizing = configure->resizing;
toplevel->scheduled.activated = configure->activated;
toplevel->scheduled.suspended = configure->suspended;
toplevel->scheduled.tiled = configure->tiled;
if (configure->fields & WLR_XDG_TOPLEVEL_CONFIGURE_BOUNDS) {
toplevel->scheduled.fields |= WLR_XDG_TOPLEVEL_CONFIGURE_BOUNDS;
toplevel->scheduled.bounds = configure->bounds;
}
if (configure->fields & WLR_XDG_TOPLEVEL_CONFIGURE_WM_CAPABILITIES) {
toplevel->scheduled.fields |= WLR_XDG_TOPLEVEL_CONFIGURE_WM_CAPABILITIES;
toplevel->scheduled.wm_capabilities = configure->wm_capabilities;
}
return wlr_xdg_surface_schedule_configure(toplevel->base);
}
uint32_t wlr_xdg_toplevel_set_size(struct wlr_xdg_toplevel *toplevel,
int32_t width, int32_t height) {
assert(width >= 0 && height >= 0);