From 64d86fe48748c04f0006d4705a4faa1f1123b1e4 Mon Sep 17 00:00:00 2001 From: Gregor Lohaus Date: Mon, 1 Jun 2026 17:27:08 +0200 Subject: [PATCH] focus last active tiling --- src/main/java/com/gregor/jprototerm/Tab.java | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/gregor/jprototerm/Tab.java b/src/main/java/com/gregor/jprototerm/Tab.java index 69a0537..adc15f5 100644 --- a/src/main/java/com/gregor/jprototerm/Tab.java +++ b/src/main/java/com/gregor/jprototerm/Tab.java @@ -27,6 +27,8 @@ final class Tab implements AutoCloseable { // The floating pane to re-focus when the group is shown again, and to prefer when promoting // after the last tiled pane closes. private TerminalPane lastFocusedFloating; + // The tiled pane to re-focus when the floating group is hidden. + private TerminalPane lastFocusedTiled; // Last laid-out size, so a newly opened pane can be created at roughly its eventual rect // (and thus grid). Seeded from the configured window size for the first pane, which is // opened before any layout pass runs. @@ -193,7 +195,7 @@ final class Tab implements AutoCloseable { if (floatingVisible) { floatingVisible = false; if (floating.contains(active)) { - setActive(tiled.get(0)); + setActive(tiled.contains(lastFocusedTiled) ? lastFocusedTiled : tiled.get(0)); } } else { floatingVisible = true; @@ -273,13 +275,17 @@ final class Tab implements AutoCloseable { floatingVisible = false; } - setActive(wasFloating && floatingVisible ? floating.get(floating.size() - 1) : tiled.get(0)); + setActive(wasFloating && floatingVisible + ? floating.get(floating.size() - 1) + : tiled.contains(lastFocusedTiled) ? lastFocusedTiled : tiled.get(0)); } private void setActive(TerminalPane pane) { active = pane; if (floating.contains(pane)) { lastFocusedFloating = pane; + } else if (tiled.contains(pane)) { + lastFocusedTiled = pane; } }