Wayland compositor (wlroots)
git clone https://git.lucas.co/cce-compositor.git
rivercompat: fix closing windows
rivercompat/Background.zig | 11 ++++-------
rivercompat/Seat.zig | 2 ++
rivercompat/Window.zig | 7 +++----
3 files changed, 9 insertions(+), 11 deletions(-)
diff --git a/rivercompat/Background.zig b/rivercompat/Background.zig
index 2ec3e6f..1b47990 100644
--- a/rivercompat/Background.zig
+++ b/rivercompat/Background.zig
@@ -26,15 +26,11 @@ const river = wayland.client.river;
const wm = &@import("root").wm;
-const State = struct {
- new: bool = false,
-};
-
+new: bool,
surface: *wl.Surface,
viewport: *wp.Viewport,
shell_surface_v1: *river.ShellSurfaceV1,
node: *river.NodeV1,
-pending: State,
pub fn init(background: *Background) void {
const surface = wm.compositor.createSurface() catch @panic("OOM");
@@ -42,16 +38,16 @@ pub fn init(background: *Background) void {
const shell_surface_v1 = wm.wm_v1.getShellSurface(surface) catch @panic("OOM");
background.* = .{
+ .new = true,
.surface = surface,
.viewport = viewport,
.shell_surface_v1 = shell_surface_v1,
.node = shell_surface_v1.getNode() catch @panic("OOM"),
- .pending = .{ .new = true },
};
}
pub fn updateWindowing(background: *Background) void {
- if (background.pending.new) {
+ if (background.new) {
background.node.placeBottom();
background.node.setPosition(0, 0);
background.shell_surface_v1.syncNextCommit();
@@ -72,4 +68,5 @@ pub fn updateWindowing(background: *Background) void {
background.viewport.setDestination(math.maxInt(i32) / 2, math.maxInt(i32) / 2);
background.surface.commit();
}
+ background.new = false;
}
diff --git a/rivercompat/Seat.zig b/rivercompat/Seat.zig
index 4ffcdd0..a47d37d 100644
--- a/rivercompat/Seat.zig
+++ b/rivercompat/Seat.zig
@@ -174,7 +174,9 @@ pub fn focus(seat: *Seat, _target: ?*Window) void {
window.link_focus.remove();
seat.focused_output.?.stack_focus.prepend(window);
seat.seat_v1.focusWindow(window.window_v1);
+ seat.focused = window;
} else {
seat.seat_v1.clearFocus();
+ seat.focused = null;
}
}
diff --git a/rivercompat/Window.zig b/rivercompat/Window.zig
index 12d492c..6d35380 100644
--- a/rivercompat/Window.zig
+++ b/rivercompat/Window.zig
@@ -113,6 +113,8 @@ pub fn updateWindowing(window: *Window) void {
if (window.windowing.closed) {
window.window_v1.destroy();
window.link.remove();
+ window.link_focus.remove();
+ window.link_wm.remove();
{
var it = wm.seats.iterator(.forward);
while (it.next()) |seat| {
@@ -180,10 +182,7 @@ pub const Box = struct {
height: u31,
};
-pub fn layout(
- window: *Window,
- box: Box,
-) void {
+pub fn layout(window: *Window, box: Box) void {
window.x = box.x + wm.config.border_width;
window.y = box.y + wm.config.border_width;
window.node_v1.setPosition(window.x, window.y);