Cursor: properly handle clients setting the cursor image
The new code to dedup XcursorManager.setCursorImage() calls for efficiency currently doesn't handle clients setting the cursor properly. This commit corrects this oversight.
This commit is contained in:
parent
2288778dd7
commit
334ede00e1
@ -65,7 +65,8 @@ const Mode = union(enum) {
|
||||
};
|
||||
|
||||
const Image = enum {
|
||||
none,
|
||||
/// The current image of the cursor is unknown, perhaps because it was set by a client.
|
||||
unknown,
|
||||
left_ptr,
|
||||
move,
|
||||
@"se-resize",
|
||||
@ -83,7 +84,7 @@ wlr_cursor: *wlr.Cursor,
|
||||
pointer_gestures: *wlr.PointerGesturesV1,
|
||||
xcursor_manager: *wlr.XcursorManager,
|
||||
|
||||
image: Image = .none,
|
||||
image: Image = .unknown,
|
||||
|
||||
constraint: ?*wlr.PointerConstraintV1 = null,
|
||||
|
||||
@ -217,6 +218,8 @@ pub fn handleViewUnmap(self: *Self, view: *View) void {
|
||||
/// as it does no checks to see if the the given image is already set. Therefore,
|
||||
/// do that check here.
|
||||
fn setImage(self: *Self, image: Image) void {
|
||||
assert(image != .unknown);
|
||||
|
||||
if (image == self.image) return;
|
||||
self.image = image;
|
||||
|
||||
@ -455,6 +458,7 @@ fn handleRequestSetCursor(
|
||||
// cursor moves between outputs.
|
||||
log.debug("focused client set cursor", .{});
|
||||
self.wlr_cursor.setSurface(event.surface, event.hotspot_x, event.hotspot_y);
|
||||
self.image = .unknown;
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user