diff --git a/apps/desktop/src/components/layout/AppTabBar.vue b/apps/desktop/src/components/layout/AppTabBar.vue index f8df36d44..41ebc895a 100644 --- a/apps/desktop/src/components/layout/AppTabBar.vue +++ b/apps/desktop/src/components/layout/AppTabBar.vue @@ -52,6 +52,7 @@ const isClassicLayout = computed(() => settingsStore.editorSettings.appLayout == const fixedTabs = computed(() => queryStore.tabs.filter((tab) => tab.pinned)); const regularTabs = computed(() => queryStore.tabs.filter((tab) => !tab.pinned)); const hasFixedTabs = computed(() => fixedTabs.value.length > 0); +const regularSurfaceCount = computed(() => regularTabs.value.length + (props.driverStoreOpen ? 1 : 0) + (props.settingsPageOpen ? 1 : 0)); const closeConfirmDirtyCount = computed(() => queryStore.closeConfirmDirtyTabIds.length); const showCloseConfirmBulkActions = computed(() => closeConfirmDirtyCount.value > 1); const closeConfirmDirtyTabs = computed(() => queryStore.closeConfirmDirtyTabIds.map((id) => queryStore.tabs.find((tab) => tab.id === id)).filter((tab): tab is QueryTab => !!tab)); @@ -140,13 +141,63 @@ function cancelRenameTab() { editingTabId.value = null; } +type SpecialRegularSurface = "driverStore" | "settings"; + +function closeSpecialRegularSurfaces(keep?: SpecialRegularSurface) { + if (keep !== "driverStore" && props.driverStoreOpen) emit("close-driver-store"); + if (keep !== "settings" && props.settingsPageOpen) emit("close-settings-page"); +} + +function closeOtherRegularTabsFromTab(tab: QueryTab) { + queryStore.closeOtherRegularTabs(tab.id); + closeSpecialRegularSurfaces(); +} + +function closeAllRegularSurfaces() { + queryStore.closeRegularTabs(); + closeSpecialRegularSurfaces(); +} + +function getSpecialRegularTabMenuItems(surface: SpecialRegularSurface): ContextMenuItem[] { + const keep = surface; + const closeCurrent = surface === "driverStore" ? () => emit("close-driver-store") : () => emit("close-settings-page"); + const closeOtherDisabled = regularSurfaceCount.value <= 1; + const closeOtherLabel = hasFixedTabs.value ? t("contextMenu.closeOtherRegularTabs") : t("contextMenu.closeOtherTabs"); + const closeAllLabel = hasFixedTabs.value ? t("contextMenu.closeAllRegularTabs") : t("contextMenu.closeAllTabs"); + + return [ + { + label: compactTabTitle.value ? t("contextMenu.fullTabTitle") : t("contextMenu.compactTabTitle"), + action: toggleCompactTabTitle, + icon: compactTabTitle.value ? Maximize2 : Minimize2, + }, + { label: "", separator: true }, + { label: t("contextMenu.closeTab"), action: closeCurrent, icon: X }, + { + label: closeOtherLabel, + action: () => { + queryStore.closeRegularTabs(); + closeSpecialRegularSurfaces(keep); + }, + disabled: closeOtherDisabled, + icon: X, + }, + { + label: closeAllLabel, + action: closeAllRegularSurfaces, + variant: "destructive" as const, + icon: X, + }, + ]; +} + function getTabMenuItems(tab: QueryTab): ContextMenuItem[] { const closeCurrentLabel = tab.pinned ? t("contextMenu.closeFixedTab") : t("contextMenu.closeTab"); const closeOtherLabel = tab.pinned ? t("contextMenu.closeOtherFixedTabs") : hasFixedTabs.value ? t("contextMenu.closeOtherRegularTabs") : t("contextMenu.closeOtherTabs"); const closeAllLabel = tab.pinned ? t("contextMenu.closeAllFixedTabs") : hasFixedTabs.value ? t("contextMenu.closeAllRegularTabs") : t("contextMenu.closeAllTabs"); - const closeOtherDisabled = tab.pinned ? fixedTabs.value.length <= 1 : regularTabs.value.length <= 1; - const closeOtherAction = tab.pinned ? () => queryStore.closeOtherFixedTabs(tab.id) : () => queryStore.closeOtherRegularTabs(tab.id); - const closeAllAction = tab.pinned ? () => queryStore.closeFixedTabs() : () => queryStore.closeRegularTabs(); + const closeOtherDisabled = tab.pinned ? fixedTabs.value.length <= 1 : regularSurfaceCount.value <= 1; + const closeOtherAction = tab.pinned ? () => queryStore.closeOtherFixedTabs(tab.id) : () => closeOtherRegularTabsFromTab(tab); + const closeAllAction = tab.pinned ? () => queryStore.closeFixedTabs() : closeAllRegularSurfaces; return [ { @@ -526,51 +577,59 @@ function onOverflowItemKeydown(event: KeyboardEvent, tabId: string, kind: "regul -
- - - - {{ t("settings.title") }} - -
+ +
+
+ + + + {{ t("settings.title") }} + +
+
+
-
- - - - {{ t("toolbar.driverManager") }} - - {{ (agentDriverUpdateCount ?? 0) > 99 ? "99+" : agentDriverUpdateCount }} - - -
+ +
+
+ + + + {{ t("toolbar.driverManager") }} + + {{ (agentDriverUpdateCount ?? 0) > 99 ? "99+" : agentDriverUpdateCount }} + + +
+
+