diff options
-rw-r--r-- | src/window.rs | 22 |
1 files changed, 15 insertions, 7 deletions
diff --git a/src/window.rs b/src/window.rs index 72ae143..af60ef8 100644 --- a/src/window.rs +++ b/src/window.rs @@ -15,6 +15,7 @@ pub struct Window { #[allow(dead_code)] context: softbuffer::Context, render_request: RenderRequest, previous_cursor_position: Option<Point>, + previous_cursor_icon: CursorIcon, } impl Window { @@ -55,6 +56,7 @@ impl Window { context, render_request: RenderRequest::REDRAW, previous_cursor_position: None, + previous_cursor_icon: CursorIcon::Default, } } @@ -68,7 +70,10 @@ impl Window { pub fn update_cursor_icon(&mut self) { let icon = self.controller.cursor_icon().unwrap_or(CursorIcon::Default); - self.window.set_cursor_icon(icon); + if icon != self.previous_cursor_icon { + self.window.set_cursor_icon(icon); + self.previous_cursor_icon = icon; + } } /// This method only requests that the window size be changed; it does not @@ -92,17 +97,20 @@ impl Window { self.render_request = RenderRequest::REDRAW; self.resize_buffer_and_surface(dimensions * pixel_scale); } else { + // Prevent the window properties from being modified every frame + // and interrupting the actions of the window manager. + if pixel_scale == self.pixel_scale { + return; + } self.window.set_resizable(true); let size = self.controller.minimum_size().map(|d| dim_to_size(d * pixel_scale)); self.window.set_min_inner_size(size); let size = self.controller.maximum_size().map(|d| dim_to_size(d * pixel_scale)); self.window.set_max_inner_size(size); - if pixel_scale != self.pixel_scale { - let increment = PhysicalSize { width: pixel_scale, height: pixel_scale }; - self.window.set_resize_increments(Some(increment)); - self.render_request = RenderRequest::REDRAW; - self.resize_buffer_and_surface(self.surface_dimensions); - } + let increment = PhysicalSize { width: pixel_scale, height: pixel_scale }; + self.window.set_resize_increments(Some(increment)); + self.render_request = RenderRequest::REDRAW; + self.resize_buffer_and_surface(self.surface_dimensions); } } |