mirror of
https://github.com/ghostty-org/ghostty.git
synced 2025-10-17 07:16:12 +00:00
App applies conditional state, supports theme setting
The prior light/dark mode awareness work works on surface-level APIs. As a result, configurations used at the app-level (such as split divider colors, inactive split opacity, etc.) are not aware of the current theme configurations and default to the "light" theme. This commit adds APIs to specify app-level color scheme changes. This changes the configuration for the app and sets the default conditional state to use that new theme. This latter point makes it so that future surfaces use the correct theme on load rather than requiring some apprt event loop ticks. Some users have already reported a short "flicker" to load the correct theme, so this should help alleviate that.
This commit is contained in:
@@ -359,11 +359,25 @@ const DerivedConfig = struct {
|
||||
pub fn init(
|
||||
self: *Surface,
|
||||
alloc: Allocator,
|
||||
config: *const configpkg.Config,
|
||||
config_original: *const configpkg.Config,
|
||||
app: *App,
|
||||
rt_app: *apprt.runtime.App,
|
||||
rt_surface: *apprt.runtime.Surface,
|
||||
) !void {
|
||||
// Apply our conditional state. If we fail to apply the conditional state
|
||||
// then we log and attempt to move forward with the old config.
|
||||
var config_: ?configpkg.Config = config_original.changeConditionalState(
|
||||
app.config_conditional_state,
|
||||
) catch |err| err: {
|
||||
log.warn("failed to apply conditional state to config err={}", .{err});
|
||||
break :err null;
|
||||
};
|
||||
defer if (config_) |*c| c.deinit();
|
||||
|
||||
// We want a config pointer for everything so we get that either
|
||||
// based on our conditional state or the original config.
|
||||
const config: *const configpkg.Config = if (config_) |*c| c else config_original;
|
||||
|
||||
// Get our configuration
|
||||
var derived_config = try DerivedConfig.init(alloc, config);
|
||||
errdefer derived_config.deinit();
|
||||
@@ -481,7 +495,10 @@ pub fn init(
|
||||
.io_thr = undefined,
|
||||
.size = size,
|
||||
.config = derived_config,
|
||||
.config_conditional_state = .{},
|
||||
|
||||
// Our conditional state is initialized to the app state. This
|
||||
// lets us get the most likely correct color theme and so on.
|
||||
.config_conditional_state = app.config_conditional_state,
|
||||
};
|
||||
|
||||
// The command we're going to execute
|
||||
|
Reference in New Issue
Block a user