aboutsummaryrefslogtreecommitdiff
path: root/src/seat.zig
diff options
context:
space:
mode:
Diffstat (limited to 'src/seat.zig')
-rw-r--r--src/seat.zig29
1 files changed, 12 insertions, 17 deletions
diff --git a/src/seat.zig b/src/seat.zig
index 2f92baa..3e753ec 100644
--- a/src/seat.zig
+++ b/src/seat.zig
@@ -18,34 +18,29 @@ pub const Seat = struct {
// Mulitple keyboards are handled separately
keyboards: std.TailQueue(Keyboard),
- pub fn create(server: *Server) !Self {
- var seat = Self{
- .server = server,
- .wlr_seat = undefined,
- .listen_new_input = c.wl_listener{
- .link = undefined,
- .notify = handleNewInput,
- },
- .cursor = undefined,
- .keyboards = std.TailQueue(Keyboard).init(),
- };
+ pub fn init(self: *Self, server: *Server) !void {
+ self.server = server;
// This seems to be the default seat name used by compositors
- seat.wlr_seat = c.wlr_seat_create(server.wl_display, "seat0") orelse
+ // This will be automatically destroyed when the display is destroyed
+ self.wlr_seat = c.wlr_seat_create(server.wl_display, "seat0") orelse
return error.CantCreateWlrSeat;
- return seat;
- }
+ try self.cursor.init(self);
+ errdefer self.cursor.destroy();
- pub fn init(self: *Self) !void {
- self.cursor = try Cursor.create(self);
- self.cursor.init();
+ self.keyboards = std.TailQueue(Keyboard).init();
// Set up handler for all new input devices made available. This
// includes keyboards, pointers, touch, etc.
+ self.listen_new_input.notify = handleNewInput;
c.wl_signal_add(&self.server.wlr_backend.events.new_input, &self.listen_new_input);
}
+ pub fn destroy(self: *Self) void {
+ self.cursor.destroy();
+ }
+
fn addKeyboard(self: *Self, device: *c.wlr_input_device) !void {
c.wlr_seat_set_keyboard(self.wlr_seat, device);