diff --git a/src/keybinds.c b/src/keybinds.c index 98feb29..9a8f86d 100644 --- a/src/keybinds.c +++ b/src/keybinds.c @@ -1,4 +1,5 @@ #include +#include #include #include #include diff --git a/src/layer-surface.c b/src/layer-surface.c index 1fdfdd0..f0879a2 100644 --- a/src/layer-surface.c +++ b/src/layer-surface.c @@ -1,4 +1,5 @@ #include +#include #include "focus.h" #include "layers.h" diff --git a/src/server.c b/src/server.c index 71124da..764c1ae 100644 --- a/src/server.c +++ b/src/server.c @@ -259,10 +259,10 @@ void cursor_button(struct wl_listener *listener, void *data) server->grab_x = server->cursor->x; server->grab_y = server->cursor->y; - int32_t nx, ny; - wlr_scene_node_coords(&toplevel->scene_tree->node, &nx, &ny); - server->grab_geom.x = nx; - server->grab_geom.y = ny; + int32_t tx, ty; + wlr_scene_node_coords(&toplevel->scene_tree->node, &tx, &ty); + server->grab_geom.x = tx; + server->grab_geom.y = ty; server->grab_geom.width = toplevel->geom.width; server->grab_geom.height = toplevel->geom.height; @@ -273,13 +273,13 @@ void cursor_button(struct wl_listener *listener, void *data) int32_t width = toplevel->xdg->base->geometry.width; int32_t height = toplevel->xdg->base->geometry.height; - if (server->grab_x > (x + width / 2) && server->grab_y > (y + height / 2)) { + if (server->grab_x > (tx + width / 2) && server->grab_y > (ty + height / 2)) { server->resize_corner = BOTTOM_RIGHT; wlr_cursor_set_xcursor(server->cursor, server->cursor_mgr, "se-resize"); - } else if (server->grab_x < (x + width / 2) && server->grab_y > (y + height / 2)) { + } else if (server->grab_x < (tx + width / 2) && server->grab_y > (ty + height / 2)) { server->resize_corner = BOTTOM_LEFT; wlr_cursor_set_xcursor(server->cursor, server->cursor_mgr, "sw-resize"); - } else if (server->grab_x > (x + width / 2) && server->grab_y < (y + height / 2)) { + } else if (server->grab_x > (tx + width / 2) && server->grab_y < (ty + height / 2)) { server->resize_corner = TOP_RIGHT; wlr_cursor_set_xcursor(server->cursor, server->cursor_mgr, "ne-resize"); } else { diff --git a/src/toplevel-handlers.c b/src/toplevel-handlers.c index 4300b5c..72167d6 100644 --- a/src/toplevel-handlers.c +++ b/src/toplevel-handlers.c @@ -23,8 +23,6 @@ void toplevel_map(struct wl_listener *listener, void *data) wlr_xdg_toplevel_set_maximized(toplevel->xdg, true); } - toplevel->bw = toplevel_is_unmanaged(toplevel) ? 0 : TOPLEVEL_BW; - #ifdef XWAYLAND if (toplevel->type == TOPLEVEL_X11) { toplevel->scene_surface = wlr_scene_subsurface_tree_create(toplevel->scene_tree, toplevel->xw->surface); @@ -38,6 +36,12 @@ void toplevel_map(struct wl_listener *listener, void *data) toplevel_get_geom(toplevel); toplevel->bw = toplevel_is_unmanaged(toplevel) ? 0 : TOPLEVEL_BW; +#ifdef XWAYLAND + if (toplevel->type == TOPLEVEL_X11) { + toplevel->xw->surface->data = toplevel; + } +#endif + for (int i = 0; i < 4; ++i) { toplevel->border[i] = wlr_scene_rect_create(toplevel->scene_tree, 0, 0, unfocused_bc); toplevel->border[i]->node.data = toplevel; diff --git a/src/toplevel.c b/src/toplevel.c index 4e93a05..9129f20 100644 --- a/src/toplevel.c +++ b/src/toplevel.c @@ -1,6 +1,7 @@ #include #include "config.h" +#include "layers.h" #include "layout.h" #include "toplevel.h" #include "types.h" @@ -96,7 +97,7 @@ void toplevel_set_size(absn_toplevel *toplevel, int32_t width, int32_t height) wlr_xwayland_surface_configure(toplevel->xw, toplevel->geom.x, toplevel->geom.y, width - 2 * bw, height - 2 * toplevel->bw); /* manually update position */ toplevel_set_pos(toplevel, toplevel->geom.x, toplevel->geom.y); - } + } else #endif wlr_scene_subsurface_tree_set_clip(&toplevel->scene_surface->node, &clip); @@ -133,7 +134,9 @@ void toplevel_set_fullscreen(absn_toplevel *toplevel, bool fullscreen) absn_output *output = toplevel->server->focused_output; toplevel->fullscreen = fullscreen; - wlr_xdg_toplevel_set_fullscreen(toplevel->xdg, fullscreen); + if (toplevel->type == TOPLEVEL_XDG) { + wlr_xdg_toplevel_set_fullscreen(toplevel->xdg, fullscreen); + } if (fullscreen) { toplevel->prev_geom = toplevel->geom; @@ -154,6 +157,7 @@ void toplevel_set_fullscreen(absn_toplevel *toplevel, bool fullscreen) toplevel_update_borders_geom(toplevel); layout_arrange(toplevel->output); + layers_arrange(toplevel->output); } void toplevel_set_border_color(absn_toplevel *toplevel, const float color[4]) @@ -161,6 +165,7 @@ void toplevel_set_border_color(absn_toplevel *toplevel, const float color[4]) if (!toplevel) { return; } + for (int i = 0; i < 4; ++i) { wlr_scene_rect_set_color(toplevel->border[i], color); } diff --git a/src/xdg-popup.c b/src/xdg-popup.c index bb01392..af560bd 100644 --- a/src/xdg-popup.c +++ b/src/xdg-popup.c @@ -1,3 +1,5 @@ +#include + #include "types.h" void xdg_popup_commit(struct wl_listener *listener, void *data)