aboutsummaryrefslogtreecommitdiff
path: root/src/decoration.zig
diff options
context:
space:
mode:
authorIsaac Freund <ifreund@ifreund.xyz>2020-03-27 18:31:03 +0100
committerIsaac Freund <ifreund@ifreund.xyz>2020-03-27 18:31:03 +0100
commit5bf161e74412272199603794a1f4e46024fb915c (patch)
tree5b152eacd1db39cc1aba225694a4f65a2b41e5ec /src/decoration.zig
parent69220d3c9270181e14fb023c48926dc25b366eee (diff)
downloadriver-5bf161e74412272199603794a1f4e46024fb915c.tar.gz
river-5bf161e74412272199603794a1f4e46024fb915c.tar.xz
Implement basic xdg decoration management
Diffstat (limited to 'src/decoration.zig')
-rw-r--r--src/decoration.zig37
1 files changed, 37 insertions, 0 deletions
diff --git a/src/decoration.zig b/src/decoration.zig
new file mode 100644
index 0000000..7ae8401
--- /dev/null
+++ b/src/decoration.zig
@@ -0,0 +1,37 @@
+const std = @import("std");
+const c = @import("c.zig").c;
+
+const DecorationManager = @import("decoration_manager.zig").DecorationManager;
+
+// TODO: this needs to listen for destroy and free nodes from the deco list
+pub const Decoration = struct {
+ const Self = @This();
+
+ decoration_manager: *DecorationManager,
+ wlr_xdg_toplevel_decoration: *c.wlr_xdg_toplevel_decoration_v1,
+
+ listen_request_mode: c.wl_listener,
+
+ pub fn init(
+ self: *Self,
+ decoration_manager: *DecorationManager,
+ wlr_xdg_toplevel_decoration: *c.wlr_xdg_toplevel_decoration_v1,
+ ) void {
+ self.decoration_manager = decoration_manager;
+ self.wlr_xdg_toplevel_decoration = wlr_xdg_toplevel_decoration;
+
+ self.listen_request_mode.notify = handleRequestMode;
+ c.wl_signal_add(&self.wlr_xdg_toplevel_decoration.events.request_mode, &self.listen_request_mode);
+
+ handleRequestMode(&self.listen_request_mode, self.wlr_xdg_toplevel_decoration);
+ }
+
+ fn handleRequestMode(listener: ?*c.wl_listener, data: ?*c_void) callconv(.C) void {
+ const decoration = @fieldParentPtr(Decoration, "listen_request_mode", listener.?);
+ // TODO: we might need to take this configure serial and do a transaction
+ _ = c.wlr_xdg_toplevel_decoration_v1_set_mode(
+ decoration.wlr_xdg_toplevel_decoration,
+ c.wlr_xdg_toplevel_decoration_v1_mode.WLR_XDG_TOPLEVEL_DECORATION_V1_MODE_SERVER_SIDE,
+ );
+ }
+};