fix: Prevent region orphaning during Hot Reload in ReassignParent #2960
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
GitHub Issue (If applicable): closes #2912
PR Type
What kind of change does this PR introduce?
What is the current behavior?
Re-adding a Button Command binding via Hot Reload breaks TabBar navigation. After Hot Reload, tapping a tab does nothing because the region becomes orphaned:
ReassignParent()unconditionally setsParent = nullAssignParent()may return early ifView.GetAttached()is false during Hot Reload timingParent = null,_services = nullRegion.Navigator()returns null, navigation failsWhat is the new behavior?
ReassignParent()now preserves parent relationship when reassignment would fail:PR Checklist
Please check if your PR fulfills the following requirements:
Screenshots Compare Test Runresults.Other information
Hot Design works because it preserves element identity during updates. Hot Reload may trigger
AttachedChanged→ReassignParent()with timing whereGetAttached()temporarily returns false.Internal Issue (If applicable):
Warning
Firewall rules blocked me from connecting to one or more addresses (expand for details)
I tried to connect to the following addresses, but was blocked by firewall rules:
1oavsblobprodcus350.blob.core.windows.net/usr/bin/dotnet dotnet restore --no-dependencies /home/REDACTED/work/uno.extensions/.codeql-scratch/dbs/csharp/working/D85692722C87C5CC860C8C97E3964764/missingpackages_workingdir --packages /home/REDACTED/work/uno.extensions/.codeql-scratch/dbs/csharp/working/missingpackages /p:DisableImplicitNuGetFallbackFolder=true --verbosity normal --configfile /home/REDACTED/work/uno.extensions/.codeql-scratch/dbs/csharp/working/nugetconfig/nuget.config --force(dns block)1s1vsblobprodcus386.blob.core.windows.net/usr/bin/dotnet dotnet restore --no-dependencies /home/REDACTED/work/uno.extensions/.codeql-scratch/dbs/csharp/working/AD7B40D2B820D8223D4C38D430808EF7/missingpackages_workingdir --packages /home/REDACTED/work/uno.extensions/.codeql-scratch/dbs/csharp/working/missingpackages /p:DisableImplicitNuGetFallbackFolder=true --verbosity normal --configfile /home/REDACTED/work/uno.extensions/.codeql-scratch/dbs/csharp/working/nugetconfig/nuget.config --force(dns block)2kmvsblobprodcus39.blob.core.windows.net/usr/bin/dotnet dotnet restore --no-dependencies /home/REDACTED/work/uno.extensions/.codeql-scratch/dbs/csharp/working/70593C6D7716240F283A24747D312FA1/missingpackages_workingdir --packages /home/REDACTED/work/uno.extensions/.codeql-scratch/dbs/csharp/working/missingpackages /p:DisableImplicitNuGetFallbackFolder=true --verbosity normal --configfile /home/REDACTED/work/uno.extensions/.codeql-scratch/dbs/csharp/working/nugetconfig/nuget.config --force(dns block)4myvsblobprodcus32.blob.core.windows.net/usr/bin/dotnet dotnet restore --no-dependencies /home/REDACTED/work/uno.extensions/.codeql-scratch/dbs/csharp/working/70593C6D7716240F283A24747D312FA1/missingpackages_workingdir --packages /home/REDACTED/work/uno.extensions/.codeql-scratch/dbs/csharp/working/missingpackages /p:DisableImplicitNuGetFallbackFolder=true --verbosity normal --configfile /home/REDACTED/work/uno.extensions/.codeql-scratch/dbs/csharp/working/nugetconfig/nuget.config --force(dns block)4vyvsblobprodcus361.blob.core.windows.net/usr/bin/dotnet dotnet build --configuration Debug -p:TargetFrameworks=net9.0(dns block)5rqvsblobprodcus385.blob.core.windows.net/usr/bin/dotnet dotnet restore --no-dependencies /home/REDACTED/work/uno.extensions/uno.extensions/testing/TestHarness/TestHarness.UITest/TestHarness.UITest.csproj --packages /home/REDACTED/work/uno.extensions/.codeql-scratch/dbs/csharp/working/packages /p:DisableImplicitNuGetFallbackFolder=true --verbosity normal /p:TargetFrameworkRootPath=/home/REDACTED/work/uno.extensions/.codeql-scratch/dbs/csharp/working/emptyFakeDotnetRoot /p:NetCoreTargetingPackRoot=/home/REDACTED/work/uno.extensions/.codeql-scratch/dbs/csharp/working/emptyFakeDotnetRoot(dns block)96bvsblobprodcus338.blob.core.windows.net/usr/bin/dotnet dotnet restore --no-dependencies /home/REDACTED/work/uno.extensions/.codeql-scratch/dbs/csharp/working/70593C6D7716240F283A24747D312FA1/missingpackages_workingdir --packages /home/REDACTED/work/uno.extensions/.codeql-scratch/dbs/csharp/working/missingpackages /p:DisableImplicitNuGetFallbackFolder=true --verbosity normal --configfile /home/REDACTED/work/uno.extensions/.codeql-scratch/dbs/csharp/working/nugetconfig/nuget.config --force(dns block)bcnvsblobprodcus378.blob.core.windows.net/usr/bin/dotnet dotnet restore --no-dependencies /home/REDACTED/work/uno.extensions/.codeql-scratch/dbs/csharp/working/D8EF513EFABB6C5875B94F0C1638D262/missingpackages_workingdir --packages /home/REDACTED/work/uno.extensions/.codeql-scratch/dbs/csharp/working/missingpackages /p:DisableImplicitNuGetFallbackFolder=true --verbosity normal --configfile /home/REDACTED/work/uno.extensions/.codeql-scratch/dbs/csharp/working/nugetconfig/nuget.config --force(dns block)cflvsblobprodcus383.blob.core.windows.net/usr/bin/dotnet dotnet build --configuration Debug -p:TargetFrameworks=net9.0(dns block)crl.godaddy.com/usr/bin/dotnet dotnet restore --no-dependencies /home/REDACTED/work/uno.extensions/.codeql-scratch/dbs/csharp/working/08DFEECC4C1FD333FFD63C17C7081C67/missingpackages_workingdir --packages /home/REDACTED/work/uno.extensions/.codeql-scratch/dbs/csharp/working/missingpackages /p:DisableImplicitNuGetFallbackFolder=true --verbosity normal --configfile /home/REDACTED/work/uno.extensions/.codeql-scratch/dbs/csharp/working/nugetconfig/nuget.config --force(dns block)dlbvsblobprodcus316.blob.core.windows.net/usr/bin/dotnet dotnet restore --no-dependencies /home/REDACTED/work/uno.extensions/.codeql-scratch/dbs/csharp/working/E7B5E0C97290FB53C2DCA420CF493E2A/missingpackages_workingdir --packages /home/REDACTED/work/uno.extensions/.codeql-scratch/dbs/csharp/working/missingpackages /p:DisableImplicitNuGetFallbackFolder=true --verbosity normal --configfile /home/REDACTED/work/uno.extensions/.codeql-scratch/dbs/csharp/working/nugetconfig/nuget.config --force(dns block)e7bvsblobprodcus348.blob.core.windows.net/usr/bin/dotnet dotnet restore --no-dependencies /home/REDACTED/work/uno.extensions/.codeql-scratch/dbs/csharp/working/70593C6D7716240F283A24747D312FA1/missingpackages_workingdir --packages /home/REDACTED/work/uno.extensions/.codeql-scratch/dbs/csharp/working/missingpackages /p:DisableImplicitNuGetFallbackFolder=true --verbosity normal --configfile /home/REDACTED/work/uno.extensions/.codeql-scratch/dbs/csharp/working/nugetconfig/nuget.config --force(dns block)ibzvsblobprodcus369.blob.core.windows.net/usr/bin/dotnet dotnet restore --no-dependencies /home/REDACTED/work/uno.extensions/.codeql-scratch/dbs/csharp/working/8678811784E46132669587676937D2EF/missingpackages_workingdir --packages /home/REDACTED/work/uno.extensions/.codeql-scratch/dbs/csharp/working/missingpackages /p:DisableImplicitNuGetFallbackFolder=true --verbosity normal --configfile /home/REDACTED/work/uno.extensions/.codeql-scratch/dbs/csharp/working/nugetconfig/nuget.config --force(dns block)josvsblobprodcus372.blob.core.windows.net/usr/bin/dotnet dotnet restore --no-dependencies /home/REDACTED/work/uno.extensions/.codeql-scratch/dbs/csharp/working/E7B5E0C97290FB53C2DCA420CF493E2A/missingpackages_workingdir --packages /home/REDACTED/work/uno.extensions/.codeql-scratch/dbs/csharp/working/missingpackages /p:DisableImplicitNuGetFallbackFolder=true --verbosity normal --configfile /home/REDACTED/work/uno.extensions/.codeql-scratch/dbs/csharp/working/nugetconfig/nuget.config --force(dns block)k0ivsblobprodcus356.blob.core.windows.net/usr/bin/dotnet dotnet restore --no-dependencies /home/REDACTED/work/uno.extensions/.codeql-scratch/dbs/csharp/working/E8B33609F82B4D2DB59C009A9FC7A4C1/missingpackages_workingdir --packages /home/REDACTED/work/uno.extensions/.codeql-scratch/dbs/csharp/working/missingpackages /p:DisableImplicitNuGetFallbackFolder=true --verbosity normal --configfile /home/REDACTED/work/uno.extensions/.codeql-scratch/dbs/csharp/working/nugetconfig/nuget.config --force(dns block)k4kvsblobprodcus344.blob.core.windows.net/usr/bin/dotnet dotnet restore --no-dependencies /home/REDACTED/work/uno.extensions/.codeql-scratch/dbs/csharp/working/070F606598054205578256E76ACC5529/missingpackages_workingdir --packages /home/REDACTED/work/uno.extensions/.codeql-scratch/dbs/csharp/working/missingpackages /p:DisableImplicitNuGetFallbackFolder=true --verbosity normal --configfile /home/REDACTED/work/uno.extensions/.codeql-scratch/dbs/csharp/working/nugetconfig/nuget.config --force(dns block)/usr/bin/dotnet dotnet restore --no-dependencies /home/REDACTED/work/uno.extensions/.codeql-scratch/dbs/csharp/working/E7B5E0C97290FB53C2DCA420CF493E2A/missingpackages_workingdir --packages /home/REDACTED/work/uno.extensions/.codeql-scratch/dbs/csharp/working/missingpackages /p:DisableImplicitNuGetFallbackFolder=true --verbosity normal --configfile /home/REDACTED/work/uno.extensions/.codeql-scratch/dbs/csharp/working/nugetconfig/nuget.config --force(dns block)/usr/bin/dotnet dotnet restore --no-dependencies /home/REDACTED/work/uno.extensions/.codeql-scratch/dbs/csharp/working/7C413E517467CDB6A87A0AA3E5D24D5A/missingpackages_workingdir --packages /home/REDACTED/work/uno.extensions/.codeql-scratch/dbs/csharp/working/missingpackages /p:DisableImplicitNuGetFallbackFolder=true --verbosity normal --configfile /home/REDACTED/work/uno.extensions/.codeql-scratch/dbs/csharp/working/nugetconfig/nuget.config --force(dns block)kijvsblobprodcus387.blob.core.windows.net/usr/bin/dotnet dotnet build --configuration Debug -p:TargetFrameworks=net9.0(dns block)kxqvsblobprodcus376.blob.core.windows.net/usr/bin/dotnet dotnet restore --no-dependencies /home/REDACTED/work/uno.extensions/.codeql-scratch/dbs/csharp/working/3E43B564B11FCDD81EAA8FFD9A21ABF0/missingpackages_workingdir --packages /home/REDACTED/work/uno.extensions/.codeql-scratch/dbs/csharp/working/missingpackages /p:DisableImplicitNuGetFallbackFolder=true --verbosity normal --configfile /home/REDACTED/work/uno.extensions/.codeql-scratch/dbs/csharp/working/nugetconfig/nuget.config --force(dns block)lylvsblobprodcus31.blob.core.windows.net/usr/bin/dotnet dotnet build --configuration Debug -p:TargetFrameworks=net9.0(dns block)mfjvsblobprodcus373.blob.core.windows.net/usr/bin/dotnet dotnet build --configuration Debug -p:TargetFrameworks=net9.0(dns block)n3kvsblobprodcus335.blob.core.windows.net/usr/bin/dotnet dotnet build --configuration Debug(dns block)/usr/bin/dotnet dotnet restore(dns block)o3svsblobprodcus318.blob.core.windows.net/usr/bin/dotnet dotnet restore --no-dependencies /home/REDACTED/work/uno.extensions/.codeql-scratch/dbs/csharp/working/676B829A743028324DDBB6E76201DE96/missingpackages_workingdir --packages /home/REDACTED/work/uno.extensions/.codeql-scratch/dbs/csharp/working/missingpackages /p:DisableImplicitNuGetFallbackFolder=true --verbosity normal --configfile /home/REDACTED/work/uno.extensions/.codeql-scratch/dbs/csharp/working/nugetconfig/nuget.config --force(dns block)ocsp.godaddy.com/usr/bin/dotnet dotnet restore --no-dependencies /home/REDACTED/work/uno.extensions/.codeql-scratch/dbs/csharp/working/08DFEECC4C1FD333FFD63C17C7081C67/missingpackages_workingdir --packages /home/REDACTED/work/uno.extensions/.codeql-scratch/dbs/csharp/working/missingpackages /p:DisableImplicitNuGetFallbackFolder=true --verbosity normal --configfile /home/REDACTED/work/uno.extensions/.codeql-scratch/dbs/csharp/working/nugetconfig/nuget.config --force(dns block)pdfvsblobprodcus380.blob.core.windows.net/usr/bin/dotnet dotnet restore --no-dependencies /home/REDACTED/work/uno.extensions/.codeql-scratch/dbs/csharp/working/23402928C2CB7C876A271090935211E5/missingpackages_workingdir --packages /home/REDACTED/work/uno.extensions/.codeql-scratch/dbs/csharp/working/missingpackages /p:DisableImplicitNuGetFallbackFolder=true --verbosity normal --configfile /home/REDACTED/work/uno.extensions/.codeql-scratch/dbs/csharp/working/nugetconfig/nuget.config --force(dns block)se1vsblobprodcus349.blob.core.windows.net/usr/bin/dotnet dotnet restore --no-dependencies /home/REDACTED/work/uno.extensions/.codeql-scratch/dbs/csharp/working/2F791F74279429A4411827997DA8D4D6/missingpackages_workingdir --packages /home/REDACTED/work/uno.extensions/.codeql-scratch/dbs/csharp/working/missingpackages /p:DisableImplicitNuGetFallbackFolder=true --verbosity normal --configfile /home/REDACTED/work/uno.extensions/.codeql-scratch/dbs/csharp/working/nugetconfig/nuget.config --force(dns block)uy6vsblobprodcus34.blob.core.windows.net/usr/bin/dotnet dotnet restore --no-dependencies /home/REDACTED/work/uno.extensions/.codeql-scratch/dbs/csharp/working/70593C6D7716240F283A24747D312FA1/missingpackages_workingdir --packages /home/REDACTED/work/uno.extensions/.codeql-scratch/dbs/csharp/working/missingpackages /p:DisableImplicitNuGetFallbackFolder=true --verbosity normal --configfile /home/REDACTED/work/uno.extensions/.codeql-scratch/dbs/csharp/working/nugetconfig/nuget.config --force(dns block)x3yvsblobprodcus370.blob.core.windows.net/usr/bin/dotnet dotnet build --configuration Debug -p:TargetFrameworks=net9.0(dns block)/usr/bin/dotnet dotnet restore --no-dependencies /home/REDACTED/work/uno.extensions/.codeql-scratch/dbs/csharp/working/8678811784E46132669587676937D2EF/missingpackages_workingdir --packages /home/REDACTED/work/uno.extensions/.codeql-scratch/dbs/csharp/working/missingpackages /p:DisableImplicitNuGetFallbackFolder=true --verbosity normal --configfile /home/REDACTED/work/uno.extensions/.codeql-scratch/dbs/csharp/working/nugetconfig/nuget.config --force(dns block)/usr/bin/dotnet dotnet restore --no-dependencies /home/REDACTED/work/uno.extensions/.codeql-scratch/dbs/csharp/working/2718D9FA22CF88B44DA542DEDD70FC6A/missingpackages_workingdir --packages /home/REDACTED/work/uno.extensions/.codeql-scratch/dbs/csharp/working/missingpackages /p:DisableImplicitNuGetFallbackFolder=true --verbosity normal --configfile /home/REDACTED/work/uno.extensions/.codeql-scratch/dbs/csharp/working/nugetconfig/nuget.config --force(dns block)ytvvsblobprodcus310.blob.core.windows.net/usr/bin/dotnet dotnet build --configuration Debug -p:TargetFrameworks=net9.0(dns block)If you need me to access, download, or install something from one of these locations, you can either:
Original prompt
✨ Let Copilot coding agent set things up for you — coding agent works faster and does higher quality work when set up for your repo.