aboutsummaryrefslogtreecommitdiff
path: root/src/client/mod.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/client/mod.rs')
-rw-r--r--src/client/mod.rs12
1 files changed, 11 insertions, 1 deletions
diff --git a/src/client/mod.rs b/src/client/mod.rs
index 1a0f8dd5..2cec6d2d 100644
--- a/src/client/mod.rs
+++ b/src/client/mod.rs
@@ -128,7 +128,7 @@ use terminal_sessions::terminal_control_command_from_json;
#[cfg(unix)]
use std::collections::HashMap;
use std::io::{self, Write as _};
-use std::sync::atomic::{AtomicBool, AtomicU64, Ordering};
+use std::sync::atomic::{AtomicBool, AtomicU32, AtomicU64, Ordering};
use std::sync::Arc;
#[cfg(unix)]
use std::sync::Mutex;
@@ -509,6 +509,8 @@ async fn run_client_loop(
// Spawn the stdin reader thread.
let will_query_host_terminal_theme =
state.attach_escape.is_none() && should_query_host_terminal_theme();
+ let host_theme_query_pending = Arc::new(AtomicU32::new(0));
+ let stdin_host_theme_query_pending = host_theme_query_pending.clone();
// Terminals behind ConPTY report no pixel size through the ioctl, so ask the
// host terminal directly instead of falling back to an assumed cell size.
let will_query_host_cell_size = state.attach_escape.is_none()
@@ -530,6 +532,7 @@ async fn run_client_loop(
stdin_tx,
&stdin_quit,
will_query_host_terminal_theme,
+ stdin_host_theme_query_pending,
will_query_host_cell_size,
stdin_mouse_capture_active,
stdin_sgr_pixels_active,
@@ -1181,6 +1184,13 @@ async fn run_client_loop(
cell_height_px,
pixel_geometry_exact,
) => {
+ // Palette updates through OSC do not necessarily produce a color-scheme
+ // notification. Re-query on redraw, including SIGWINCH without a resize,
+ // so desktop theme switchers can refresh the existing panes in place.
+ if will_query_host_terminal_theme {
+ host_theme_query_pending.fetch_add(1, Ordering::AcqRel);
+ query_host_terminal_theme();
+ }
if !pixel_geometry_exact && host_sgr_pixels_active.load(Ordering::Acquire) {
set_mouse_capture(state.mouse_capture_active, false)
.map_err(ClientError::ConnectionFailed)?;