From f72fd32bf0a72cc0a8ebf9d05f2e02fa728a3048 Mon Sep 17 00:00:00 2001 From: Bryan Lee <38807139+liby@users.noreply.github.com> Date: Thu, 13 Feb 2025 13:26:24 +0800 Subject: [PATCH] Eliminate tab content flickering during tab movement on macOS --- .../Features/Terminal/TerminalController.swift | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/macos/Sources/Features/Terminal/TerminalController.swift b/macos/Sources/Features/Terminal/TerminalController.swift index 8507cf620..8118103d6 100644 --- a/macos/Sources/Features/Terminal/TerminalController.swift +++ b/macos/Sources/Features/Terminal/TerminalController.swift @@ -709,13 +709,21 @@ class TerminalController: BaseTerminalController { // If our index is the same we do nothing guard finalIndex != selectedIndex else { return } - // Get our parent - let parent = tabbedWindows[finalIndex] + // Get our target window + let targetWindow = tabbedWindows[finalIndex] - // Move our current selected window to the proper index + // Begin a group of window operations to minimize visual updates + NSAnimationContext.beginGrouping() + NSAnimationContext.current.duration = 0 + + // Remove and re-add the window in the correct position tabGroup.removeWindow(selectedWindow) - parent.addTabbedWindow(selectedWindow, ordered: action.amount < 0 ? .below : .above) - selectedWindow.makeKeyAndOrderFront(nil) + targetWindow.addTabbedWindow(selectedWindow, ordered: action.amount < 0 ? .below : .above) + + // Ensure our window remains selected + selectedWindow.makeKey() + + NSAnimationContext.endGrouping() } @objc private func onGotoTab(notification: SwiftUI.Notification) {