mirror of
https://github.com/zoriya/zig-wayland.git
synced 2026-06-08 12:43:14 +00:00
Handle messages with no args
This commit is contained in:
+44
-35
@@ -192,17 +192,23 @@ const Message = struct {
|
||||
fn emitMessage(message: Message, writer: anytype) !void {
|
||||
try writer.print(".{{ .name = \"{}\", .signature = \"", .{message.name});
|
||||
for (message.args.items) |arg| try arg.emitSignature(writer);
|
||||
try writer.writeAll("\", .types = &[_]?*const common.Interface{");
|
||||
for (message.args.items) |arg| {
|
||||
switch (arg.kind) {
|
||||
.object, .new_id => |interface| if (interface) |i|
|
||||
try writer.print("&common.{}.{}.interface,", .{ prefix(i), trimPrefix(i) })
|
||||
else
|
||||
try writer.writeAll("null,"),
|
||||
else => try writer.writeAll("null,"),
|
||||
try writer.writeAll("\", .types = ");
|
||||
if (message.args.items.len > 0) {
|
||||
try writer.writeAll("&[_]?*const common.Interface{");
|
||||
for (message.args.items) |arg| {
|
||||
switch (arg.kind) {
|
||||
.object, .new_id => |interface| if (interface) |i|
|
||||
try writer.print("&common.{}.{}.interface,", .{ prefix(i), trimPrefix(i) })
|
||||
else
|
||||
try writer.writeAll("null,"),
|
||||
else => try writer.writeAll("null,"),
|
||||
}
|
||||
}
|
||||
try writer.writeAll("},");
|
||||
} else {
|
||||
try writer.writeAll("null,");
|
||||
}
|
||||
try writer.writeAll("}, },");
|
||||
try writer.writeAll("},");
|
||||
}
|
||||
|
||||
fn emitField(message: Message, target: Target, writer: anytype) !void {
|
||||
@@ -278,39 +284,42 @@ const Message = struct {
|
||||
try writer.writeAll("const proxy = @ptrCast(*client.Proxy,");
|
||||
try printIdentifier(writer, trimPrefix(interface.name));
|
||||
try writer.writeAll(");");
|
||||
try writer.writeAll("var args = [_]common.Argument{");
|
||||
for (message.args.items) |arg| {
|
||||
switch (arg.kind) {
|
||||
.int, .uint, .fixed, .string, .object, .array, .fd => {
|
||||
try writer.writeAll(".{ .");
|
||||
try arg.emitSignature(writer);
|
||||
try writer.writeAll(" = ");
|
||||
try printIdentifier(writer, arg.name);
|
||||
try writer.writeAll("},");
|
||||
},
|
||||
.new_id => |new_iface| {
|
||||
if (target == .server) {
|
||||
try writer.writeAll(".{ .o = ");
|
||||
if (message.args.items.len > 0) {
|
||||
try writer.writeAll("var args = [_]common.Argument{");
|
||||
for (message.args.items) |arg| {
|
||||
switch (arg.kind) {
|
||||
.int, .uint, .fixed, .string, .object, .array, .fd => {
|
||||
try writer.writeAll(".{ .");
|
||||
try arg.emitSignature(writer);
|
||||
try writer.writeAll(" = ");
|
||||
try printIdentifier(writer, arg.name);
|
||||
try writer.writeAll(" },");
|
||||
} else {
|
||||
if (new_iface == null) {
|
||||
try writer.writeAll(
|
||||
\\.{ .s = T.interface.name },
|
||||
\\.{ .u = version },
|
||||
);
|
||||
try writer.writeAll("},");
|
||||
},
|
||||
.new_id => |new_iface| {
|
||||
if (target == .server) {
|
||||
try writer.writeAll(".{ .o = ");
|
||||
try printIdentifier(writer, arg.name);
|
||||
try writer.writeAll(" },");
|
||||
} else {
|
||||
if (new_iface == null) {
|
||||
try writer.writeAll(
|
||||
\\.{ .s = T.interface.name },
|
||||
\\.{ .u = version },
|
||||
);
|
||||
}
|
||||
try writer.writeAll(".{ .o = null },");
|
||||
}
|
||||
try writer.writeAll(".{ .o = null },");
|
||||
}
|
||||
},
|
||||
},
|
||||
}
|
||||
}
|
||||
try writer.writeAll("};\n");
|
||||
}
|
||||
try writer.writeAll("};\n");
|
||||
const args = if (message.args.items.len > 0) "&args" else "null";
|
||||
if (target == .server) {
|
||||
try writer.print("resource.postEvent({}, &args);", .{opcode});
|
||||
try writer.print("resource.postEvent({}, {});", .{ opcode, args });
|
||||
} else switch (message.kind) {
|
||||
.normal, .destructor => {
|
||||
try writer.print("proxy.marshal({}, &args);", .{opcode});
|
||||
try writer.print("proxy.marshal({}, {});", .{ opcode, args });
|
||||
if (message.kind == .destructor) try writer.writeAll("proxy.destroy();");
|
||||
},
|
||||
.constructor => |new_iface| {
|
||||
|
||||
+2
-4
@@ -12,10 +12,8 @@ pub const Proxy = opaque {
|
||||
wl_proxy_destroy(proxy);
|
||||
}
|
||||
|
||||
extern fn wl_proxy_marshal_array(proxy: *Proxy, opcode: u32, args: [*]common.Argument) void;
|
||||
pub fn marshal(proxy: *Proxy, opcode: u32, args: [*]common.Argument) void {
|
||||
wl_proxy_marshal_array(proxy, opcode, args);
|
||||
}
|
||||
extern fn wl_proxy_marshal_array(proxy: *Proxy, opcode: u32, args: ?[*]common.Argument) void;
|
||||
pub const marshal = wl_proxy_marshal_array;
|
||||
|
||||
extern fn wl_proxy_marshal_array_constructor(
|
||||
proxy: *Proxy,
|
||||
|
||||
+1
-1
@@ -6,7 +6,7 @@ pub const Object = opaque {};
|
||||
pub const Message = extern struct {
|
||||
name: [*:0]const u8,
|
||||
signature: [*:0]const u8,
|
||||
types: [*]const ?*const Interface,
|
||||
types: ?[*]const ?*const Interface,
|
||||
};
|
||||
|
||||
pub const Interface = extern struct {
|
||||
|
||||
Reference in New Issue
Block a user