From 6a093fecee3a8734b38343a9335faf8ab00b02d5 Mon Sep 17 00:00:00 2001 From: Isaac Freund Date: Wed, 22 Dec 2021 20:15:57 +0000 Subject: river: remove wlroots 0.14 workarounds Since updating to wlroots 0.15 we can remove several workarounds we had in place due to wlroots improvements. --- deps/zig-wlroots | 2 +- river/Cursor.zig | 2 -- river/Output.zig | 4 ++-- river/Root.zig | 11 ++--------- river/Seat.zig | 20 -------------------- river/Server.zig | 2 +- 6 files changed, 6 insertions(+), 35 deletions(-) diff --git a/deps/zig-wlroots b/deps/zig-wlroots index a813d6c..0bb3207 160000 --- a/deps/zig-wlroots +++ b/deps/zig-wlroots @@ -1 +1 @@ -Subproject commit a813d6c1c7b88dea0ba3b0eb28fe92206ad82ea6 +Subproject commit 0bb32072a435561cd2310901f8ee0c8e41b150db diff --git a/river/Cursor.zig b/river/Cursor.zig index f78800b..30bd826 100644 --- a/river/Cursor.zig +++ b/river/Cursor.zig @@ -677,8 +677,6 @@ fn xwaylandUnmanagedSurfaceAt(lx: f64, ly: f64) ?SurfaceAtResult { } fn surfaceAtFilter(view: *View, filter_tags: u32) bool { - // TODO(wlroots): we can remove this view.surface != null check as surfaceAt - // will start filtering by mapped views by default in 0.15.0 return view.surface != null and view.current.tags & filter_tags != 0; } diff --git a/river/Output.zig b/river/Output.zig index e00624a..8a5459a 100644 --- a/river/Output.zig +++ b/river/Output.zig @@ -317,7 +317,7 @@ fn arrangeLayer( ); // This will cause the output to be rearranged, so it's fine to // stop this attempt early. - layer_surface.wlr_layer_surface.close(); + layer_surface.wlr_layer_surface.destroy(); return; } else if (current_state.desired_width == 0) { std.debug.assert(current_state.anchor.right and current_state.anchor.left); @@ -342,7 +342,7 @@ fn arrangeLayer( "margins of layer surface '{s}' are too large to be reasonably handled. Closing.", .{layer_surface.wlr_layer_surface.namespace}, ); - layer_surface.wlr_layer_surface.close(); + layer_surface.wlr_layer_surface.destroy(); // This will cause the output to be rearranged, so it's fine to // stop this attempt early. return; diff --git a/river/Root.zig b/river/Root.zig index 732b661..020a73a 100644 --- a/river/Root.zig +++ b/river/Root.zig @@ -179,15 +179,8 @@ pub fn removeOutput(self: *Self, output: *Output) void { // Close all layer surfaces on the removed output for (output.layers) |*layer| { - // Closing the layer surface will cause LayerSurface.handleUnmap() - // to be called synchronously, which will remove it from this list. - while (layer.first) |layer_node| { - const layer_surface = &layer_node.data; - - layer_surface.wlr_layer_surface.close(); - layer_surface.wlr_layer_surface.output = null; - layer_surface.output = undefined; - } + // Destroying the layer surface will cause it to be removed from this list. + while (layer.first) |layer_node| layer_node.data.wlr_layer_surface.destroy(); } // If any seat has the removed output focused, focus the fallback one diff --git a/river/Seat.zig b/river/Seat.zig index 8cf98c3..d7d8d97 100644 --- a/river/Seat.zig +++ b/river/Seat.zig @@ -84,7 +84,6 @@ status_trackers: std.SinglyLinkedList(SeatStatus) = .{}, /// True if a pointer drag is currently in progress pointer_drag: bool = false, -pointer_drag_idle_source: ?*wl.EventSource = null, request_set_selection: wl.Listener(*wlr.Seat.event.RequestSetSelection) = wl.Listener(*wlr.Seat.event.RequestSetSelection).init(handleRequestSetSelection), @@ -129,8 +128,6 @@ pub fn deinit(self: *Self) void { self.focus_stack.remove(node); util.gpa.destroy(node); } - - if (self.pointer_drag_idle_source) |idle_source| idle_source.remove(); } /// Set the current focus. If a visible view is passed it will be focused. @@ -460,7 +457,6 @@ fn handleRequestStartDrag( if (self.pointer_drag) { log.debug("ignoring request to start pointer drag, " ++ "another pointer drag is already in progress", .{}); - if (event.drag.source) |source| source.destroy(); return; } @@ -492,22 +488,6 @@ fn handlePointerDragDestroy(listener: *wl.Listener(*wlr.Drag), wlr_drag: *wlr.Dr const self = @fieldParentPtr(Self, "pointer_drag_destroy", listener); self.pointer_drag_destroy.link.remove(); - // TODO(wlroots): wlroots 0.14 doesn't send the wl_data_device.leave event - // until after this signal has been emitted. Triggering a wl_pointer.enter - // before the wl_data_device.leave breaks clients, so use an idle event - // source as a workaround. This has been fixed on the wlroots master branch - // in commit c9ba9e82. - const event_loop = server.wl_server.getEventLoop(); - assert(self.pointer_drag_idle_source == null); - self.pointer_drag_idle_source = event_loop.addIdle(*Self, finishPointerDragDestroy, self) catch { - log.crit("out of memory", .{}); - wlr_drag.seat_client.client.postNoMemory(); - return; - }; -} - -fn finishPointerDragDestroy(self: *Self) callconv(.C) void { - self.pointer_drag_idle_source = null; self.pointer_drag = false; self.cursor.checkFocusFollowsCursor(); self.cursor.updateState(); diff --git a/river/Server.zig b/river/Server.zig index f233546..bff5d58 100644 --- a/river/Server.zig +++ b/river/Server.zig @@ -219,7 +219,7 @@ fn handleNewLayerSurface(listener: *wl.Listener(*wlr.LayerSurfaceV1), wlr_layer_ const output = self.input_manager.defaultSeat().focused_output; if (output == &self.root.noop_output) { log.err("no output available for layer surface '{s}'", .{wlr_layer_surface.namespace}); - wlr_layer_surface.close(); + wlr_layer_surface.destroy(); return; } -- cgit v1.2.3