aboutsummaryrefslogtreecommitdiff
path: root/src/WindowManagement.zig
diff options
context:
space:
mode:
authorIsaac Freund <ifreund@ifreund.xyz>2020-05-19 22:59:50 +0200
committerIsaac Freund <ifreund@ifreund.xyz>2020-05-19 22:59:50 +0200
commitcee41e925dc0a9d7460806c9f8386512b207edf3 (patch)
tree75799b00cf703d4196864a261e01ff8ec53699f2 /src/WindowManagement.zig
parent569308d91b7d6ea19a283a3db4a612f9e5d881d7 (diff)
downloadriver-cee41e925dc0a9d7460806c9f8386512b207edf3.tar.gz
river-cee41e925dc0a9d7460806c9f8386512b207edf3.tar.xz
Implement command execution through riverctl
Diffstat (limited to 'src/WindowManagement.zig')
-rw-r--r--src/WindowManagement.zig11
1 files changed, 8 insertions, 3 deletions
diff --git a/src/WindowManagement.zig b/src/WindowManagement.zig
index 7c14838..c95aa23 100644
--- a/src/WindowManagement.zig
+++ b/src/WindowManagement.zig
@@ -21,6 +21,7 @@ const std = @import("std");
const c = @import("c.zig");
+const Command = @import("Command.zig");
const Log = @import("log.zig").Log;
const Server = @import("Server.zig");
@@ -73,15 +74,15 @@ fn resourceDestroy(wl_resource: ?*c.wl_resource) callconv(.C) void {
// TODO
}
-fn runCommand(wl_client: ?*c.wl_client, wl_resource: ?*c.wl_resource, command: ?*c.wl_array) callconv(.C) void {
+fn runCommand(wl_client: ?*c.wl_client, wl_resource: ?*c.wl_resource, wl_array: ?*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 data = @ptrCast([*]const u8, wl_array.?.data);
+ while (i < wl_array.?.size) {
const slice = std.mem.spanZ(@ptrCast([*:0]const u8, &data[i]));
args.append(std.mem.dupe(allocator, u8, slice) catch unreachable) catch unreachable;
@@ -91,4 +92,8 @@ fn runCommand(wl_client: ?*c.wl_client, wl_resource: ?*c.wl_resource, command: ?
for (args.items) |x| {
std.debug.warn("{}\n", .{x});
}
+
+ // TODO: send the error event on failure instead of crashing
+ const command = Command.init(args.items, allocator) catch unreachable;
+ command.run(self.server.input_manager.default_seat);
}