diff --git a/src/app.rs b/src/app.rs index 0684306..0f2a525 100644 --- a/src/app.rs +++ b/src/app.rs @@ -1804,7 +1804,15 @@ impl LauncherApp { impl eframe::App for LauncherApp { fn update(&mut self, ctx: &egui::Context, _frame: &mut eframe::Frame) { - ctx.request_repaint_after(std::time::Duration::from_millis(500)); + // Present at a steady ~60 FPS while the window is open. egui is normally + // reactive and would idle at ~2 FPS (a 500 ms repaint), but on a G-Sync / + // FreeSync (VRR) display that sits below the VRR floor: the panel engages + // low-framerate compensation, and every hover/animation briefly spikes the + // rate and drops back, so the refresh rate keeps swinging and the panel + // visibly flickers. A constant, in-range cadence gives VRR a single rate to + // lock onto and removes the flicker. 16 ms is monitor-independent and cheap + // for a UI this small; vsync (on by default) keeps present times regular. + ctx.request_repaint_after(std::time::Duration::from_millis(16)); self.drive_restart_queue(); egui::TopBottomPanel::top("header")