feat: add zxdg, decoration manager
parent
c4c0880eff
commit
10475dd036
|
@ -25,6 +25,7 @@ pub fn main() !void {
|
||||||
|
|
||||||
// create a sync callback so we know when the registry is done listing extensions
|
// create a sync callback so we know when the registry is done listing extensions
|
||||||
const registry_done_id = id_pool.create();
|
const registry_done_id = id_pool.create();
|
||||||
|
std.debug.print("registry done id: {}\n", .{registry_done_id});
|
||||||
{
|
{
|
||||||
var buffer: [5]u32 = undefined;
|
var buffer: [5]u32 = undefined;
|
||||||
const message = try wayland.serialize(wayland.core.Display.Request, &buffer, 1, .{ .sync = .{ .callback = registry_done_id } });
|
const message = try wayland.serialize(wayland.core.Display.Request, &buffer, 1, .{ .sync = .{ .callback = registry_done_id } });
|
||||||
|
@ -34,6 +35,7 @@ pub fn main() !void {
|
||||||
var shm_id_opt: ?u32 = null;
|
var shm_id_opt: ?u32 = null;
|
||||||
var compositor_id_opt: ?u32 = null;
|
var compositor_id_opt: ?u32 = null;
|
||||||
var xdg_wm_base_id_opt: ?u32 = null;
|
var xdg_wm_base_id_opt: ?u32 = null;
|
||||||
|
var zxdg_decoration_manager_id_opt: ?u32 = null;
|
||||||
|
|
||||||
var message_buffer = std.ArrayList(u32).init(gpa);
|
var message_buffer = std.ArrayList(u32).init(gpa);
|
||||||
defer message_buffer.deinit();
|
defer message_buffer.deinit();
|
||||||
|
@ -95,6 +97,20 @@ pub fn main() !void {
|
||||||
} },
|
} },
|
||||||
);
|
);
|
||||||
try socket.writeAll(std.mem.sliceAsBytes(message));
|
try socket.writeAll(std.mem.sliceAsBytes(message));
|
||||||
|
} else if (std.mem.eql(u8, global.interface, "zxdg_decoration_manager_v1")) {
|
||||||
|
zxdg_decoration_manager_id_opt = id_pool.create();
|
||||||
|
const message = try wayland.serialize(
|
||||||
|
wayland.core.Registry.Request,
|
||||||
|
&buffer,
|
||||||
|
registry_id,
|
||||||
|
.{ .bind = .{
|
||||||
|
.name = global.name,
|
||||||
|
.interface = global.interface,
|
||||||
|
.version = 1,
|
||||||
|
.new_id = zxdg_decoration_manager_id_opt.?,
|
||||||
|
} },
|
||||||
|
);
|
||||||
|
try socket.writeAll(std.mem.sliceAsBytes(message));
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
.global_remove => {},
|
.global_remove => {},
|
||||||
|
@ -153,6 +169,24 @@ pub fn main() !void {
|
||||||
try socket.writeAll(std.mem.sliceAsBytes(message));
|
try socket.writeAll(std.mem.sliceAsBytes(message));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var zxdg_toplevel_decoration_id_opt: ?u32 = null;
|
||||||
|
if (zxdg_decoration_manager_id_opt) |zxdg_decoration_manager_id| {
|
||||||
|
zxdg_toplevel_decoration_id_opt = id_pool.create();
|
||||||
|
{
|
||||||
|
var buffer: [10]u32 = undefined;
|
||||||
|
const message = try wayland.serialize(
|
||||||
|
wayland.zxdg.DecorationManagerV1.Request,
|
||||||
|
&buffer,
|
||||||
|
zxdg_decoration_manager_id,
|
||||||
|
.{ .get_toplevel_decoration = .{
|
||||||
|
.new_id = zxdg_toplevel_decoration_id_opt.?,
|
||||||
|
.toplevel = xdg_toplevel_id,
|
||||||
|
} },
|
||||||
|
);
|
||||||
|
try socket.writeAll(std.mem.sliceAsBytes(message));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
var buffer: [10]u32 = undefined;
|
var buffer: [10]u32 = undefined;
|
||||||
const message = try wayland.serialize(
|
const message = try wayland.serialize(
|
||||||
|
@ -200,6 +234,23 @@ pub fn main() !void {
|
||||||
surface_configured = true;
|
surface_configured = true;
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
} else if (zxdg_toplevel_decoration_id_opt != null and header.object_id == zxdg_toplevel_decoration_id_opt.?) {
|
||||||
|
const event = try wayland.deserialize(wayland.zxdg.ToplevelDecorationV1.Event, header, message_buffer.items);
|
||||||
|
std.debug.print("<- zxdg_toplevel_decoration@{}\n", .{event});
|
||||||
|
// switch (event) {
|
||||||
|
// .configure => |_| {
|
||||||
|
// var buffer: [10]u32 = undefined;
|
||||||
|
// const message = try wayland.serialize(
|
||||||
|
// wayland.zxdg.ToplevelDecorationV1.Request,
|
||||||
|
// &buffer,
|
||||||
|
// zxdg_toplevel_decoration_id_opt.?,
|
||||||
|
// .{ .set_mode = .{
|
||||||
|
// .mode = .server_side,
|
||||||
|
// } },
|
||||||
|
// );
|
||||||
|
// try socket.writeAll(std.mem.sliceAsBytes(message));
|
||||||
|
// },
|
||||||
|
// }
|
||||||
} else if (header.object_id == xdg_toplevel_id) {
|
} else if (header.object_id == xdg_toplevel_id) {
|
||||||
const event = try wayland.deserialize(wayland.xdg.Toplevel.Event, header, message_buffer.items);
|
const event = try wayland.deserialize(wayland.xdg.Toplevel.Event, header, message_buffer.items);
|
||||||
std.debug.print("<- {}\n", .{event});
|
std.debug.print("<- {}\n", .{event});
|
||||||
|
@ -214,7 +265,10 @@ pub fn main() !void {
|
||||||
const event = try wayland.deserialize(wayland.core.Display.Event, header, message_buffer.items);
|
const event = try wayland.deserialize(wayland.core.Display.Event, header, message_buffer.items);
|
||||||
switch (event) {
|
switch (event) {
|
||||||
.@"error" => |err| std.debug.print("<- error({}): {} {s}\n", .{ err.object_id, err.code, err.message }),
|
.@"error" => |err| std.debug.print("<- error({}): {} {s}\n", .{ err.object_id, err.code, err.message }),
|
||||||
.delete_id => |id| id_pool.destroy(id.name),
|
.delete_id => |id| {
|
||||||
|
std.debug.print("id {} deleted\n", .{id});
|
||||||
|
id_pool.destroy(id.id);
|
||||||
|
},
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
std.debug.print("{} {x} \"{}\"\n", .{ header.object_id, header.size_and_opcode.opcode, std.zig.fmtEscapes(std.mem.sliceAsBytes(message_buffer.items)) });
|
std.debug.print("{} {x} \"{}\"\n", .{ header.object_id, header.size_and_opcode.opcode, std.zig.fmtEscapes(std.mem.sliceAsBytes(message_buffer.items)) });
|
||||||
|
@ -244,7 +298,7 @@ pub fn main() !void {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const wl_shm_pool_id = 10;
|
const wl_shm_pool_id = id_pool.create();
|
||||||
{
|
{
|
||||||
var buffer: [10]u32 = undefined;
|
var buffer: [10]u32 = undefined;
|
||||||
const message = try wayland.serialize(
|
const message = try wayland.serialize(
|
||||||
|
@ -283,8 +337,9 @@ pub fn main() !void {
|
||||||
_ = try std.os.sendmsg(socket.handle, &socket_message, 0);
|
_ = try std.os.sendmsg(socket.handle, &socket_message, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
const wl_buffer_id = 11;
|
const wl_buffer_id = id_pool.create();
|
||||||
{
|
{
|
||||||
|
std.debug.print("buffer id: {}\n", .{wl_buffer_id});
|
||||||
var buffer: [10]u32 = undefined;
|
var buffer: [10]u32 = undefined;
|
||||||
const message = try wayland.serialize(
|
const message = try wayland.serialize(
|
||||||
wayland.core.ShmPool.Request,
|
wayland.core.ShmPool.Request,
|
||||||
|
@ -414,7 +469,7 @@ pub fn main() !void {
|
||||||
const event = try wayland.deserialize(wayland.core.Display.Event, header, message_buffer.items);
|
const event = try wayland.deserialize(wayland.core.Display.Event, header, message_buffer.items);
|
||||||
switch (event) {
|
switch (event) {
|
||||||
.@"error" => |err| std.debug.print("<- error({}): {} {s}\n", .{ err.object_id, err.code, err.message }),
|
.@"error" => |err| std.debug.print("<- error({}): {} {s}\n", .{ err.object_id, err.code, err.message }),
|
||||||
.delete_id => |id| id_pool.destroy(id.name),
|
.delete_id => |id| id_pool.destroy(id.id),
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
std.debug.print("{} {x} \"{}\"\n", .{ header.object_id, header.size_and_opcode.opcode, std.zig.fmtEscapes(std.mem.sliceAsBytes(message_buffer.items)) });
|
std.debug.print("{} {x} \"{}\"\n", .{ header.object_id, header.size_and_opcode.opcode, std.zig.fmtEscapes(std.mem.sliceAsBytes(message_buffer.items)) });
|
||||||
|
|
|
@ -17,7 +17,7 @@ pub const Display = struct {
|
||||||
message: []const u8,
|
message: []const u8,
|
||||||
},
|
},
|
||||||
delete_id: struct {
|
delete_id: struct {
|
||||||
name: u32,
|
id: u32,
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -2,6 +2,7 @@ const std = @import("std");
|
||||||
const testing = std.testing;
|
const testing = std.testing;
|
||||||
pub const core = @import("./core.zig");
|
pub const core = @import("./core.zig");
|
||||||
pub const xdg = @import("./xdg.zig");
|
pub const xdg = @import("./xdg.zig");
|
||||||
|
pub const zxdg = @import("./zxdg.zig");
|
||||||
|
|
||||||
pub fn getDisplayPath(gpa: std.mem.Allocator) ![]u8 {
|
pub fn getDisplayPath(gpa: std.mem.Allocator) ![]u8 {
|
||||||
const xdg_runtime_dir_path = try std.process.getEnvVarOwned(gpa, "XDG_RUNTIME_DIR");
|
const xdg_runtime_dir_path = try std.process.getEnvVarOwned(gpa, "XDG_RUNTIME_DIR");
|
||||||
|
@ -340,6 +341,9 @@ pub const IdPool = struct {
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn destroy(this: *@This(), id: u32) void {
|
pub fn destroy(this: *@This(), id: u32) void {
|
||||||
|
for (this.free_ids.slice()) |existing_id| {
|
||||||
|
if (existing_id == id) return;
|
||||||
|
}
|
||||||
this.free_ids.append(id) catch {};
|
this.free_ids.append(id) catch {};
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
|
@ -0,0 +1,49 @@
|
||||||
|
pub const DecorationManagerV1 = struct {
|
||||||
|
pub const Request = union(Request.Tag) {
|
||||||
|
destroy: void,
|
||||||
|
get_toplevel_decoration: struct {
|
||||||
|
new_id: u32,
|
||||||
|
toplevel: u32,
|
||||||
|
},
|
||||||
|
|
||||||
|
pub const Tag = enum(u16) {
|
||||||
|
destroy,
|
||||||
|
get_toplevel_decoration,
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
pub const ToplevelDecorationV1 = struct {
|
||||||
|
pub const Request = union(Request.Tag) {
|
||||||
|
destroy: void,
|
||||||
|
unset_mode: void,
|
||||||
|
set_mode: struct {
|
||||||
|
mode: Mode,
|
||||||
|
},
|
||||||
|
|
||||||
|
pub const Tag = enum(u16) {
|
||||||
|
destroy,
|
||||||
|
unset_mode,
|
||||||
|
set_mode,
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
pub const Event = union(Event.Tag) {
|
||||||
|
configure: struct { mode: Mode },
|
||||||
|
|
||||||
|
pub const Tag = enum(u16) {
|
||||||
|
configure,
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
pub const Error = enum(u32) {
|
||||||
|
unconfigured_buffer,
|
||||||
|
already_constructed,
|
||||||
|
orphaned,
|
||||||
|
};
|
||||||
|
|
||||||
|
pub const Mode = enum(u32) {
|
||||||
|
client_side = 1,
|
||||||
|
server_side = 2,
|
||||||
|
};
|
||||||
|
};
|
Loading…
Reference in New Issue