diff options
Diffstat (limited to 'sway/desktop/xdg_shell_v6.c')
-rw-r--r-- | sway/desktop/xdg_shell_v6.c | 20 |
1 files changed, 17 insertions, 3 deletions
diff --git a/sway/desktop/xdg_shell_v6.c b/sway/desktop/xdg_shell_v6.c index e2a61ebf..8f1885c1 100644 --- a/sway/desktop/xdg_shell_v6.c +++ b/sway/desktop/xdg_shell_v6.c @@ -1,15 +1,21 @@ #define _POSIX_C_SOURCE 199309L +#include <stdbool.h> #include <stdlib.h> #include <wayland-server.h> #include <wlr/types/wlr_xdg_shell_v6.h> #include "sway/container.h" +#include "sway/layout.h" #include "sway/server.h" #include "sway/view.h" #include "log.h" +static bool assert_xdg(struct sway_view *view) { + return sway_assert(view->type == SWAY_XDG_SHELL_V6_VIEW, + "Expected xdg shell v6 view!"); +} + static const char *get_prop(struct sway_view *view, enum sway_view_prop prop) { - if (!sway_assert(view->type == SWAY_XDG_SHELL_V6_VIEW, - "xdg get_prop for non-xdg view!")) { + if (!assert_xdg(view)) { return NULL; } switch (prop) { @@ -22,6 +28,12 @@ static const char *get_prop(struct sway_view *view, enum sway_view_prop prop) { } } +static void set_dimensions(struct sway_view *view, int width, int height) { + if (assert_xdg(view)) { + wlr_xdg_toplevel_v6_set_size(view->wlr_xdg_surface_v6, width, height); + } +} + void handle_xdg_shell_v6_surface(struct wl_listener *listener, void *data) { struct sway_server *server = wl_container_of( listener, server, xdg_shell_v6_surface); @@ -48,13 +60,13 @@ void handle_xdg_shell_v6_surface(struct wl_listener *listener, void *data) { } sway_view->type = SWAY_XDG_SHELL_V6_VIEW; sway_view->iface.get_prop = get_prop; + sway_view->iface.set_dimensions = set_dimensions; sway_view->wlr_xdg_surface_v6 = xdg_surface; sway_view->sway_xdg_surface_v6 = sway_surface; sway_view->surface = xdg_surface->surface; sway_surface->view = sway_view; // TODO: - // - Add to tree // - Wire up listeners // - Handle popups // - Look up pid and open on appropriate workspace @@ -67,4 +79,6 @@ void handle_xdg_shell_v6_surface(struct wl_listener *listener, void *data) { swayc_t *cont = new_view(parent, sway_view); sway_view->swayc = cont; + + arrange_windows(cont->parent, -1, -1); } |