diff --git a/compositor/src/input.rs b/compositor/src/input.rs index f0b6267..12d83b8 100644 --- a/compositor/src/input.rs +++ b/compositor/src/input.rs @@ -239,10 +239,13 @@ impl Ferese { let pointer = self.seat.get_pointer().expect("seat has a pointer"); let position = pointer.current_location(); let focus = self.surface_under(position); - let (scale_x, scale_y) = self - .window_under_visual(position) - .and_then(|window| self.visual_scale_for_window(&window)) - .unwrap_or((1.0, 1.0)); + let (scale_x, scale_y) = if self.overview.is_presenting() { + self.window_under_visual(position) + .and_then(|window| self.visual_scale_for_window(&window)) + .unwrap_or((1.0, 1.0)) + } else { + (1.0, 1.0) + }; let delta = event.delta(); let delta_unaccel = event.delta_unaccel(); diff --git a/compositor/src/state.rs b/compositor/src/state.rs index def7b7a..0a749b2 100644 --- a/compositor/src/state.rs +++ b/compositor/src/state.rs @@ -1,5 +1,5 @@ use std::{ - collections::{HashMap, HashSet}, + collections::{HashMap, HashSet, hash_map::Entry}, error::Error, ffi::OsString, sync::Arc, @@ -1468,12 +1468,13 @@ impl Ferese { if scrolling.is_none() { self.viewport_coupled_widths.remove(&id); } - let committed_size = client_size(&window); - let had_geometry = self.window_geometry.contains_key(&id); - let geometry = self - .window_geometry - .entry(id) - .or_insert_with(|| WindowGeometry::new(rect, committed_size)); + let (geometry, had_geometry) = match self.window_geometry.entry(id) { + Entry::Occupied(entry) => (entry.into_mut(), true), + Entry::Vacant(entry) => ( + entry.insert(WindowGeometry::new(rect, client_size(&window))), + false, + ), + }; let mode = if is_fullscreen { PresentationMode::Fullscreen } else if is_maximized { @@ -1852,7 +1853,7 @@ impl Ferese { settled_coupled_widths.push(id); } } - if let Some(size) = geometry.client.expire_wait(self.start_time.elapsed()) { + if let Some(size) = geometry.client.expire_wait(now) { tracing::warn!( ?id, configured_width = size.width, @@ -1861,7 +1862,7 @@ impl Ferese { "client did not commit the final configured size within 500 ms" ); } - if let Some(size) = geometry.presentation_size_request(self.start_time.elapsed()) + if let Some(size) = geometry.presentation_size_request(now) && !self.natural_floating_pending.contains(&id) && let Some(toplevel) = window.toplevel() {