From bd2dfa7a5586d418e7dae5aac3aa904668feadf1 Mon Sep 17 00:00:00 2001 From: Kirill Chibisov Date: Mon, 13 Nov 2023 17:10:47 +0400 Subject: Fix visual bell getting stuck on macOS Fixes #7325. --- alacritty/src/display/window.rs | 4 +--- alacritty/src/window_context.rs | 9 ++++++++- 2 files changed, 9 insertions(+), 4 deletions(-) (limited to 'alacritty/src') diff --git a/alacritty/src/display/window.rs b/alacritty/src/display/window.rs index f5128e75..7dc6375e 100644 --- a/alacritty/src/display/window.rs +++ b/alacritty/src/display/window.rs @@ -235,9 +235,7 @@ impl Window { #[inline] pub fn request_redraw(&mut self) { - // No need to request a frame when we don't have one. The next `Frame` event will check the - // `dirty` flag on the display and submit a redraw request. - if self.has_frame && !self.requested_redraw { + if !self.requested_redraw { self.requested_redraw = true; self.window.request_redraw(); } diff --git a/alacritty/src/window_context.rs b/alacritty/src/window_context.rs index 329e7ef8..c5b00085 100644 --- a/alacritty/src/window_context.rs +++ b/alacritty/src/window_context.rs @@ -380,7 +380,13 @@ impl WindowContext { // Request immediate re-draw if visual bell animation is not finished yet. if !self.display.visual_bell.completed() { - self.display.window.request_redraw(); + // We can get an OS redraw which bypasses alacritty's frame throttling, thus + // marking the window as dirty when we don't have frame yet. + if self.display.window.has_frame { + self.display.window.request_redraw(); + } else { + self.dirty = true; + } } // Redraw the window. @@ -481,6 +487,7 @@ impl WindowContext { // Don't call `request_redraw` when event is `RedrawRequested` since the `dirty` flag // represents the current frame, but redraw is for the next frame. if self.dirty + && self.display.window.has_frame && !self.occluded && !matches!(event, WinitEvent::WindowEvent { event: WindowEvent::RedrawRequested, .. }) { -- cgit