Skip to content

Retire Linux-era view shims - #906

Merged
johnml1135 merged 3 commits into
mainfrom
retire-linux-era-view-shims
May 22, 2026
Merged

Retire Linux-era view shims#906
johnml1135 merged 3 commits into
mainfrom
retire-linux-era-view-shims

Conversation

@johnml1135

@johnml1135johnml1135 commented May 21, 2026

Copy link
Copy Markdown
Contributor

Summary

  • remove the retired Linux-era managed Views shims ViewInputManager and ManagedVwWindow, including their solution and build wiring
  • keep the Windows-native RootSite path in place by using VwTextStore/IViewInputMgr and HWND client-rectangle geometry while removing stale IVwWindow/VwWindow interop exposure
  • update reg-free manifest inputs, architecture/OpenSpec docs, and task tracking for the shim retirement

Validation

  • ./build.ps1
  • ./test.ps1 -SkipManaged -TestProject TestViews
  • ./test.ps1 -TestProject FwBuildTasksTests -TestFilter "FullyQualifiedName~RegFreeCreator"
  • ./test.ps1 -TestProject SimpleRootSiteTests
  • CI: Whitespace check
  • Manual smoke in rebuilt FieldWorks app covering lexical edit view typing, keyboard switching, IME/composition, selection/PageUp/PageDown, and launch/manifest sanity

This change is Reviewable

CopilotAI review requested due to automatic review settings May 21, 2026 00:17

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Note

Copilot was unable to run its full agentic suite in this review.

This PR retires legacy Linux/Mono-era managed Views shims (ViewInputManager, ManagedVwWindow) and updates code/docs/build plumbing to rely solely on the Windows-native Views input and geometry paths.

Changes:

  • Removed managed shim projects/sources and related solution/build/reg-free manifest wiring.
  • Simplified native Views codepaths to always use Windows-native VwTextStore (input) and GetClientRect (geometry), eliminating COM activation branches.
  • Updated OpenSpec architecture docs/specs and change-tracking artifacts to reflect the shim retirement.

Reviewed changes

Copilot reviewed 28 out of 28 changed files in this pull request and generated 4 comments.

