Skip to content

Commit

Permalink
On X11, try alternative cursor icon names as well
Browse files Browse the repository at this point in the history
This should cover more icons.
  • Loading branch information
kchibisov committed Nov 24, 2023
1 parent 7103514 commit ecbe04c
Show file tree
Hide file tree
Showing 3 changed files with 18 additions and 4 deletions.
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ Unreleased` header.

# Unreleased

- On X11, check common alternative cursor names when loading cursor.
- On Windows, fix so `drag_window` and `drag_resize_window` can be called from another thread.

# 0.29.3
Expand Down
2 changes: 1 addition & 1 deletion Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@ cfg_aliases = "0.1.1"

[dependencies]
bitflags = "2"
cursor-icon = "1.0.0"
cursor-icon = "1.1.0"
log = "0.4"
mint = { version = "0.5.6", optional = true }
once_cell = "1.12"
Expand Down
19 changes: 16 additions & 3 deletions src/platform_impl/linux/x11/util/cursor.rs
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
use std::ffi::CString;
use std::iter;

use x11rb::connection::Connection;

Expand Down Expand Up @@ -56,10 +57,22 @@ impl XConnection {
None => return self.create_empty_cursor(),
};

let name = CString::new(cursor.name()).unwrap();
unsafe {
(self.xcursor.XcursorLibraryLoadCursor)(self.display, name.as_ptr() as *const c_char)
let mut xcursor = 0;
for &name in iter::once(&cursor.name()).chain(cursor.alt_names().iter()) {
let name = CString::new(name).unwrap();
xcursor = unsafe {
(self.xcursor.XcursorLibraryLoadCursor)(
self.display,
name.as_ptr() as *const c_char,
)
};

if xcursor != 0 {
break;
}
}

xcursor
}

fn update_cursor(&self, window: xproto::Window, cursor: ffi::Cursor) -> Result<(), X11Error> {
Expand Down

0 comments on commit ecbe04c

Please sign in to comment.