Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
57 commits
Select commit Hold shift + click to select a range
584c025
Gate self-content draws on needsDrawSelf to stop child-only redraw fa…
harder May 26, 2026
f5fcf56
Clarify why DoDrawAdornments still escalates NeedsDrawRect
harder May 26, 2026
226ef96
Stop AdornmentView.OnClearingViewport from cascading SetNeedsDraw dur…
harder May 26, 2026
7490129
Add focused regression tests for child-only redraw gating
harder May 26, 2026
0839ba9
Switch fan-out tests to NeedsDraw-gated metrics (DrawingText) for #5358
harder May 26, 2026
1b63164
Initial plan
Copilot May 26, 2026
23eb6d8
Fix SetNeedsDraw union math to accumulate dirty regions accurately
harder May 26, 2026
a70fa81
Make ClearViewport region-aware when NeedsDrawRect is partial
harder May 26, 2026
36a747d
Invalidate SuperView on Frame change so uncovered area gets cleared
harder May 26, 2026
571c7dc
Document the remaining LayoutAndDraw force=true cascade source
harder May 26, 2026
ee18ad1
Publish Terminal.Gui.Interop.Spectre package
Copilot May 26, 2026
50f21a2
Invalidate SuperView in SetFrame too, add region-aware ClearViewport …
harder May 26, 2026
21badc1
Initial plan
Copilot May 26, 2026
a09921a
Optimize CharMap default row indexing
Copilot May 26, 2026
e025120
Cover CharMap filtered row indexing
Copilot May 26, 2026
7545ce2
Fix publish workflow: build both projects before packing
tig May 26, 2026
1e636c9
Merge pull request #5421 from gui-cs/copilot/terminal-gui-interop-pub…
tig May 27, 2026
9401a89
Merge pull request #5427 from gui-cs/backmerge/v2.4.2
tig May 27, 2026
404f61f
Merge pull request #5422 from gui-cs/copilot/review-built-in-view-typ…
tig May 27, 2026
517aecb
Initial plan
Copilot May 27, 2026
7479c2d
Address review: move ClearViewport narrowing into framework path, pre…
harder May 27, 2026
ac2d48f
Address review: drop duplicate SuperView invalidation from Layout(Size)
harder May 27, 2026
02e465b
Fix wizard default accept routing
Copilot May 27, 2026
d9533fd
Updated stale comment
harder May 27, 2026
030150d
Merge branch 'gui-cs:develop' into fix-5358-stop-child-redraws-escala…
harder May 27, 2026
49dc695
Fix accept bubbling when GoNext is canceled via StepChanging
tig May 27, 2026
73b38a8
Merge pull request #5431 from harder/fix-5358-stop-child-redraws-esca…
harder May 28, 2026
e6ea0b1
Refactor Wizard navigation and event handling
tig May 28, 2026
76f6f23
Refactor wizard UI code and deduplicate Copilot tests
tig May 28, 2026
e53e716
Add failing tests proving two bugs in wizard navigation
tig May 28, 2026
3053b04
Fix two bugs found in code review
tig May 28, 2026
922b2f0
Initial plan
Copilot May 28, 2026
bbd16ad
Update default checkbox state glyphs
Copilot May 28, 2026
3f5e7c9
Address CR feedback: docs, naming, and remove SetStyle
tig May 28, 2026
6ef93be
Clarify ListView mark-width behavior for wide glyphs
Copilot May 28, 2026
e036907
Merge pull request #5432 from gui-cs/copilot/fix-wizard-next-finish-b…
tig May 28, 2026
1019953
Merge pull request #5439 from gui-cs/copilot/update-checkbox-glyphs
tig May 28, 2026
9501775
Fixes #5436. HotKeys should not work on !Visible views
tig May 28, 2026
bdd716c
Merge pull request #5441 from gui-cs/tig/fix-hotkeys-not-work-invisib…
tig May 28, 2026
aa22350
Initial plan
Copilot May 27, 2026
5ac9e2b
Add TreeView checkbox mode
Copilot May 27, 2026
3205056
Clean TreeView checkbox state removal
Copilot May 27, 2026
dbc172b
Add CheckboxMode to ITreeView and TreeViewEditor UICatalog scenario
tig May 27, 2026
26eacb9
Fix mouse click handling in TreeView OnActivated
tig May 27, 2026
84680c9
Fix TreeView mouse click double-fire causing checkbox/expand to not work
tig May 27, 2026
7f14ae8
Add tri-state checkbox with parent-child propagation
tig May 28, 2026
943eb48
Document CheckboxMode in treeview.md and tableview.md
tig May 28, 2026
b43f54f
Address CR feedback: perf, safety, correctness fixes
tig May 28, 2026
06b753b
Fix parent uncheck when children are checked and revert emoji glyphs
tig May 28, 2026
add55fa
Fix collapsed parent showing wrong checkstate
tig May 28, 2026
820690f
Initial plan
Copilot May 28, 2026
9702a10
Remove Dialog.SetStyle; set scheme and arrangement in constructor
Copilot May 28, 2026
c9a0513
Fixes #5442. Windows VT input can hang during shutdown when ReadFile …
BDisp May 28, 2026
01a447a
Merge pull request #5429 from gui-cs/copilot/add-built-in-checkbox-mo…
tig May 28, 2026
664c859
docs: update Dialog XML docs to reflect unconditional scheme application
Copilot May 28, 2026
d24bf12
Add dialog run/stop custom style regression test
Copilot May 28, 2026
6c9df2c
Merge pull request #5445 from gui-cs/copilot/remove-dialog-setstyle
tig May 28, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 5 additions & 8 deletions .github/workflows/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ The repository uses multiple GitHub Actions workflows. What runs and when:
- `dotnet restore`
- Build Debug: `dotnet build --configuration Debug --no-restore -property:NoWarn=0618%3B0612`
- Build Release (library): `dotnet build Terminal.Gui/Terminal.Gui.csproj --configuration Release --no-incremental --force -property:NoWarn=0618%3B0612`
- Pack Release: `dotnet pack Terminal.Gui/Terminal.Gui.csproj --configuration Release --output ./local_packages -property:NoWarn=0618%3B0612`
- Pack Release packages: `dotnet pack Terminal.Gui/Terminal.Gui.csproj --configuration Release --output ./local_packages -property:NoWarn=0618%3B0612` and `dotnet pack Terminal.Gui.Interop.Spectre/Terminal.Gui.Interop.Spectre.csproj --configuration Release --output ./local_packages -property:NoWarn=0618%3B0612`
- Publish `Tests/NativeAotSmoke` with AOT and run `--smoke-test`
- Build Release solution

