river: toplevel capture for XdgPopups
This commit is contained in:
@@ -230,6 +230,7 @@ fn handleNewPopup(listener: *wl.Listener(*wlr.XdgPopup), wlr_xdg_popup: *wlr.Xdg
|
|||||||
wlr_xdg_popup,
|
wlr_xdg_popup,
|
||||||
layer_surface.popup_tree,
|
layer_surface.popup_tree,
|
||||||
layer_surface.popup_tree,
|
layer_surface.popup_tree,
|
||||||
|
null,
|
||||||
) catch {
|
) catch {
|
||||||
wlr_xdg_popup.resource.postNoMemory();
|
wlr_xdg_popup.resource.postNoMemory();
|
||||||
return;
|
return;
|
||||||
|
|||||||
@@ -34,6 +34,8 @@ root: *wlr.SceneTree,
|
|||||||
|
|
||||||
tree: *wlr.SceneTree,
|
tree: *wlr.SceneTree,
|
||||||
|
|
||||||
|
image_capture_tree: ?*wlr.SceneTree,
|
||||||
|
|
||||||
destroy: wl.Listener(void) = wl.Listener(void).init(handleDestroy),
|
destroy: wl.Listener(void) = wl.Listener(void).init(handleDestroy),
|
||||||
commit: wl.Listener(*wlr.Surface) = wl.Listener(*wlr.Surface).init(handleCommit),
|
commit: wl.Listener(*wlr.Surface) = wl.Listener(*wlr.Surface).init(handleCommit),
|
||||||
new_popup: wl.Listener(*wlr.XdgPopup) = wl.Listener(*wlr.XdgPopup).init(handleNewPopup),
|
new_popup: wl.Listener(*wlr.XdgPopup) = wl.Listener(*wlr.XdgPopup).init(handleNewPopup),
|
||||||
@@ -44,14 +46,21 @@ pub fn create(
|
|||||||
wlr_xdg_popup: *wlr.XdgPopup,
|
wlr_xdg_popup: *wlr.XdgPopup,
|
||||||
root: *wlr.SceneTree,
|
root: *wlr.SceneTree,
|
||||||
parent: *wlr.SceneTree,
|
parent: *wlr.SceneTree,
|
||||||
|
image_capture_parent: ?*wlr.SceneTree,
|
||||||
) error{OutOfMemory}!void {
|
) error{OutOfMemory}!void {
|
||||||
const xdg_popup = try util.gpa.create(XdgPopup);
|
const xdg_popup = try util.gpa.create(XdgPopup);
|
||||||
errdefer util.gpa.destroy(xdg_popup);
|
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.* = .{
|
xdg_popup.* = .{
|
||||||
.wlr_xdg_popup = wlr_xdg_popup,
|
.wlr_xdg_popup = wlr_xdg_popup,
|
||||||
.root = root,
|
.root = root,
|
||||||
.tree = try parent.createSceneXdgSurface(wlr_xdg_popup.base),
|
.tree = try parent.createSceneXdgSurface(wlr_xdg_popup.base),
|
||||||
|
.image_capture_tree = image_capture_tree,
|
||||||
};
|
};
|
||||||
|
|
||||||
wlr_xdg_popup.events.destroy.add(&xdg_popup.destroy);
|
wlr_xdg_popup.events.destroy.add(&xdg_popup.destroy);
|
||||||
@@ -86,6 +95,7 @@ fn handleNewPopup(listener: *wl.Listener(*wlr.XdgPopup), wlr_xdg_popup: *wlr.Xdg
|
|||||||
wlr_xdg_popup,
|
wlr_xdg_popup,
|
||||||
xdg_popup.root,
|
xdg_popup.root,
|
||||||
xdg_popup.tree,
|
xdg_popup.tree,
|
||||||
|
xdg_popup.image_capture_tree,
|
||||||
) catch {
|
) catch {
|
||||||
wlr_xdg_popup.resource.postNoMemory();
|
wlr_xdg_popup.resource.postNoMemory();
|
||||||
return;
|
return;
|
||||||
|
|||||||
@@ -283,7 +283,12 @@ fn handleUnmap(listener: *wl.Listener(void)) void {
|
|||||||
fn handleNewPopup(listener: *wl.Listener(*wlr.XdgPopup), wlr_xdg_popup: *wlr.XdgPopup) void {
|
fn handleNewPopup(listener: *wl.Listener(*wlr.XdgPopup), wlr_xdg_popup: *wlr.XdgPopup) void {
|
||||||
const toplevel: *XdgToplevel = @fieldParentPtr("new_popup", listener);
|
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();
|
wlr_xdg_popup.resource.postNoMemory();
|
||||||
return;
|
return;
|
||||||
};
|
};
|
||||||
|
|||||||
Reference in New Issue
Block a user