aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/wlr/types/wlr_xdg_shell_v6.h2
-rw-r--r--types/wlr_xdg_shell_v6.c40
2 files changed, 17 insertions, 25 deletions
diff --git a/include/wlr/types/wlr_xdg_shell_v6.h b/include/wlr/types/wlr_xdg_shell_v6.h
index f57dde10..5183abd5 100644
--- a/include/wlr/types/wlr_xdg_shell_v6.h
+++ b/include/wlr/types/wlr_xdg_shell_v6.h
@@ -63,7 +63,7 @@ struct wlr_xdg_toplevel_v6 {
struct wlr_xdg_surface_v6_configure {
struct wl_list link; // wlr_xdg_surface_v6::configure_list
uint32_t serial;
- struct wlr_xdg_toplevel_v6_state *state;
+ struct wlr_xdg_toplevel_v6_state state;
};
struct wlr_xdg_surface_v6 {
diff --git a/types/wlr_xdg_shell_v6.c b/types/wlr_xdg_shell_v6.c
index 3e0aeac4..f09cba8f 100644
--- a/types/wlr_xdg_shell_v6.c
+++ b/types/wlr_xdg_shell_v6.c
@@ -260,27 +260,13 @@ static void xdg_surface_get_popup(struct wl_client *client,
wlr_log(L_DEBUG, "TODO xdg surface get popup");
}
-static void copy_toplevel_state(struct wlr_xdg_toplevel_v6_state *src,
- struct wlr_xdg_toplevel_v6_state *dest) {
- dest->width = src->width;
- dest->height = src->height;
-
- dest->max_width = src->max_width;
- dest->max_height = src->max_height;
- dest->min_width = src->min_width;
- dest->min_height = src->min_height;
-
- dest->fullscreen = src->fullscreen;
- dest->resizing = src->resizing;
- dest->activated = src->activated;
- dest->maximized = src->maximized;
-}
-
static void wlr_xdg_toplevel_v6_ack_configure(
struct wlr_xdg_surface_v6 *surface,
struct wlr_xdg_surface_v6_configure *configure) {
assert(surface->role == WLR_XDG_SURFACE_V6_ROLE_TOPLEVEL);
- copy_toplevel_state(configure->state, &surface->toplevel_state->next);
+ surface->toplevel_state->next = configure->state;
+ surface->toplevel_state->pending.width = 0;
+ surface->toplevel_state->pending.height = 0;
}
static void xdg_surface_ack_configure(struct wl_client *client,
@@ -347,6 +333,7 @@ static void xdg_surface_set_window_geometry(struct wl_client *client,
surface->next_geometry->width = width;
surface->next_geometry->x = x;
surface->next_geometry->y = y;
+
}
static const struct zxdg_surface_v6_interface zxdg_surface_v6_implementation = {
@@ -397,7 +384,7 @@ static void wlr_xdg_toplevel_v6_send_configure(
uint32_t *s;
struct wl_array states;
- configure->state = &surface->toplevel_state->pending;
+ configure->state = surface->toplevel_state->pending;
wl_array_init(&states);
if (surface->toplevel_state->pending.maximized) {
@@ -417,10 +404,16 @@ static void wlr_xdg_toplevel_v6_send_configure(
*s = ZXDG_TOPLEVEL_V6_STATE_ACTIVATED;
}
- zxdg_toplevel_v6_send_configure(surface->toplevel_state->resource,
- surface->toplevel_state->pending.width,
- surface->toplevel_state->pending.height,
- &states);
+ uint32_t width = surface->toplevel_state->pending.width;
+ uint32_t height = surface->toplevel_state->pending.height;
+
+ if (width == 0 || height == 0) {
+ width = surface->geometry->width;
+ height = surface->geometry->height;
+ }
+
+ zxdg_toplevel_v6_send_configure(surface->toplevel_state->resource, width,
+ height, &states);
wl_array_release(&states);
}
@@ -506,8 +499,7 @@ static void wlr_xdg_surface_v6_toplevel_committed(
// TODO: error if they try to resize a maximized or fullscreen window
- copy_toplevel_state(&surface->toplevel_state->next,
- &surface->toplevel_state->current);
+ surface->toplevel_state->current = surface->toplevel_state->next;
}
static void handle_wlr_surface_committed(struct wl_listener *listener,