Expand Down Expand Up @@ -66,14 +66,11 @@ The repository uses multiple GitHub Actions workflows. What runs and when:

### 5) Publish to NuGet (`.github/workflows/publish.yml`)

- **Triggers**: push to `main`, `develop`, and tags `v*`(ignores `**.md`)
- Uses GitVersion to compute SemVer, builds Release, packs with symbols, and pushes to NuGet.org using `NUGET_API_KEY`
- **Triggers**: push to `develop` and tags `v*` (ignores `**.md`)
- Uses GitVersion to compute SemVer, builds Release, packs Terminal.Gui and Terminal.Gui.Interop.Spectre with symbols, and pushes both to NuGet.org using `NUGET_API_KEY`
- **Automatically triggered** by the Create Release workflow when a new tag is pushed
- **Additional actions on main branch**:
- Delists old NuGet packages to keep package list clean:
- Keeps only the most recent `*-develop.*` package
- Keeps only the just-published `*-beta.*` or `*-rc.*` package
- Triggers Terminal.Gui.templates repository update via repository_dispatch (requires `PAT_FOR_TEMPLATES` secret)
- **Additional actions on tag push** (`v*`):
- Triggers Terminal.Gui.templates repository update via repository_dispatch (requires `TEMPLATE_REPO_TOKEN` secret)

### 6) Build and publish API docs (`.github/workflows/api-docs.yml`)

Expand Down
3 changes: 3 additions & 0 deletions .github/workflows/build-validation.yml
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,9 @@ jobs:
- name: Pack Release Terminal.Gui
run: dotnet pack Terminal.Gui/Terminal.Gui.csproj --configuration Release --output ./local_packages -property:NoWarn=0618%3B0612

- name: Pack Release Terminal.Gui.Interop.Spectre
run: dotnet pack Terminal.Gui.Interop.Spectre/Terminal.Gui.Interop.Spectre.csproj --configuration Release --output ./local_packages -property:NoWarn=0618%3B0612

