mirror of
https://github.com/ghostty-org/ghostty.git
synced 2025-07-15 00:06:09 +03:00
Merge pull request #2771 from ghostty-org/push-quwzwysosskr
mode 2031 should send updates on any color palette change
This commit is contained in:
@ -837,7 +837,13 @@ pub fn handleMessage(self: *Surface, msg: Message) !void {
|
||||
}, .unlocked);
|
||||
},
|
||||
|
||||
.color_change => |change| try self.rt_app.performAction(
|
||||
.color_change => |change| {
|
||||
// On any color change, we have to report for mode 2031
|
||||
// if it is enabled.
|
||||
self.reportColorScheme(false);
|
||||
|
||||
// Notify our apprt
|
||||
try self.rt_app.performAction(
|
||||
.{ .surface = self },
|
||||
.color_change,
|
||||
.{
|
||||
@ -851,7 +857,8 @@ pub fn handleMessage(self: *Surface, msg: Message) !void {
|
||||
.g = change.color.g,
|
||||
.b = change.color.b,
|
||||
},
|
||||
),
|
||||
);
|
||||
},
|
||||
|
||||
.set_mouse_shape => |shape| {
|
||||
log.debug("changing mouse shape: {}", .{shape});
|
||||
@ -915,7 +922,7 @@ pub fn handleMessage(self: *Surface, msg: Message) !void {
|
||||
|
||||
.renderer_health => |health| self.updateRendererHealth(health),
|
||||
|
||||
.report_color_scheme => try self.reportColorScheme(),
|
||||
.report_color_scheme => |force| self.reportColorScheme(force),
|
||||
|
||||
.present_surface => try self.presentSurface(),
|
||||
|
||||
@ -952,8 +959,18 @@ fn passwordInput(self: *Surface, v: bool) !void {
|
||||
try self.queueRender();
|
||||
}
|
||||
|
||||
/// Sends a DSR response for the current color scheme to the pty.
|
||||
fn reportColorScheme(self: *Surface) !void {
|
||||
/// Sends a DSR response for the current color scheme to the pty. If
|
||||
/// force is false then we only send the response if the terminal mode
|
||||
/// 2031 is enabled.
|
||||
fn reportColorScheme(self: *Surface, force: bool) void {
|
||||
if (!force) {
|
||||
self.renderer_state.mutex.lock();
|
||||
defer self.renderer_state.mutex.unlock();
|
||||
if (!self.renderer_state.terminal.modes.get(.report_color_scheme)) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
const output = switch (self.config_conditional_state.theme) {
|
||||
.light => "\x1B[?997;2n",
|
||||
.dark => "\x1B[?997;1n",
|
||||
@ -3660,12 +3677,7 @@ pub fn colorSchemeCallback(self: *Surface, scheme: apprt.ColorScheme) !void {
|
||||
self.notifyConfigConditionalState();
|
||||
|
||||
// If mode 2031 is on, then we report the change live.
|
||||
const report = report: {
|
||||
self.renderer_state.mutex.lock();
|
||||
defer self.renderer_state.mutex.unlock();
|
||||
break :report self.renderer_state.terminal.modes.get(.report_color_scheme);
|
||||
};
|
||||
if (report) try self.reportColorScheme();
|
||||
self.reportColorScheme(false);
|
||||
}
|
||||
|
||||
pub fn posToViewport(self: Surface, xpos: f64, ypos: f64) terminal.point.Coordinate {
|
||||
|
@ -58,8 +58,10 @@ pub const Message = union(enum) {
|
||||
/// Health status change for the renderer.
|
||||
renderer_health: renderer.Health,
|
||||
|
||||
/// Report the color scheme
|
||||
report_color_scheme: void,
|
||||
/// Report the color scheme. The bool parameter is whether to force or not.
|
||||
/// If force is true, the color scheme should be reported even if mode
|
||||
/// 2031 is not set.
|
||||
report_color_scheme: bool,
|
||||
|
||||
/// Tell the surface to present itself to the user. This may require raising
|
||||
/// a window and switching tabs.
|
||||
|
@ -126,6 +126,9 @@ pub const StreamHandler = struct {
|
||||
if (self.default_cursor) self.setCursorStyle(.default) catch |err| {
|
||||
log.warn("failed to set default cursor style: {}", .{err});
|
||||
};
|
||||
|
||||
// The config could have changed any of our colors so update mode 2031
|
||||
self.surfaceMessageWriter(.{ .report_color_scheme = false });
|
||||
}
|
||||
|
||||
inline fn surfaceMessageWriter(
|
||||
@ -767,7 +770,7 @@ pub const StreamHandler = struct {
|
||||
self.messageWriter(msg);
|
||||
},
|
||||
|
||||
.color_scheme => self.surfaceMessageWriter(.{ .report_color_scheme = {} }),
|
||||
.color_scheme => self.surfaceMessageWriter(.{ .report_color_scheme = true }),
|
||||
}
|
||||
}
|
||||
|
||||
@ -892,6 +895,9 @@ pub const StreamHandler = struct {
|
||||
) !void {
|
||||
self.terminal.fullReset();
|
||||
try self.setMouseShape(.text);
|
||||
|
||||
// Reset resets our palette so we report it for mode 2031.
|
||||
self.surfaceMessageWriter(.{ .report_color_scheme = false });
|
||||
}
|
||||
|
||||
pub fn queryKittyKeyboard(self: *StreamHandler) !void {
|
||||
|
Reference in New Issue
Block a user