aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/cursor.rs17
-rw-r--r--src/niri.rs23
2 files changed, 25 insertions, 15 deletions
diff --git a/src/cursor.rs b/src/cursor.rs
index 6bf92cd1..bdaba542 100644
--- a/src/cursor.rs
+++ b/src/cursor.rs
@@ -224,7 +224,7 @@ pub enum RenderCursor {
},
}
-type TextureCache = HashMap<(CursorIcon, i32), Vec<TextureBuffer<GlesTexture>>>;
+type TextureCache = HashMap<(CursorIcon, i32), Vec<Option<TextureBuffer<GlesTexture>>>>;
#[derive(Default)]
pub struct CursorTextureCache {
@@ -243,7 +243,7 @@ impl CursorTextureCache {
scale: i32,
cursor: &XCursor,
idx: usize,
- ) -> TextureBuffer<GlesTexture> {
+ ) -> Option<TextureBuffer<GlesTexture>> {
self.cache
.borrow_mut()
.entry((icon, scale))
@@ -254,7 +254,7 @@ impl CursorTextureCache {
.map(|frame| {
let _span = tracy_client::span!("create TextureBuffer");
- TextureBuffer::from_memory(
+ let buffer = TextureBuffer::from_memory(
renderer,
&frame.pixels_rgba,
Fourcc::Abgr8888,
@@ -263,8 +263,15 @@ impl CursorTextureCache {
scale,
Transform::Normal,
None,
- )
- .unwrap()
+ );
+
+ match buffer {
+ Ok(x) => Some(x),
+ Err(err) => {
+ warn!("error creating a cursor texture: {err:?}");
+ None
+ }
+ }
})
.collect()
})[idx]
diff --git a/src/niri.rs b/src/niri.rs
index 94a2056f..dc1efd87 100644
--- a/src/niri.rs
+++ b/src/niri.rs
@@ -1660,16 +1660,19 @@ impl Niri {
idx,
);
- let pointer_elements = vec![OutputRenderElements::NamedPointer(
- PrimaryGpuTextureRenderElement(TextureRenderElement::from_texture_buffer(
- pointer_pos.to_f64(),
- &texture,
- None,
- None,
- None,
- Kind::Cursor,
- )),
- )];
+ let mut pointer_elements = vec![];
+ if let Some(texture) = texture {
+ pointer_elements.push(OutputRenderElements::NamedPointer(
+ PrimaryGpuTextureRenderElement(TextureRenderElement::from_texture_buffer(
+ pointer_pos.to_f64(),
+ &texture,
+ None,
+ None,
+ None,
+ Kind::Cursor,
+ )),
+ ));
+ }
(pointer_elements, pointer_pos)
}