Skip to content

Release v2.4.17#5584

Merged
tig merged 19 commits into
mainfrom
release/v2.4.17
Jul 7, 2026
Merged

Release v2.4.17#5584
tig merged 19 commits into
mainfrom
release/v2.4.17

Conversation

@tig

@tig tig commented Jul 7, 2026

Copy link
Copy Markdown
Member

Release v2.4.17

Version: 2.4.17
NuGet Package: Terminal.Gui 2.4.17

What happens when this PR is merged

  1. ✅ The Finalize Release workflow will automatically create tag v2.4.17
  2. ✅ The Publish workflow will build and push to NuGet.org
  3. ✅ A GitHub Release will be created with auto-generated notes
  4. ✅ A back-merge PR from maindevelop will be opened

Checklist

  • CI passes on this PR
  • Version looks correct: 2.4.17
  • Release notes reviewed (will be auto-generated on merge)

tig and others added 19 commits June 28, 2026 11:46
Back-merge v2.4.16 from main into develop
---
updated-dependencies:
- dependency-name: Microsoft.Extensions.Options
  dependency-version: 10.0.9
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
#5569)

* Fixes #5544 #issuecomment-4836836706. FileDialog/OpenDialog: one unreadable entry makes the entire directory render empty (`FileDialogState.GetChildren` swallows the exception)

* Fixes #5570. FileDialog/OpenDialog tree builder crash on unreadable entries
---
updated-dependencies:
- dependency-name: GitVersion.MsBuild
  dependency-version: 6.8.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
…ild-6.8.0

Bump GitVersion.MsBuild from 6.7.0 to 6.8.0
…sions.Options-10.0.9

Bump Microsoft.Extensions.Options from 10.0.7 to 10.0.9
---
updated-dependencies:
- dependency-name: GitVersion.MsBuild
  dependency-version: 6.8.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
---
updated-dependencies:
- dependency-name: Microsoft.Net.Compilers.Toolset
  dependency-version: 5.6.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
---
updated-dependencies:
- dependency-name: Spectre.Console
  dependency-version: 0.57.2
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
#5498 (split off from #4522) flagged that Frame/layout-driven size changes
bypass the Width/Height change events and skip the TextFormatter reset.

Re-evaluated after the related layout/TextFormatter perf work landed
(#4522, #5357, #5358/#5359, #5499, formatter-constraint fixes):

- TextFormatter reset is now a non-issue. SetRelativeLayout recomputes the
  constraints via SetTextFormatterSize () + FinalizeTextFormatterConstraints (),
  and the Frame setter flows through the same path via Layout (). The
  "Reset TextFormatter" BUGBUG bullets were stale.

- The Width/Height events "gap" is actually the correct design once declarative
  (Width/Height = Dim) is separated from resolved (Frame = absolute Rectangle).
  A layout pass changes the Frame, not the Dim (Dim.Fill () stays Dim.Fill ()),
  and the Frame setter's _width = absolute is bookkeeping, not a user-initiated
  Width change. FrameChanged already covers resolved-size changes from any cause.

Changes (no behavior change):
- Replace the two stale BUGBUG blocks in View.Layout.cs (Frame setter +
  SetRelativeLayout) with accurate design notes.
- Document the contract on Width/Height (declarative-assignment only) and on
  FrameChanged (canonical resolved-size event).
- Add ViewLayoutEventTests locking the contract: Width/HeightChanged do NOT
  fire from the Frame setter or a layout-driven resize; FrameChanged DOES fire
  in those cases and on declarative assignment after layout.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Bumps [gittools/actions](https://github.com/gittools/actions) from 4.5.0 to 4.7.0.
- [Release notes](https://github.com/gittools/actions/releases)
- [Commits](GitTools/actions@v4.5.0...v4.7.0)

---
updated-dependencies:
- dependency-name: gittools/actions
  dependency-version: 4.7.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
…ild-6.8.1

Bump GitVersion.MsBuild from 6.8.0 to 6.8.1
…ompilers.Toolset-5.6.0

Bump Microsoft.Net.Compilers.Toolset from 5.3.0 to 5.6.0
…-0.57.2

Bump Spectre.Console from 0.57.1 to 0.57.2
…ls/actions-4.7.0

Bump gittools/actions from 4.5.0 to 4.7.0
…Inaccessible change (#5581)

The switch to EnumerateDirectories/EnumerateFileSystemInfos with
EnumerationOptions { IgnoreInaccessible = true } (from the #5544 follow-up)
kept the framework default AttributesToSkip = Hidden | System, so the file
dialog silently filtered out hidden/system entries — including dotfiles on
Unix, which .NET marks as Hidden. The GetDirectories ()/GetFileSystemInfos ()
calls it replaced never skipped them.

- Clear AttributesToSkip (FileAttributes.None) so hidden/system entries stay
  visible while still ignoring inaccessible ones.
- Fall back to the eager listing methods when the IFileSystem implementation
  throws NotSupportedException for the non-default AttributesToSkip (e.g.
  System.IO.Abstractions.TestingHelpers MockFileSystem).
- Add regression tests covering the enumeration options, the fallback, and
  hidden/system files via MockFileSystem.

Flagged by Codex review on #5580.

Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…lision (#5583)

Two fixes flagged on release PR #5582:

1. Codex CR feedback: FileSystemTreeBuilder.IsReparsePoint returned false
   when reading Attributes throws, so an unreadable symlink/junction was
   treated as safe to traverse — recreating the directory-cycle risk the
   guard exists to prevent. Now fails closed (treats unreadable status as
   a reparse point), so CanExpand/GetChildren and FileDialog.SearchState
   do not traverse it.

2. CI failure (Parallel Unit Tests, windows): FileDialog's ctor crashed
   with "A binding for Ctrl+P exists" when PopoverMenu.DefaultKey read
   Ctrl+P — a key TableView already binds to Command.Up. Root cause was
   MecDottedKeyTests mutating the process-wide PopoverMenuSettings.Defaults
   while running in parallel with view-constructing tests; but the crash is
   also reachable by real users who configure PopoverMenu.DefaultKey to an
   already-bound key.
   - FileDialog/CharMap now use KeyBindings.ReplaceCommands instead of Add
     for the context-menu key (the user's configured key wins).
   - The "StaticSettingsTests" xUnit collection now has a
     CollectionDefinition with DisableParallelization = true, so the five
     Mec* test classes that swap static settings facades no longer race
     the rest of the suite.

Tests: fail-closed IsReparsePoint regression test; FileDialog/CharMap
ctor no-throw tests under a colliding DefaultKey.

Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants