aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/wlr/types/wlr_xdg_shell.h11
-rw-r--r--types/xdg_shell/wlr_xdg_shell.c2
-rw-r--r--types/xdg_shell/wlr_xdg_toplevel.c14
3 files changed, 24 insertions, 3 deletions
diff --git a/include/wlr/types/wlr_xdg_shell.h b/include/wlr/types/wlr_xdg_shell.h
index ac2e097d..9cae226c 100644
--- a/include/wlr/types/wlr_xdg_shell.h
+++ b/include/wlr/types/wlr_xdg_shell.h
@@ -127,7 +127,7 @@ enum wlr_xdg_surface_role {
};
struct wlr_xdg_toplevel_state {
- bool maximized, fullscreen, resizing, activated;
+ bool maximized, fullscreen, resizing, activated, suspended;
uint32_t tiled; // enum wlr_edges
int32_t width, height;
int32_t max_width, max_height;
@@ -148,7 +148,7 @@ enum wlr_xdg_toplevel_configure_field {
struct wlr_xdg_toplevel_configure {
uint32_t fields; // enum wlr_xdg_toplevel_configure_field
- bool maximized, fullscreen, resizing, activated;
+ bool maximized, fullscreen, resizing, activated, suspended;
uint32_t tiled; // enum wlr_edges
int32_t width, height;
struct {
@@ -384,6 +384,13 @@ uint32_t wlr_xdg_toplevel_set_wm_capabilities(struct wlr_xdg_toplevel *toplevel,
uint32_t caps);
/**
+ * Request that this toplevel consider itself suspended or not
+ * suspended. Returns the associated configure serial.
+ */
+uint32_t wlr_xdg_toplevel_set_suspended(struct wlr_xdg_toplevel *toplevel,
+ bool suspended);
+
+/**
* Request that this toplevel closes.
*/
void wlr_xdg_toplevel_send_close(struct wlr_xdg_toplevel *toplevel);
diff --git a/types/xdg_shell/wlr_xdg_shell.c b/types/xdg_shell/wlr_xdg_shell.c
index 70b777dd..3e8985d3 100644
--- a/types/xdg_shell/wlr_xdg_shell.c
+++ b/types/xdg_shell/wlr_xdg_shell.c
@@ -2,7 +2,7 @@
#include <stdlib.h>
#include "types/wlr_xdg_shell.h"
-#define WM_BASE_VERSION 5
+#define WM_BASE_VERSION 6
static const struct xdg_wm_base_interface xdg_shell_impl;
diff --git a/types/xdg_shell/wlr_xdg_toplevel.c b/types/xdg_shell/wlr_xdg_toplevel.c
index cc3a31c3..1e5617a7 100644
--- a/types/xdg_shell/wlr_xdg_toplevel.c
+++ b/types/xdg_shell/wlr_xdg_toplevel.c
@@ -14,6 +14,7 @@ void handle_xdg_toplevel_ack_configure(
toplevel->pending.resizing = configure->resizing;
toplevel->pending.activated = configure->activated;
toplevel->pending.tiled = configure->tiled;
+ toplevel->pending.suspended = configure->suspended;
toplevel->pending.width = configure->width;
toplevel->pending.height = configure->height;
@@ -99,6 +100,11 @@ struct wlr_xdg_toplevel_configure *send_xdg_toplevel_configure(
states[nstates++] = XDG_TOPLEVEL_STATE_MAXIMIZED;
}
}
+
+ if (configure->suspended &&
+ version >= XDG_TOPLEVEL_STATE_SUSPENDED_SINCE_VERSION) {
+ states[nstates++] = XDG_TOPLEVEL_STATE_SUSPENDED;
+ }
assert(nstates <= sizeof(states) / sizeof(states[0]));
int32_t width = configure->width;
@@ -617,3 +623,11 @@ uint32_t wlr_xdg_toplevel_set_wm_capabilities(struct wlr_xdg_toplevel *toplevel,
toplevel->scheduled.wm_capabilities = caps;
return wlr_xdg_surface_schedule_configure(toplevel->base);
}
+
+uint32_t wlr_xdg_toplevel_set_suspended(struct wlr_xdg_toplevel *toplevel,
+ bool suspended) {
+ assert(toplevel->base->client->shell->version >=
+ XDG_TOPLEVEL_STATE_SUSPENDED_SINCE_VERSION);
+ toplevel->scheduled.suspended = suspended;
+ return wlr_xdg_surface_schedule_configure(toplevel->base);
+}