Commit Diff


commit - 0d2b1235479134adf59940ca6d8dd58de7ccfbd1
commit + 7144e44e93242badf2c30a61c79df6f21da288f4
blob - 92b62cc4386dc959713fd0ad0c418d2559a798e7
blob + 01654ac78cf8e589bbdc1b912be3fed650952b4b
--- river/LayerSurface.zig
+++ river/LayerSurface.zig
@@ -230,6 +230,7 @@ fn handleNewPopup(listener: *wl.Listener(*wlr.XdgPopup
         wlr_xdg_popup,
         layer_surface.popup_tree,
         layer_surface.popup_tree,
+        null,
     ) catch {
         wlr_xdg_popup.resource.postNoMemory();
         return;
blob - 3467210cb2acb56c94accfba034e043d232dc623
blob + 44982e6b538a6e2d9965316c79bdfee1079f15e5
--- river/XdgPopup.zig
+++ river/XdgPopup.zig
@@ -34,6 +34,8 @@ root: *wlr.SceneTree,
 
 tree: *wlr.SceneTree,
 
+image_capture_tree: ?*wlr.SceneTree,
+
 destroy: wl.Listener(void) = wl.Listener(void).init(handleDestroy),
 commit: wl.Listener(*wlr.Surface) = wl.Listener(*wlr.Surface).init(handleCommit),
 new_popup: wl.Listener(*wlr.XdgPopup) = wl.Listener(*wlr.XdgPopup).init(handleNewPopup),
@@ -44,14 +46,21 @@ pub fn create(
     wlr_xdg_popup: *wlr.XdgPopup,
     root: *wlr.SceneTree,
     parent: *wlr.SceneTree,
+    image_capture_parent: ?*wlr.SceneTree,
 ) error{OutOfMemory}!void {
     const xdg_popup = try util.gpa.create(XdgPopup);
     errdefer util.gpa.destroy(xdg_popup);
 
+    const image_capture_tree = if (image_capture_parent) |p|
+        try p.createSceneXdgSurface(wlr_xdg_popup.base)
+    else
+        null;
+
     xdg_popup.* = .{
         .wlr_xdg_popup = wlr_xdg_popup,
         .root = root,
         .tree = try parent.createSceneXdgSurface(wlr_xdg_popup.base),
+        .image_capture_tree = image_capture_tree,
     };
 
     wlr_xdg_popup.events.destroy.add(&xdg_popup.destroy);
@@ -86,6 +95,7 @@ fn handleNewPopup(listener: *wl.Listener(*wlr.XdgPopup
         wlr_xdg_popup,
         xdg_popup.root,
         xdg_popup.tree,
+        xdg_popup.image_capture_tree,
     ) catch {
         wlr_xdg_popup.resource.postNoMemory();
         return;
blob - 02c0537e15b1c24b9cf313a3919061945d9fffcf
blob + 340671a53456e064a3433b1551dd77144f7eafdb
--- river/XdgToplevel.zig
+++ river/XdgToplevel.zig
@@ -283,7 +283,12 @@ fn handleUnmap(listener: *wl.Listener(void)) void {
 fn handleNewPopup(listener: *wl.Listener(*wlr.XdgPopup), wlr_xdg_popup: *wlr.XdgPopup) void {
     const toplevel: *XdgToplevel = @fieldParentPtr("new_popup", listener);
 
-    XdgPopup.create(wlr_xdg_popup, toplevel.view.popup_tree, toplevel.view.popup_tree) catch {
+    XdgPopup.create(
+        wlr_xdg_popup,
+        toplevel.view.popup_tree,
+        toplevel.view.popup_tree,
+        &toplevel.view.image_capture_scene.tree,
+    ) catch {
         wlr_xdg_popup.resource.postNoMemory();
         return;
     };