- name: AOT Publish Test App (catches trimming and reflection errors)
run: dotnet publish ./Tests/NativeAotSmoke/NativeAotSmoke.csproj --configuration Release --output ./aot-publish -property:NoWarn=0618%3B0612

Expand Down
15 changes: 13 additions & 2 deletions .github/workflows/publish.yml
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,9 @@ on:
paths-ignore:
- '**.md'

permissions:
contents: read

jobs:
publish:
name: Build and Publish to Nuget.org
Expand Down Expand Up @@ -41,12 +44,17 @@ jobs:
dotnet-version: 10.x
dotnet-quality: 'ga'

- name: Build Release Terminal.Gui
run: dotnet build Terminal.Gui/Terminal.Gui.csproj --no-incremental --nologo --force --configuration Release
- name: Build Release Terminal.Gui packages
run: |
dotnet build Terminal.Gui/Terminal.Gui.csproj --no-incremental --nologo --force --configuration Release
dotnet build Terminal.Gui.Interop.Spectre/Terminal.Gui.Interop.Spectre.csproj --no-incremental --nologo --force --configuration Release

- name: Pack Release Terminal.Gui ${{ steps.gitversion.outputs.SemVer }} for Nuget
run: dotnet pack Terminal.Gui/Terminal.Gui.csproj -c Release --include-symbols --no-build

- name: Pack Release Terminal.Gui.Interop.Spectre ${{ steps.gitversion.outputs.SemVer }} for Nuget
run: dotnet pack Terminal.Gui.Interop.Spectre/Terminal.Gui.Interop.Spectre.csproj -c Release --include-symbols --no-build

# - name: Test to generate Code Coverage Report
# run: |
# sed -i 's/"stopOnFail": false/"stopOnFail": true/g' UnitTests/xunit.runner.json
Expand All @@ -72,6 +80,9 @@ jobs:
- name: Publish Terminal.Gui.${{ steps.gitversion.outputs.SemVer }} to NuGet.org
run: dotnet nuget push Terminal.Gui/bin/Release/Terminal.Gui.${{ steps.gitversion.outputs.SemVer }}.nupkg --skip-duplicate --api-key ${{ secrets.NUGET_API_KEY }}

- name: Publish Terminal.Gui.Interop.Spectre.${{ steps.gitversion.outputs.SemVer }} to NuGet.org
run: dotnet nuget push Terminal.Gui.Interop.Spectre/bin/Release/Terminal.Gui.Interop.Spectre.${{ steps.gitversion.outputs.SemVer }}.nupkg --skip-duplicate --api-key ${{ secrets.NUGET_API_KEY }}

# Deterministic version handoff to notify-clet.yml. Avoids the NuGet
# search-API indexing lag that caused gui-cs/clet to skip TG develop.37
# (see clet workflow run 25406348354). notify-clet.yml downloads this
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ namespace UICatalog.Scenarios;
public sealed class TreeViewEditor : EditorBase
{
private CheckBox? _cbMultiSelect;
private CheckBox? _cbCheckboxMode;
private CheckBox? _cbShowBranchLines;
private CheckBox? _cbColorExpandSymbol;
private CheckBox? _cbInvertExpandSymbolColors;
Expand Down Expand Up @@ -66,6 +67,7 @@ private void SyncFromView ()
}

_cbMultiSelect!.Value = treeView.MultiSelect ? CheckState.Checked : CheckState.UnChecked;
_cbCheckboxMode!.Value = treeView.CheckboxMode ? CheckState.Checked : CheckState.UnChecked;
_cbShowBranchLines!.Value = treeView.Style.ShowBranchLines ? CheckState.Checked : CheckState.UnChecked;
_cbColorExpandSymbol!.Value = treeView.Style.ColorExpandSymbol ? CheckState.Checked : CheckState.UnChecked;
_cbInvertExpandSymbolColors!.Value = treeView.Style.InvertExpandSymbolColors ? CheckState.Checked : CheckState.UnChecked;
Expand All @@ -81,10 +83,13 @@ private void TreeViewEditor_Initialized (object? s, EventArgs e)
_cbMultiSelect = new CheckBox { Title = "MultiSelect", CanFocus = true };
_cbMultiSelect.ValueChanging += (_, args) => SetBool (args, (tv, v) => tv.MultiSelect = v);

