diff options
| author | Isaac Freund <ifreund@ifreund.xyz> | 2020-05-19 18:22:22 +0200 |
|---|---|---|
| committer | Isaac Freund <ifreund@ifreund.xyz> | 2020-05-19 20:53:26 +0200 |
| commit | 569308d91b7d6ea19a283a3db4a612f9e5d881d7 (patch) | |
| tree | ad68bf4d5b6e1f9bb9d275a0ab7a17d7feb4da91 /src/WindowManagement.zig | |
| parent | 7cb6c5d75a067539065089c51a603cd1de705e12 (diff) | |
| download | river-569308d91b7d6ea19a283a3db4a612f9e5d881d7.tar.gz river-569308d91b7d6ea19a283a3db4a612f9e5d881d7.tar.xz | |
Implement sending command from riverctl
These commands are successfully received by the server, but not yet
executed.
Diffstat (limited to 'src/WindowManagement.zig')
| -rw-r--r-- | src/WindowManagement.zig | 21 |
1 files changed, 19 insertions, 2 deletions
diff --git a/src/WindowManagement.zig b/src/WindowManagement.zig index be8d425..7c14838 100644 --- a/src/WindowManagement.zig +++ b/src/WindowManagement.zig @@ -36,6 +36,7 @@ wl_global: *c.wl_global, listen_display_destroy: c.wl_listener, pub fn init(self: *Self, server: *Server) !void { + self.server = server; self.wl_global = c.wl_global_create( server.wl_display, &c.zriver_window_manager_v1_interface, @@ -72,6 +73,22 @@ fn resourceDestroy(wl_resource: ?*c.wl_resource) callconv(.C) void { // TODO } -fn runCommand(wl_client: ?*c.wl_client, wl_resource: ?*c.wl_resource, command: ?[*:0]const u8) callconv(.C) void { - Log.Debug.log("command: {}", .{command}); +fn runCommand(wl_client: ?*c.wl_client, wl_resource: ?*c.wl_resource, command: ?*c.wl_array) callconv(.C) void { + const self = @ptrCast(*Self, @alignCast(@alignOf(*Self), c.wl_resource_get_user_data(wl_resource))); + const allocator = self.server.allocator; + + var args = std.ArrayList([]const u8).init(allocator); + + var i: usize = 0; + const data = @ptrCast([*]const u8, command.?.data); + while (i < command.?.size) { + const slice = std.mem.spanZ(@ptrCast([*:0]const u8, &data[i])); + args.append(std.mem.dupe(allocator, u8, slice) catch unreachable) catch unreachable; + + i += slice.len + 1; + } + + for (args.items) |x| { + std.debug.warn("{}\n", .{x}); + } } |
