diff --git a/term/src/terminalstate/mod.rs b/term/src/terminalstate/mod.rs index 1d9098132..11b7ce911 100644 --- a/term/src/terminalstate/mod.rs +++ b/term/src/terminalstate/mod.rs @@ -719,6 +719,9 @@ impl TerminalState { /// Advise the terminal about a change in its focus state pub fn focus_changed(&mut self, focused: bool) { + if focused == self.focused { + return; + } if !focused { // notify app of release of buttons let buttons = self.current_mouse_buttons.clone(); diff --git a/wezterm-gui/src/termwindow/render.rs b/wezterm-gui/src/termwindow/render.rs index 1eacb8668..6698e07ed 100644 --- a/wezterm-gui/src/termwindow/render.rs +++ b/wezterm-gui/src/termwindow/render.rs @@ -1614,14 +1614,17 @@ impl super::TermWindow { let panes = self.get_panes_to_render(); let num_panes = panes.len(); + let focused = self.focused.is_some(); for pos in panes { if pos.is_active { self.update_text_cursor(&pos.pane); - pos.pane.advise_focus(); - mux::Mux::get() - .expect("called on mux thread") - .record_focus_for_current_identity(pos.pane.pane_id()); + if focused { + pos.pane.advise_focus(); + mux::Mux::get() + .expect("called on mux thread") + .record_focus_for_current_identity(pos.pane.pane_id()); + } } self.paint_pane_opengl(&pos, num_panes)?; }