_cbCheckboxMode = new CheckBox { X = Pos.Right (_cbMultiSelect) + 1, Title = "CheckboxMode", CanFocus = true };
_cbCheckboxMode.ValueChanging += (_, args) => SetBool (args, (tv, v) => tv.CheckboxMode = v);

_cbShowBranchLines = new CheckBox { Y = Pos.Bottom (_cbMultiSelect), Title = "ShowBranchLines", CanFocus = true };
_cbShowBranchLines.ValueChanging += (_, args) => SetStyleBool (args, (style, v) => style.ShowBranchLines = v);

_cbColorExpandSymbol = new CheckBox { X = Pos.Right (_cbMultiSelect) + 1, Title = "ColorExpandSymbol", CanFocus = true };
_cbColorExpandSymbol = new CheckBox { X = Pos.Right (_cbCheckboxMode) + 1, Title = "ColorExpandSymbol", CanFocus = true };
_cbColorExpandSymbol.ValueChanging += (_, args) => SetStyleBool (args, (style, v) => style.ColorExpandSymbol = v);

_cbInvertExpandSymbolColors = new CheckBox
Expand Down Expand Up @@ -189,6 +194,7 @@ private void TreeViewEditor_Initialized (object? s, EventArgs e)
};

Add (_cbMultiSelect,
_cbCheckboxMode,
_cbColorExpandSymbol,
_cbShowBranchLines,
_cbInvertExpandSymbolColors,
Expand Down
86 changes: 32 additions & 54 deletions Examples/UICatalog/Scenarios/Wizards.cs
Original file line number Diff line number Diff line change
@@ -1,8 +1,6 @@
#nullable enable

// ReSharper disable AccessToDisposedClosure
using Terminal.Gui.Views;

namespace UICatalog.Scenarios;

[ScenarioMetadata ("Wizards", "Demonstrates the Wizard class")]
Expand Down Expand Up @@ -35,15 +33,10 @@ public override void Main ()
};
win.Add (settingsFrame);

Label label = new ()
{
X = 0,
TextAlignment = Alignment.End,
Text = "_Title:"
};
Label label = new () { X = 0, TextAlignment = Alignment.End, Text = "_Title:" };
settingsFrame.Add (label);

_titleEdit = new ()
_titleEdit = new TextField
{
X = Pos.Right (label) + 1,
Y = Pos.Top (label),
Expand All @@ -53,32 +46,17 @@ public override void Main ()
};
settingsFrame.Add (_titleEdit);

CheckBox cbRun = new ()
{
Title = "_Run Wizard as a modal",
X = 0,
Y = Pos.Bottom (label),
Value = CheckState.Checked
};
CheckBox cbRun = new () { Title = "_Run Wizard as a modal", X = 0, Y = Pos.Bottom (label), Value = CheckState.Checked };
settingsFrame.Add (cbRun);

Button showWizardButton = new ()
{
X = Pos.Center (),
Y = Pos.Bottom (cbRun),
IsDefault = true,
Text = "_Show Wizard"
};
Button showWizardButton = new () { X = Pos.Center (), Y = Pos.Bottom (cbRun), IsDefault = true, Text = "_Show Wizard" };

settingsFrame.Add (showWizardButton);

label = new ()
{
X = Pos.Center (), Y = Pos.AnchorEnd (1), TextAlignment = Alignment.End, Text = "Action:"
};
label = new Label { X = Pos.Center (), Y = Pos.AnchorEnd (1), TextAlignment = Alignment.End, Text = "Action:" };
win.Add (label);

_actionLabel = new ()
_actionLabel = new View
{
X = Pos.Right (label),
Y = Pos.AnchorEnd (1),
Expand All @@ -96,32 +74,32 @@ public override void Main ()
}

