aboutsummaryrefslogtreecommitdiff
path: root/vendor/libghostty-vt/src/renderer/Thread.zig
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/libghostty-vt/src/renderer/Thread.zig')
-rw-r--r--vendor/libghostty-vt/src/renderer/Thread.zig18
1 files changed, 14 insertions, 4 deletions
diff --git a/vendor/libghostty-vt/src/renderer/Thread.zig b/vendor/libghostty-vt/src/renderer/Thread.zig
index 50872137..48864219 100644
--- a/vendor/libghostty-vt/src/renderer/Thread.zig
+++ b/vendor/libghostty-vt/src/renderer/Thread.zig
@@ -360,10 +360,16 @@ fn drainMailbox(self: *Thread) !void {
// Visibility affects our QoS class
self.setQosClass();
- // If we became visible then we immediately trigger a draw.
- // We don't need to update frame data because that should
- // still be happening.
- if (v) self.drawFrame(false);
+ // If we became visible then we immediately rebuild cells
+ // (renderCallback skips updateFrame while invisible) and draw.
+ if (v) {
+ self.renderer.updateFrame(
+ self.state,
+ self.flags.cursor_blink_visible,
+ ) catch |err|
+ log.warn("error rendering on visibility regain err={}", .{err});
+ self.drawFrame(false);
+ }
// Notify the renderer so it can update any state.
self.renderer.setVisible(v);
@@ -606,6 +612,10 @@ fn renderCallback(
return .disarm;
};
+ // If we're not visible there's no point spending CPU rebuilding cells —
+ // we'll catch up when the .visible mailbox message flips us back on.
+ if (!t.flags.visible) return .disarm;
+
// Update our frame data
t.renderer.updateFrame(
t.state,