Show a summary per file
FileDescription
openspec/specs/architecture/ui-framework/views-rendering.mdUpdates architecture diagram text to reflect Windows-native input/geometry and shim retirement.
openspec/specs/architecture/interop/native-boundary.mdUpdates interop boundary documentation to remove ManagedVwWindow as an active boundary.
openspec/specs/architecture/interop/com-contracts.mdNotes retired shims in COM contracts documentation.
openspec/changes/retire-linux-era-view-shims/**Adds proposal/design/research/tasks and requirements specs for shim retirement and validation.
Src/views/VwRootBox.cppRemoves non-Windows COM activation branch for ViewInputManager.
Src/views/VwSelection.cppRemoves non-Windows IVwWindow wrapper path; always uses GetClientRect.
Src/views/VwTextStore.cppRemoves non-Windows conditional around ClientToScreen / TSF-related behavior.
Src/views/Views.idhRemoves IVwWindow/VwWindow interface+coclass; adjusts IViewInputMgr comment.
Src/views/Views_GUIDs.cppRemoves GUID exports for IVwWindow/VwWindow.
Src/Common/SimpleRootSite/ViewInputManager.csDeletes managed ViewInputManager shim.
Src/ManagedVwWindow/**Deletes managed ManagedVwWindow project and its tests.
Build/RegFree.targetsRemoves ManagedVwWindow.dll from managed COM manifest inputs.
Src/Common/FieldWorks/BuildInclude.targetsRemoves ManagedVwWindow.dll from FieldWorks manifest inputs.
Build/mkall.targetsRemoves excluded CLSIDs for the retired managed shims.
Build/Src/FwBuildTasks/CollectTargets.csRemoves special-case Unix-only condition for ManagedVwWindow project.
FieldWorks.slnRemoves ManagedVwWindow projects from the solution.
.github/src-catalog.mdRemoves catalog entry for ManagedVwWindow.

Comment threadopenspec/specs/architecture/ui-framework/views-rendering.md
Comment threadopenspec/specs/architecture/interop/native-boundary.md
Comment threadSrc/views/VwSelection.cpp
Comment threadSrc/views/VwTextStore.cpp
@github-actions

Copy link
Copy Markdown

NUnit Tests

1 files ±0 1 suites ±0 9m 25s ⏱️ - 1m 43s
4 203 tests - 2 4 132 ✅ - 2 71 💤 ±0 0 ❌ ±0 
4 212 runs - 2 4 141 ✅ - 2 71 💤 ±0 0 ❌ ±0 

Results for commit 32dbddd. ± Comparison against base commit b0bf8a8.

This pull request removes 2 tests.
SIL.FieldWorks.Language.ManagedVwWindowTests ‑ NotSettingWindowTest
SIL.FieldWorks.Language.ManagedVwWindowTests ‑ SimpleWindowTest

@jasonleenaylorjasonleenaylor left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

:lgtm:

@jasonleenaylor reviewed 20 files and all commit messages, and made 1 comment.
Reviewable status: 20 of 28 files reviewed, 4 unresolved discussions (waiting on johnml1135).

@johnml1135
johnml1135 merged commit 8e99077 into mainMay 22, 2026
9 of 12 checks passed
@johnml1135
johnml1135 deleted the retire-linux-era-view-shims branch May 22, 2026 11:56
jasonleenaylor added a commit that referenced this pull request Jun 4, 2026
Add missing manifest files to RescuePatching target
The base build 1437 (from release/9.3.9) still contains
ManagedVwWindow.manifest and SimpleRootSite.manifest, which were
removed on main by #906. The existing fix (#909) handled .dll,
.dll.config, and .pdb but missed the two .manifest files, causing
PYRO0305 errors during patch builds.
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
johnml1135 added a commit that referenced this pull request Jul 6, 2026
- VersionInfoProvider: copyright year no longer freezes at whatever year the
constant was last edited, ApplicationVersion resolves from the correct
assembly instead of always falling back to the entry assembly, and
MajorVersion/ParseInformationalVersion index defensively instead of
assuming a fixed part count. Covered by new VersionInfoProviderTests.cs.
- RegFree.targets: removes a dangling ManagedVwWindow.dll entry; the project
was already retired in #904/#906, so the entry pointed at nothing.
- opsx-*.prompt.md: replace inlined instructions with delegation to the
existing .claude/skills/openspec-*/SKILL.md files, per this repo's
skills-over-inline-prompts convention.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
johnml1135 added a commit that referenced this pull request Jul 7, 2026
…d files
ManagedVwWindow.dll was retired with the Linux-era view shims (#906). The
RegFree.targets fallback entry was removed earlier in this PR, but
BuildInclude.targets pre-populates ManagedComAssemblies explicitly for
FieldWorks.exe (bypassing that fallback), so the "Could not find file"
warning kept firing for the main product. Also drops the matching stale
CLSID exclusion in mkall.targets.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
johnml1135 added a commit that referenced this pull request Jul 7, 2026
ManagedVwWindow.dll was retired with the Linux-era view shims (#906). The
RegFree.targets fallback entry was removed earlier in this PR, but
BuildInclude.targets pre-populates ManagedComAssemblies explicitly for
FieldWorks.exe (bypassing that fallback), so the "Could not find file"
warning kept firing for the main product. Also drops the matching stale
CLSID exclusion in mkall.targets.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
johnml1135 added a commit that referenced this pull request Jul 14, 2026
Both are fully implemented and merged (PR #870, PR #906), unrelated
to the Avalonia migration spine; archiving keeps openspec/changes/
scoped to work still in flight.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
johnml1135 added a commit that referenced this pull request Aug 12, 2026
- VersionInfoProvider: copyright year no longer freezes at whatever year the
constant was last edited, ApplicationVersion resolves from the correct
assembly instead of always falling back to the entry assembly, and
MajorVersion/ParseInformationalVersion index defensively instead of
assuming a fixed part count. Covered by new VersionInfoProviderTests.cs.
- RegFree.targets: removes a dangling ManagedVwWindow.dll entry; the project
was already retired in #904/#906, so the entry pointed at nothing.
- opsx-*.prompt.md: replace inlined instructions with delegation to the
existing .claude/skills/openspec-*/SKILL.md files, per this repo's
skills-over-inline-prompts convention.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
johnml1135 added a commit that referenced this pull request Aug 12, 2026
ManagedVwWindow.dll was retired with the Linux-era view shims (#906). The
RegFree.targets fallback entry was removed earlier in this PR, but
BuildInclude.targets pre-populates ManagedComAssemblies explicitly for
FieldWorks.exe (bypassing that fallback), so the "Could not find file"
warning kept firing for the main product. Also drops the matching stale
CLSID exclusion in mkall.targets.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
johnml1135 added a commit that referenced this pull request Aug 14, 2026
- VersionInfoProvider: copyright year no longer freezes at whatever year the
constant was last edited, ApplicationVersion resolves from the correct
assembly instead of always falling back to the entry assembly, and
MajorVersion/ParseInformationalVersion index defensively instead of
assuming a fixed part count. Covered by new VersionInfoProviderTests.cs.
- RegFree.targets: removes a dangling ManagedVwWindow.dll entry; the project
was already retired in #904/#906, so the entry pointed at nothing.
- opsx-*.prompt.md: replace inlined instructions with delegation to the
existing .claude/skills/openspec-*/SKILL.md files, per this repo's
skills-over-inline-prompts convention.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
johnml1135 added a commit that referenced this pull request Aug 14, 2026
ManagedVwWindow.dll was retired with the Linux-era view shims (#906). The
RegFree.targets fallback entry was removed earlier in this PR, but
BuildInclude.targets pre-populates ManagedComAssemblies explicitly for
FieldWorks.exe (bypassing that fallback), so the "Could not find file"
warning kept firing for the main product. Also drops the matching stale
CLSID exclusion in mkall.targets.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
johnml1135 added a commit that referenced this pull request Aug 26, 2026
- VersionInfoProvider: copyright year no longer freezes at whatever year the
constant was last edited, ApplicationVersion resolves from the correct
assembly instead of always falling back to the entry assembly, and
MajorVersion/ParseInformationalVersion index defensively instead of
assuming a fixed part count. Covered by new VersionInfoProviderTests.cs.
- RegFree.targets: removes a dangling ManagedVwWindow.dll entry; the project
was already retired in #904/#906, so the entry pointed at nothing.
- opsx-*.prompt.md: replace inlined instructions with delegation to the
existing .claude/skills/openspec-*/SKILL.md files, per this repo's
skills-over-inline-prompts convention.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
johnml1135 added a commit that referenced this pull request Aug 26, 2026
ManagedVwWindow.dll was retired with the Linux-era view shims (#906). The
RegFree.targets fallback entry was removed earlier in this PR, but
BuildInclude.targets pre-populates ManagedComAssemblies explicitly for
FieldWorks.exe (bypassing that fallback), so the "Could not find file"
warning kept firing for the main product. Also drops the matching stale
CLSID exclusion in mkall.targets.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
johnml1135 added a commit that referenced this pull request Sep 1, 2026
…, thin opsx prompts (#978)
* chore: small fixes pulled off from PR #964
- VersionInfoProvider: copyright year no longer freezes at whatever year the
constant was last edited, ApplicationVersion resolves from the correct
assembly instead of always falling back to the entry assembly, and
MajorVersion/ParseInformationalVersion index defensively instead of
assuming a fixed part count. Covered by new VersionInfoProviderTests.cs.
- RegFree.targets: removes a dangling ManagedVwWindow.dll entry; the project
was already retired in #904/#906, so the entry pointed at nothing.
- opsx-*.prompt.md: replace inlined instructions with delegation to the
existing .claude/skills/openspec-*/SKILL.md files, per this repo's
skills-over-inline-prompts convention.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
* Drop stale ManagedVwWindow.dll references from RegFree build files
ManagedVwWindow.dll was retired with the Linux-era view shims (#906). The
RegFree.targets fallback entry was removed earlier in this PR, but
BuildInclude.targets pre-populates ManagedComAssemblies explicitly for
FieldWorks.exe (bypassing that fallback), so the "Could not find file"
warning kept firing for the main product. Also drops the matching stale
CLSID exclusion in mkall.targets.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
* style: use ASCII punctuation in new prompt/doc/test prose
This branch's new content used em-dashes and a Unicode "<=" sign in a
few places (opsx-explore.prompt.md, opsx-onboard.prompt.md, AGENTS.md,
VersionInfoProviderTests.cs), which render poorly in some git tooling.
Switch them to the ASCII "--" and "<=" forms the rest of the repo's
prose and comments already use.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
* Address review comments on VersionInfoProvider
Shorten the comment blocks flagged over the 200-character cap
(MajorVersion 241, CopyrightString 214, ApplicationVersion 204) and
rewrite the four that narrated repo history, named callers, or restated
the member name.
Guard the one line in this file that could actually throw:
Convert.ToInt32(versionParts[1]) raised FormatException on a non-numeric
token, out of a property getter the splash screen and About box read.
int.TryParse leaves date at 0, which the existing date > 0 check already
treats as no date, so the fallback path is unchanged. This matches
BaseBuildNumber, which already uses int.TryParse in the same file.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011arsbDno5H5y2pLGqGgb9L
---------
Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com>
Sign up for freeto 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

@johnml1135@jasonleenaylor