cbRun.ValueChanged += (_, a) =>
{
if (a.NewValue == CheckState.Checked)
{
showWizardButton.Enabled = true;
_wizard!.X = Pos.Center ();
_wizard.Y = Pos.Center ();

win.Remove (_wizard);
_wizard.Dispose ();
_wizard = null;
}
else
{
showWizardButton.Enabled = false;
_wizard = CreateWizard ();
_wizard.Y = Pos.Bottom (settingsFrame) + 1;
win.Add (_wizard);
}
};
{
if (a.NewValue == CheckState.Checked)
{
showWizardButton.Enabled = true;
_wizard!.X = Pos.Center ();
_wizard.Y = Pos.Center ();

win.Remove (_wizard);
_wizard.Dispose ();
_wizard = null;
}
else
{
showWizardButton.Enabled = false;
_wizard = CreateWizard ();
_wizard.Y = Pos.Bottom (settingsFrame) + 1;
win.Add (_wizard);
}
};

showWizardButton.Accepting += (_, _) =>
{
_wizard = CreateWizard ();
app.Run (_wizard);
_wizard.Dispose ();
};
{
_wizard = CreateWizard ();
app.Run (_wizard);
_wizard.Dispose ();
};

app.Run (win);
}
Expand All @@ -130,7 +108,7 @@ private Wizard CreateWizard ()
{
Wizard wizard = new ();

if (_titleEdit is not null)
if (_titleEdit is { })
{
wizard.Title = _titleEdit.Text;
}
Expand Down Expand Up @@ -161,7 +139,7 @@ private Wizard CreateWizard ()
}
else
{
wizard.App!.RequestStop();
wizard.App!.RequestStop ();
args.Handled = true;
}
};
Expand Down
22 changes: 11 additions & 11 deletions Terminal.Gui.Analyzers.Internal/EnumExtensionMethodsGenerator.cs
Original file line number Diff line number Diff line change
Expand Up @@ -64,11 +64,11 @@ public void Initialize (IncrementalGeneratorInitializationContext context)
// Only generate for int and uint backed enums.
// Unsafe.As<TEnum, int/uint> requires the enum to be exactly 4 bytes.
string? underlyingTypeName = symbol.EnumUnderlyingType?.SpecialType switch
{
SpecialType.System_Int32 => "int",
SpecialType.System_UInt32 => "uint",
_ => null
};
{
SpecialType.System_Int32 => "int",
SpecialType.System_UInt32 => "uint",
_ => null
};

if (underlyingTypeName is null)
{
Expand All @@ -91,15 +91,15 @@ public void Initialize (IncrementalGeneratorInitializationContext context)
}

int value = field.ConstantValue switch
{
int i => i,
uint u => unchecked ((int)u),
_ => 0
};
{
int i => i,
uint u => unchecked((int)u),
_ => 0
};
memberValues.Add (value);
}

return new EnumInfo (enumNamespace, enumName, underlyingTypeName, hasFlags, memberValues.OrderBy (static v => unchecked ((uint)v)).ToArray ());
return new EnumInfo (enumNamespace, enumName, underlyingTypeName, hasFlags, memberValues.OrderBy (static v => unchecked((uint)v)).ToArray ());
}

private static void Execute (SourceProductionContext context, EnumInfo info)
Expand Down
20 changes: 10 additions & 10 deletions Terminal.Gui/App/Application.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2,21 +2,21 @@
// Put them here so they are available throughout the application.
// Do not put them in AssemblyInfo.cs as it will break GitVersion's /updateassemblyinfo

global using Attribute = Terminal.Gui.Drawing.Attribute;
global using Color = Terminal.Gui.Drawing.Color;
global using CM = Terminal.Gui.Configuration.ConfigurationManager;
global using Terminal.Gui.App;
global using Terminal.Gui.Testing;
global using Terminal.Gui.Time;
global using Terminal.Gui.Configuration;
global using Terminal.Gui.Drawing;
global using Terminal.Gui.Drivers;
global using Terminal.Gui.FileServices;
global using Terminal.Gui.Input;
global using Terminal.Gui.Configuration;
global using Terminal.Gui.Resources;
global using Terminal.Gui.Testing;
global using Terminal.Gui.Text;
global using Terminal.Gui.Time;
global using Terminal.Gui.ViewBase;
global using Terminal.Gui.Views;
global using Terminal.Gui.Drawing;
global using Terminal.Gui.Text;
global using Terminal.Gui.Resources;
global using Terminal.Gui.FileServices;
global using Attribute = Terminal.Gui.Drawing.Attribute;
global using CM = Terminal.Gui.Configuration.ConfigurationManager;
global using Color = Terminal.Gui.Drawing.Color;
using System.Globalization;
using System.Reflection;
using System.Resources;
Expand Down
4 changes: 2 additions & 2 deletions Terminal.Gui/App/ApplicationImpl.Run.cs
Original file line number Diff line number Diff line change
Expand Up @@ -199,7 +199,7 @@ public void Invoke (Action action)
#region Session Lifecycle - Run

