From 1a366d24451c9631348753d884da9d7636fa5996 Mon Sep 17 00:00:00 2001 From: NotAShelf Date: Sun, 2 Nov 2025 00:03:49 +0300 Subject: [PATCH] core: store old config values per-monitor Signed-off-by: NotAShelf Change-Id: Ieb3a272935892c874339b13e63b998fd6a6a6964 --- src/core.c | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/src/core.c b/src/core.c index 8a13255..63d904d 100644 --- a/src/core.c +++ b/src/core.c @@ -103,6 +103,32 @@ static int assign_wallpaper_to_output(chroma_state_t *state, // Assign image to output output->image = image; + // Store old configuration values for comparison + chroma_scale_mode_t old_scale_mode = output->scale_mode; + chroma_filter_quality_t old_filter_quality = output->filter_quality; + bool had_config = output->config_loaded; + + // Load configuration for this output (scale mode and filter quality) + if (chroma_config_get_mapping_for_output( + &state->config, output->name ? output->name : "unknown", + &output->scale_mode, &output->filter_quality) == CHROMA_OK) { + output->config_loaded = true; + chroma_log("DEBUG", "Loaded config for output %u: scale=%d, filter=%d", + output->id, output->scale_mode, output->filter_quality); + + // Check if configuration changed and invalidate texture if needed + if (had_config && (old_scale_mode != output->scale_mode || + old_filter_quality != output->filter_quality)) { + chroma_output_invalidate_texture(output); + chroma_log("DEBUG", + "Configuration changed for output %u, invalidated texture", + output->id); + } + } else { + output->config_loaded = false; + chroma_log("WARN", "Failed to load config for output %u", output->id); + } + // Create surface if it doesn't exist if (!output->surface) { int ret = chroma_surface_create(state, output);