diff --git a/pkg/gui/arrangement.go b/pkg/gui/arrangement.go index 744f4467..9aceec70 100644 --- a/pkg/gui/arrangement.go +++ b/pkg/gui/arrangement.go @@ -176,23 +176,30 @@ func (gui *Gui) sidePanelChildren(width int, height int) []*boxlayout.Box { } // The project panel is compact (Size: 3) when not focused, but expands - // when focused to show the list of projects. - projectBox := &boxlayout.Box{ - Window: sideWindowNames[0], - Size: 3, - } - if currentWindow == sideWindowNames[0] { - projectBox = &boxlayout.Box{ + // when focused to show the list of projects. This only applies when the + // project panel is actually visible (i.e. we are inside a compose project). + if len(sideWindowNames) > 0 && sideWindowNames[0] == "project" { + projectBox := &boxlayout.Box{ Window: sideWindowNames[0], - Weight: 2, + Size: 3, } + if currentWindow == sideWindowNames[0] { + projectBox = &boxlayout.Box{ + Window: sideWindowNames[0], + Weight: 2, + } + } + + return append([]*boxlayout.Box{ + projectBox, + }, lo.Map(sideWindowNames[1:], func(window string, _ int) *boxlayout.Box { + return accordionBox(&boxlayout.Box{Window: window, Weight: 1}) + })...) } - return append([]*boxlayout.Box{ - projectBox, - }, lo.Map(sideWindowNames[1:], func(window string, _ int) *boxlayout.Box { + return lo.Map(sideWindowNames, func(window string, _ int) *boxlayout.Box { return accordionBox(&boxlayout.Box{Window: window, Weight: 1}) - })...) + }) } else { squashedHeight := 1 if height >= 21 { diff --git a/pkg/gui/containers_panel.go b/pkg/gui/containers_panel.go index 4bde93ec..cf4b082c 100644 --- a/pkg/gui/containers_panel.go +++ b/pkg/gui/containers_panel.go @@ -94,14 +94,19 @@ func (gui *Gui) getContainersPanel() *panels.SideListPanel[*commands.Container] return false } - // Filter by selected project. Containers with no project (truly - // standalone, not from any compose project) are always shown. - selectedProject := gui.getSelectedProjectName() - if selectedProject == "" { - selectedProject = gui.DockerCommand.LocalProjectName - } - if selectedProject != "" && container.ProjectName != "" && container.ProjectName != selectedProject { - return false + // Only apply project filtering when we are inside a docker-compose + // project. Outside of a compose project all containers are shown in + // a flat list regardless of which compose project they belong to. + if gui.DockerCommand.InDockerComposeProject { + // Filter by selected project. Containers with no project (truly + // standalone, not from any compose project) are always shown. + selectedProject := gui.getSelectedProjectName() + if selectedProject == "" { + selectedProject = gui.DockerCommand.LocalProjectName + } + if selectedProject != "" && container.ProjectName != "" && container.ProjectName != selectedProject { + return false + } } return true diff --git a/pkg/gui/project_panel.go b/pkg/gui/project_panel.go index ca9acf28..a7c6ef55 100644 --- a/pkg/gui/project_panel.go +++ b/pkg/gui/project_panel.go @@ -58,6 +58,14 @@ func (gui *Gui) getProjectPanel() *panels.SideListPanel[*commands.Project] { // containers to show only those belonging to the selected project. return gui.renderContainersAndServices() }, + Hide: func() bool { + // Only show the project panel when we are inside a docker-compose + // project directory. When launched outside of a compose project + // there is no meaningful local project to display, so we hide the + // panel and let the containers panel show all containers in a flat + // list (matching the behaviour from before v0.25). + return !gui.DockerCommand.InDockerComposeProject + }, } } diff --git a/pkg/gui/services_panel.go b/pkg/gui/services_panel.go index fb768a74..878eaa4b 100644 --- a/pkg/gui/services_panel.go +++ b/pkg/gui/services_panel.go @@ -90,8 +90,12 @@ func (gui *Gui) getServicesPanel() *panels.SideListPanel[*commands.Service] { return presentation.GetServiceDisplayStrings(&gui.Config.UserConfig.Gui, service) }, Hide: func() bool { - // Show services panel if there are any compose projects (local or discovered) - return !gui.DockerCommand.InDockerComposeProject && len(gui.Panels.Services.List.GetAllItems()) == 0 + // Only show the services panel when we are inside a docker-compose + // project directory. When launched outside of a compose project + // there is no local project context, so the panel is hidden and + // all containers are shown in a flat list (matching pre-v0.25 + // behaviour). + return !gui.DockerCommand.InDockerComposeProject }, } }