/// <inheritdoc/>
public IApplication Run<TRunnable> (Func<Exception, bool>? errorHandler = null, string? driverName = null) where TRunnable : IRunnable, new ()
public IApplication Run<TRunnable> (Func<Exception, bool>? errorHandler = null, string? driverName = null) where TRunnable : IRunnable, new()
{
if (!Initialized)
{
Expand Down Expand Up @@ -314,7 +314,7 @@ public void Invoke (Action action)
}

/// <inheritdoc/>
public Task<IApplication> RunAsync<TRunnable> (CancellationToken cancellationToken, Func<Exception, bool>? errorHandler = null, string? driverName = null) where TRunnable : IRunnable, new ()
public Task<IApplication> RunAsync<TRunnable> (CancellationToken cancellationToken, Func<Exception, bool>? errorHandler = null, string? driverName = null) where TRunnable : IRunnable, new()
{
if (cancellationToken.IsCancellationRequested)
{
Expand Down
9 changes: 9 additions & 0 deletions Terminal.Gui/App/ApplicationImpl.Screen.cs
Original file line number Diff line number Diff line change
Expand Up @@ -280,6 +280,15 @@ public void LayoutAndDraw (bool forceRedraw = false)

// Only force a complete redraw if needed (needsLayout or forceRedraw).
// Otherwise, just redraw views that need it.
//
// NOTE (#5358): passing force=true here calls SetNeedsDraw on the top runnable, which
// cascades to all overlapping subviews via the existing SetNeedsDraw recursion. This
// is the remaining draw-fan-out source documented by TabsFanOutIntegrationTests. The
// proper fix requires tracking adornment thickness changes (in addition to Frame
// changes) so the SuperView can be invalidated precisely instead of force-redrawing
// the whole tree. Dropping force-on-neededLayout without that tracking exposes
// stale-content bugs in the shrink/move and adornment-rebalance paths (covered by
// ShadowTests / BorderViewTests).
View.Draw (views.ToArray ().Cast<View> (), neededLayout || forceRedraw);

Driver.Clip = new Region (clipRect);
Expand Down
2 changes: 1 addition & 1 deletion Terminal.Gui/App/Clipboard/ClipboardBase.cs
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
#nullable disable
using System.Diagnostics;
using System.Diagnostics;

namespace Terminal.Gui.App;

Expand Down
2 changes: 1 addition & 1 deletion Terminal.Gui/App/Clipboard/ClipboardProcessRunner.cs
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ public static (int exitCode, string result) Process (

using var process = new Process ();

process.StartInfo = new()
process.StartInfo = new ()
{
FileName = cmd,
Arguments = arguments,
Expand Down
4 changes: 2 additions & 2 deletions Terminal.Gui/App/IApplication.cs
Original file line number Diff line number Diff line change
Expand Up @@ -294,7 +294,7 @@ public interface IApplication : IDisposable
/// session.
/// </para>
/// </remarks>
Task<IApplication> RunAsync<TRunnable> (CancellationToken cancellationToken, Func<Exception, bool>? errorHandler = null, string? driverName = null) where TRunnable : IRunnable, new ();
Task<IApplication> RunAsync<TRunnable> (CancellationToken cancellationToken, Func<Exception, bool>? errorHandler = null, string? driverName = null) where TRunnable : IRunnable, new();

/// <summary>
/// Runs a new Session creating a <see cref="IRunnable"/>-derived object of type <typeparamref name="TRunnable"/>
Expand Down Expand Up @@ -340,7 +340,7 @@ public interface IApplication : IDisposable
/// The caller is responsible for disposing the object returned by this method.
/// </para>
/// </remarks>
public IApplication Run<TRunnable> (Func<Exception, bool>? errorHandler = null, string? driverName = null) where TRunnable : IRunnable, new ();
public IApplication Run<TRunnable> (Func<Exception, bool>? errorHandler = null, string? driverName = null) where TRunnable : IRunnable, new();

#region Iteration & Invoke

Expand Down
Loading
Loading