Wayland compositor (wlroots)
git clone https://git.lucas.co/cce-compositor.git
Window: implement river_window_v1.identifier event
river/Window.zig | 25 ++++++++++++++++---------
1 file changed, 16 insertions(+), 9 deletions(-)
diff --git a/river/Window.zig b/river/Window.zig
index f06b6c6..2ed1627 100644
--- a/river/Window.zig
+++ b/river/Window.zig
@@ -392,14 +392,30 @@ pub fn manageStart(window: *Window) void {
window.node.link.remove();
server.wm.rendering_requested.list.append(&window.node);
+ if (wlr.ExtForeignToplevelHandleV1.create(server.foreign_toplevel_list, &.{
+ .title = window.getTitle(),
+ .app_id = window.getAppId(),
+ })) |handle| {
+ assert(window.foreign_toplevel_handle == null);
+ window.foreign_toplevel_handle = handle;
+ } else |_| {
+ log.err("failed to create ext foreign toplevel handle", .{});
+ }
+
break :blk window_v1;
};
+
errdefer comptime unreachable;
if (new) {
if (window_v1.getVersion() >= 2) {
window_v1.sendUnreliablePid(window.unreliablePid());
}
+ if (window_v1.getVersion() >= 4) {
+ if (window.foreign_toplevel_handle) |handle| {
+ window_v1.sendIdentifier(handle.identifier);
+ }
+ }
}
const scheduled = &window.wm_scheduled;
@@ -1072,15 +1088,6 @@ pub fn map(window: *Window) !void {
assert(window.impl != .destroying);
assert(window.state == .initialized);
window.state = .mapped;
-
- if (wlr.ExtForeignToplevelHandleV1.create(server.foreign_toplevel_list, &.{
- .title = window.getTitle(),
- .app_id = window.getAppId(),
- })) |handle| {
- window.foreign_toplevel_handle = handle;
- } else |_| {
- log.err("failed to create ext foreign toplevel handle", .{});
- }
}
/// Called by the impl when the surface will no longer be displayed