aboutsummaryrefslogtreecommitdiff
path: root/src/WindowManagement.zig
diff options
context:
space:
mode:
authorIsaac Freund <ifreund@ifreund.xyz>2020-05-19 18:22:22 +0200
committerIsaac Freund <ifreund@ifreund.xyz>2020-05-19 20:53:26 +0200
commit569308d91b7d6ea19a283a3db4a612f9e5d881d7 (patch)
treead68bf4d5b6e1f9bb9d275a0ab7a17d7feb4da91 /src/WindowManagement.zig
parent7cb6c5d75a067539065089c51a603cd1de705e12 (diff)
downloadriver-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.zig21
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});
+ }
}