aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
m---------deps/zig-wlroots0
-rw-r--r--river/Cursor.zig26
-rw-r--r--river/Output.zig9
3 files changed, 9 insertions, 26 deletions
diff --git a/deps/zig-wlroots b/deps/zig-wlroots
-Subproject 0ddfe81c5957fd36f8f8faf3d0870df97486066
+Subproject 68ce60769c6a8019c43de35197f4596eaac4df4
diff --git a/river/Cursor.zig b/river/Cursor.zig
index 99a0e3b..e74b300 100644
--- a/river/Cursor.zig
+++ b/river/Cursor.zig
@@ -237,20 +237,11 @@ pub fn deinit(self: *Self) void {
pub fn setTheme(self: *Self, theme: ?[*:0]const u8, _size: ?u32) !void {
const size = _size orelse default_size;
- self.xcursor_manager.destroy();
- self.xcursor_manager = try wlr.XcursorManager.create(theme, size);
-
- // For each output, ensure a theme of the proper scale is loaded
- var it = server.root.active_outputs.iterator(.forward);
- while (it.next()) |output| {
- const wlr_output = output.wlr_output;
- self.xcursor_manager.load(wlr_output.scale) catch
- log.err("failed to load xcursor theme '{?s}' at scale {}", .{ theme, wlr_output.scale });
- }
+ const xcursor_manager = try wlr.XcursorManager.create(theme, size);
+ errdefer xcursor_manager.destroy();
// If this cursor belongs to the default seat, set the xcursor environment
- // variables as well as the xwayland cursor theme and update the cursor
- // image if necessary.
+ // variables as well as the xwayland cursor theme.
if (self.seat == server.input_manager.defaultSeat()) {
const size_str = try std.fmt.allocPrintZ(util.gpa, "{}", .{size});
defer util.gpa.free(size_str);
@@ -258,11 +249,8 @@ pub fn setTheme(self: *Self, theme: ?[*:0]const u8, _size: ?u32) !void {
if (theme) |t| if (c.setenv("XCURSOR_THEME", t, 1) < 0) return error.OutOfMemory;
if (build_options.xwayland) {
- self.xcursor_manager.load(1) catch {
- log.err("failed to load xcursor theme '{?s}' at scale 1", .{theme});
- return;
- };
- const wlr_xcursor = self.xcursor_manager.getXcursor("left_ptr", 1).?;
+ try xcursor_manager.load(1);
+ const wlr_xcursor = xcursor_manager.getXcursor("left_ptr", 1).?;
const image = wlr_xcursor.images[0];
server.xwayland.setCursor(
image.buffer,
@@ -275,6 +263,10 @@ pub fn setTheme(self: *Self, theme: ?[*:0]const u8, _size: ?u32) !void {
}
}
+ // Everything fallible is now done so the the old xcursor_manager can be destroyed.
+ self.xcursor_manager.destroy();
+ self.xcursor_manager = xcursor_manager;
+
if (self.xcursor_name) |name| {
self.setXcursor(name);
}
diff --git a/river/Output.zig b/river/Output.zig
index 04d92ff..1c092ee 100644
--- a/river/Output.zig
+++ b/river/Output.zig
@@ -306,15 +306,6 @@ pub fn create(wlr_output: *wlr.Output) !void {
wlr_output.events.frame.add(&output.frame);
wlr_output.events.present.add(&output.present);
- // Ensure that a cursor image at the output's scale factor is loaded
- // for each seat.
- var it = server.input_manager.seats.first;
- while (it) |seat_node| : (it = seat_node.next) {
- const seat = &seat_node.data;
- seat.cursor.xcursor_manager.load(wlr_output.scale) catch
- log.err("failed to load xcursor theme at scale {}", .{wlr_output.scale});
- }
-
output.setTitle();
output.active_link.init();