aboutsummaryrefslogtreecommitdiff
path: root/src/xdg/wm-base.zig
diff options
context:
space:
mode:
authorNathan Reiner <nathan@nathanreiner.xyz>2025-08-30 15:49:18 +0200
committerNathan Reiner <nathan@nathanreiner.xyz>2025-08-30 15:49:18 +0200
commita46436e58beaaa322c082af5e886f96fd31d7a08 (patch)
tree05a05b149c2f18cb0562aef94fe41bd5aaad9fbc /src/xdg/wm-base.zig
parent4feb8c7dab2b0a3492b8248ee12c3f0a475106f1 (diff)
Use mix-in design for interface abstraction.HEADmaster
Diffstat (limited to 'src/xdg/wm-base.zig')
-rw-r--r--src/xdg/wm-base.zig45
1 files changed, 45 insertions, 0 deletions
diff --git a/src/xdg/wm-base.zig b/src/xdg/wm-base.zig
new file mode 100644
index 0000000..6a9df47
--- /dev/null
+++ b/src/xdg/wm-base.zig
@@ -0,0 +1,45 @@
+const std = @import("std");
+const wayland = @import("../root.zig");
+const wl = wayland.wl;
+
+const Self = @This();
+
+pub const Request = union(enum) {
+ destroy: void,
+ create_positioner: struct { wayland.Object.Ref },
+ create_xdg_surface: struct { wayland.Object.Ref, wayland.Object.Ref },
+ pong: struct { u32 },
+};
+
+pub const Events = wayland.EventSet(Self, .{ ping });
+
+handle: wayland.Object.Ref,
+init: wayland.Object.interface.Init(Self) = .{},
+
+
+pub var globals: wayland.Object.interface.Global(Self) = .init;
+pub const handler: wl.Registry.GlobalHandler = .{
+ .interface = "xdg_wm_base",
+ .version = 6,
+ .handler = globals.register,
+};
+
+fn ping(
+ self: *Self,
+ ctx: wayland.Context,
+ payload: u32,
+) !void {
+ try ctx.display.request(self, .{ .pong = .{ payload } });
+}
+
+pub fn format(
+ self: *const Self,
+ comptime fmt: []const u8,
+ options: std.fmt.FormatOptions,
+ writer: anytype,
+) !void {
+ _ = self;
+ _ = fmt;
+ _ = options;
+ try writer.print("xdg.wm-base", .{});
+}