@@ -1258,8 +1258,13 @@ impl App { |
| 1258 | 1258 | |
| 1259 | 1259 | /// Blit surface to window. |
| 1260 | 1260 | fn blit(&mut self) -> Result<()> { |
| 1261 | | - let data = self.renderer.pixel_data() |
| 1262 | | - .map_err(|e| anyhow::anyhow!("Failed to get surface data: {}", e))?; |
| 1261 | + let data = { |
| 1262 | + let surface = self.renderer.surface_mut(); |
| 1263 | + let data_ref = surface |
| 1264 | + .data() |
| 1265 | + .map_err(|e| anyhow::anyhow!("Failed to get surface data: {}", e))?; |
| 1266 | + data_ref.to_vec() |
| 1267 | + }; |
| 1263 | 1268 | |
| 1264 | 1269 | let conn = self.window.connection(); |
| 1265 | 1270 | conn.inner().put_image( |
@@ -1418,7 +1423,7 @@ impl App { |
| 1418 | 1423 | pub fn run(mut self) -> Result<()> { |
| 1419 | 1424 | let config = EventLoopConfig { |
| 1420 | 1425 | fps: 30, |
| 1421 | | - continuous_redraw: true, |
| 1426 | + continuous_redraw: false, |
| 1422 | 1427 | }; |
| 1423 | 1428 | let mut event_loop = EventLoop::new(&self.window, config)?; |
| 1424 | 1429 | |
@@ -1699,31 +1704,32 @@ impl App { |
| 1699 | 1704 | self.should_quit = true; |
| 1700 | 1705 | } |
| 1701 | 1706 | |
| 1702 | | - _ => {} |
| 1703 | | - } |
| 1704 | | - |
| 1705 | | - // Periodic tasks (run each frame via continuous_redraw) |
| 1706 | | - // Clear stale jump pattern (1.5s timeout) |
| 1707 | | - if let Some(t) = self.jump_time { |
| 1708 | | - if t.elapsed().as_millis() > 1500 && !self.jump_pattern.is_empty() { |
| 1709 | | - self.jump_pattern.clear(); |
| 1710 | | - self.jump_time = None; |
| 1711 | | - ev_loop.request_redraw(); |
| 1712 | | - } |
| 1713 | | - } |
| 1707 | + InputEvent::Idle => { |
| 1708 | + // Clear stale jump pattern (1.5s timeout) |
| 1709 | + if let Some(t) = self.jump_time { |
| 1710 | + if t.elapsed().as_millis() > 1500 && !self.jump_pattern.is_empty() { |
| 1711 | + self.jump_pattern.clear(); |
| 1712 | + self.jump_time = None; |
| 1713 | + ev_loop.request_redraw(); |
| 1714 | + } |
| 1715 | + } |
| 1714 | 1716 | |
| 1715 | | - if self.last_refresh.elapsed().as_secs_f64() >= self.refresh_interval { |
| 1716 | | - if self.daemon_available { |
| 1717 | | - self.refresh_data(); |
| 1718 | | - self.update_header(); |
| 1719 | | - ev_loop.request_redraw(); |
| 1720 | | - } else { |
| 1721 | | - self.daemon_available = Self::check_daemon(); |
| 1722 | | - if self.daemon_available { |
| 1723 | | - ev_loop.request_redraw(); |
| 1717 | + if self.last_refresh.elapsed().as_secs_f64() >= self.refresh_interval { |
| 1718 | + if self.daemon_available { |
| 1719 | + self.refresh_data(); |
| 1720 | + self.update_header(); |
| 1721 | + ev_loop.request_redraw(); |
| 1722 | + } else { |
| 1723 | + self.daemon_available = Self::check_daemon(); |
| 1724 | + if self.daemon_available { |
| 1725 | + ev_loop.request_redraw(); |
| 1726 | + } |
| 1727 | + self.last_refresh = Instant::now(); |
| 1728 | + } |
| 1724 | 1729 | } |
| 1725 | | - self.last_refresh = Instant::now(); |
| 1726 | 1730 | } |
| 1731 | + |
| 1732 | + _ => {} |
| 1727 | 1733 | } |
| 1728 | 1734 | |
| 1729 | 1735 | if ev_loop.needs_redraw() { |