mirror of
https://github.com/MezzalunaWM/Mezzaluna.git
synced 2026-03-07 11:49:52 -05:00
Stop adding listeners every time a view is mapped and removing when unmapped
This stops the following assertion from failing: mez: types/xdg_shell/wlr_xdg_surface.c:530: destroy_xdg_surface: Assertion `wl_list_empty(&surface->events.ack_configure.listener_list)' failed. We also cleanup decorations now
This commit is contained in:
parent
f60a2c5c37
commit
94e8388e7c
1 changed files with 19 additions and 16 deletions
35
src/View.zig
35
src/View.zig
|
|
@ -26,7 +26,7 @@ scene_tree: *wlr.SceneTree,
|
|||
surface_tree: *wlr.SceneTree,
|
||||
scene_node_data: SceneNodeData,
|
||||
borders: [4]*wlr.SceneRect,
|
||||
border_width: i32, // TODO: move this to some config controlled by lua
|
||||
border_width: i32,
|
||||
geometry: wlr.Box, // The total geometry including borders
|
||||
|
||||
// Surface Listeners
|
||||
|
|
@ -94,6 +94,13 @@ pub fn init(xdg_toplevel: *wlr.XdgToplevel) *View {
|
|||
self.xdg_toplevel.base.events.new_popup.add(&self.new_popup);
|
||||
self.xdg_toplevel.base.events.ack_configure.add(&self.ack_configure);
|
||||
|
||||
self.xdg_toplevel.events.request_fullscreen.add(&self.request_fullscreen);
|
||||
self.xdg_toplevel.events.request_move.add(&self.request_move);
|
||||
self.xdg_toplevel.events.request_resize.add(&self.request_resize);
|
||||
self.xdg_toplevel.events.set_app_id.add(&self.set_app_id);
|
||||
self.xdg_toplevel.events.set_title.add(&self.set_title);
|
||||
// self.xdg_toplevel.events.set_parent.add(&self.set_parent);
|
||||
|
||||
for (self.borders, 0..) |_, i| {
|
||||
const color: [4]f32 = .{ 0, 0, 0, 1 };
|
||||
self.borders[i] = try wlr.SceneTree.createSceneRect(self.scene_tree, 0, 0, &color);
|
||||
|
|
@ -198,13 +205,6 @@ fn handleMap(listener: *wl.Listener(void)) void {
|
|||
.right = true,
|
||||
});
|
||||
|
||||
view.xdg_toplevel.events.request_fullscreen.add(&view.request_fullscreen);
|
||||
view.xdg_toplevel.events.request_move.add(&view.request_move);
|
||||
view.xdg_toplevel.events.request_resize.add(&view.request_resize);
|
||||
view.xdg_toplevel.events.set_app_id.add(&view.set_app_id);
|
||||
view.xdg_toplevel.events.set_title.add(&view.set_title);
|
||||
// view.xdg_toplevel.events.set_parent.add(&view.set_parent);
|
||||
|
||||
view.mapped = true;
|
||||
server.events.exec("ViewMapPost", .{view.id});
|
||||
}
|
||||
|
|
@ -223,13 +223,6 @@ fn handleUnmap(listener: *wl.Listener(void)) void {
|
|||
}
|
||||
}
|
||||
|
||||
view.request_fullscreen.link.remove();
|
||||
view.request_move.link.remove();
|
||||
view.request_resize.link.remove();
|
||||
view.set_title.link.remove();
|
||||
view.set_app_id.link.remove();
|
||||
view.ack_configure.link.remove();
|
||||
|
||||
server.events.exec("ViewUnmapPost", .{view.id});
|
||||
}
|
||||
|
||||
|
|
@ -237,12 +230,22 @@ fn handleDestroy(listener: *wl.Listener(void)) void {
|
|||
const view: *View = @fieldParentPtr("destroy", listener);
|
||||
|
||||
// Remove decorations
|
||||
for (view.borders) |b| {
|
||||
b.node.destroy();
|
||||
}
|
||||
|
||||
// remove listeners
|
||||
view.destroy.link.remove();
|
||||
view.ack_configure.link.remove();
|
||||
view.map.link.remove();
|
||||
view.unmap.link.remove();
|
||||
view.commit.link.remove();
|
||||
view.destroy.link.remove();
|
||||
view.new_popup.link.remove();
|
||||
view.request_fullscreen.link.remove();
|
||||
view.request_move.link.remove();
|
||||
view.request_resize.link.remove();
|
||||
view.set_title.link.remove();
|
||||
view.set_app_id.link.remove();
|
||||
|
||||
view.xdg_toplevel.base.surface.data = null;
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue