From 8dc45386622e14618b79f3285e61032820764b1f Mon Sep 17 00:00:00 2001 From: En-En <39373446+En-En-Code@users.noreply.github.com> Date: Sun, 22 Jun 2025 22:09:39 +0000 Subject: [PATCH] Removed additional dubious unwraps The wl_keyboard Enter event, wl_keyboard Leave event, the wl_touch Self::Down event and the ServerState::reconfigure_window function had similar uses of `unwrap` which appear to not consider the distinct query preparation and query execution stages. --- src/server/event.rs | 62 +++++++++++++++++++++++++-------------------- src/server/mod.rs | 6 +++-- 2 files changed, 39 insertions(+), 29 deletions(-) diff --git a/src/server/event.rs b/src/server/event.rs index 6f5e509..141d97a 100644 --- a/src/server/event.rs +++ b/src/server/event.rs @@ -634,45 +634,51 @@ impl Event for client::wl_keyboard::Event { surface, keys, } => { - if let Some(mut query) = surface.data().copied().and_then(|key| { + let Some(mut query) = surface.data().copied().and_then(|key| { state .world .query_one::<(&x::Window, &WlSurface, Option<&OnOutput>)>(key) .ok() - }) { - let (window, surface, output) = query.get().unwrap(); - state.last_kb_serial = Some(( - data.get::<&client::wl_seat::WlSeat>() - .as_deref() - .unwrap() - .clone(), - serial, - )); - let output_name = get_output_name(output, &state.world); - state.to_focus = Some(FocusData { - window: *window, - output_name, - }); - keyboard.enter(serial, surface, keys); - } + }) else { + return; + }; + let Some((window, surface, output)) = query.get() else { + return; + }; + state.last_kb_serial = Some(( + data.get::<&client::wl_seat::WlSeat>() + .as_deref() + .unwrap() + .clone(), + serial, + )); + let output_name = get_output_name(output, &state.world); + state.to_focus = Some(FocusData { + window: *window, + output_name, + }); + keyboard.enter(serial, surface, keys); } client::wl_keyboard::Event::Leave { serial, surface } => { if !surface.is_alive() { return; } - if let Some(mut query) = surface + let Some(mut query) = surface .data() .copied() .and_then(|key| state.world.query_one::<(&x::Window, &WlSurface)>(key).ok()) - { - let (window, surface) = query.get().unwrap(); - if state.to_focus.as_ref().map(|d| d.window) == Some(*window) { - state.to_focus.take(); - } else { - state.unfocus = true; - } - keyboard.leave(serial, surface); + else { + return; + }; + let Some((window, surface)) = query.get() else { + return; + }; + if state.to_focus.as_ref().map(|d| d.window) == Some(*window) { + state.to_focus.take(); + } else { + state.unfocus = true; } + keyboard.leave(serial, surface); } client::wl_keyboard::Event::Key { serial, @@ -734,8 +740,10 @@ impl Event for client::wl_touch::Event { }) else { return; }; + let Some((s_surface, s_factor)) = s_query.get() else { + return; + }; - let (s_surface, s_factor) = s_query.get().unwrap(); cmd.insert(target, (*s_factor,)); let touch = state.world.get::<&WlTouch>(target).unwrap(); touch.down(serial, time, s_surface, id, x * s_factor.0, y * s_factor.0); diff --git a/src/server/mod.rs b/src/server/mod.rs index 296021f..da9d832 100644 --- a/src/server/mod.rs +++ b/src/server/mod.rs @@ -736,8 +736,10 @@ impl ServerState { debug!("not reconfiguring unknown window {:?}", event.window()); return; }; - - let mut win = data.get::<&mut WindowData>().unwrap(); + let Some(mut win) = data.get::<&mut WindowData>() else { + debug!("not reconfiguring unknown window {:?}", event.window()); + return; + }; let dims = WindowDims { x: event.x(),