Skip to content

API Review: Custom context menu Spellcheck#5553

Merged
anuragkumar878 merged 18 commits into
mainfrom
user/kumaranurag/custom_context_menu_spellcheck_integration
May 18, 2026
Merged

API Review: Custom context menu Spellcheck#5553
anuragkumar878 merged 18 commits into
mainfrom
user/kumaranurag/custom_context_menu_spellcheck_integration

Conversation

@anuragkumar878

@anuragkumar878 anuragkumar878 commented Mar 31, 2026

Copy link
Copy Markdown
Contributor

Spellcheck Suggestions for Custom Context Menus

Enables host apps rendering custom context menus to discover, retrieve, and apply spellcheck suggestions for misspelled words in editable fields. Introduces a
deferred capability discovery pattern on EventArgs2 that is extensible to future async capabilities without additional EventArgs versions.

New Interfaces:

ICoreWebView2ContextMenuRequestedEventArgs2 extends ICoreWebView2ContextMenuRequestedEventArgs

  • get_DeferredCapabilities(flags*) — Returns a bitmask indicating which async capabilities are available for this context menu invocation (e.g., SPELL_CHECK).
  • GetDeferredCapability(REFIID, void**) — IID-based accessor to acquire a capability interface. Returns E_NOINTERFACE if the capability is not applicable.

ICoreWebView2ContextMenuSpellCheck (acquired via GetDeferredCapability)

  • get_MisspelledWord(LPWSTR*) — Returns the misspelled word under the cursor.
  • GetSpellCheckSuggestionsAsync(handler) — Registers a one-shot completion handler that fires exactly once (always asynchronously) with spellcheck suggestions.
    Fires immediately (via PostTask) if suggestions are already resolved, or deferred until ready.

ICoreWebView2GetSpellCheckSuggestionsCompletedHandler

  • Invoke(errorCode, suggestions) — Callback delivering an HRESULT and an ICoreWebView2ContextMenuItemCollection. Each item is a standard
    ICoreWebView2ContextMenuItem with Label (suggestion text) and CommandId (opaque identifier).

Usage flow:

  1. Host receives ContextMenuRequested, QIs for EventArgs2
  2. Checks DeferredCapabilities for SPELL_CHECK flag
  3. Calls GetDeferredCapability(IID_SpellCheck) to acquire spellcheck interface
  4. Sets Handled = TRUE, takes deferral
  5. Reads MisspelledWord, calls GetSpellCheckSuggestionsAsync with handler
  6. Handler fires with ICoreWebView2ContextMenuItemCollection → host builds menu
  7. User selects → host sets args->put_SelectedCommandId(item->CommandId)
  8. Completes deferral — runtime applies the correction via unified commanding

Key design decisions:

  • Suggestions returned as ICoreWebView2ContextMenuItem objects (not strings) — consistent with existing menu item types
  • Unified commanding via SelectedCommandId — same path as Cut, Copy, Paste; no separate ApplySpellCheckSuggestion method
  • Suggestion item Name set to "spellCheckSuggestion" for machine-readable identification
  • E_ILLEGAL_METHOD_CALL on double handler registration (no silent replacement)
  • Direct QI for SpellCheck from EventArgs returns E_NOINTERFACE — forces EventArgs2 discovery path to distinguish "old runtime" from "not applicable"

@anuragkumar878

anuragkumar878 commented Mar 31, 2026

Copy link
Copy Markdown
Contributor Author

@microsoft-github-policy-service agree company="Microsoft"

Copilot AI 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

This PR introduces a new API review spec to extend the existing WebView2 ContextMenuRequested customization flow with spellcheck support, enabling hosts that render custom context menus to surface and apply spellcheck suggestions.

Changes:

  • Adds a new spec describing custom-context-menu spellcheck scenarios and motivation.
  • Provides Win32 C++ and C# example flows for querying suggestions, handling async readiness, and applying a suggestion.
  • Proposes new Win32 COM interfaces (ICoreWebView2ContextMenuTarget2, ICoreWebView2ContextMenuRequestedEventArgs2) plus corresponding .NET/WinRT projections.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread specs/CustomContextMenuSpellcheck.md Outdated
Comment thread specs/CustomContextMenuSpellcheck.md Outdated
Comment thread specs/CustomContextMenuSpellcheck.md Outdated
Comment thread specs/CustomContextMenuSpellcheck.md Outdated
Comment thread specs/CustomContextMenuSpellcheck.md Outdated
@MicrosoftEdge MicrosoftEdge deleted a comment from Copilot AI Apr 1, 2026
@anuragkumar878 anuragkumar878 added the API Proposal Review WebView2 API Proposal for review. label Apr 1, 2026
@anuragkumar878 anuragkumar878 marked this pull request as ready for review April 1, 2026 10:33
@anuragkumar878 anuragkumar878 requested a review from Copilot April 2, 2026 04:53

Copilot AI 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

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


💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread specs/CustomContextMenuSpellcheck.md Outdated
Comment thread specs/CustomContextMenuSpellcheck.md Outdated
Comment thread specs/CustomContextMenuSpellcheck.md Outdated
Comment thread specs/CustomContextMenuSpellcheck.md Outdated

@shrinaths shrinaths left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Review Summary

The architecture and design are sound — DeferredCapabilityDiscovery, ContextMenuItemCollection return type, unified SelectedCommandId commanding, and always-async callback are all well done. The comments below focus on bringing the spec up to the polish expected for Windows API review board submission:

Must fix:

  • Placeholder UUIDs (lines 260, 298, 320) — generate real values
  • .NET projection should use [interface_name] pattern, not EventArgs2 class (line 363)
  • Verify MIDL3 format requirement with SDK team (line 233)

Should fix:

  • Rename title to "Spellcheck Support for Custom Context Menus"
  • Complete the samples (both C++ and C# have undefined helpers / placeholder comments)
  • Add CHECK_FAILURE() consistently in C++ sample
  • Fix SelectedCommandId default value in error table (it's -1, not 0)

Nit:

  • Consistent casing of "spellcheck" in prose
  • Avoid contractions per Microsoft style guide
  • Use /// doc comments in .NET projection
  • Clean up casual language ("for example -")

Comment thread specs/CustomContextMenuSpellcheck.md Outdated
Comment thread specs/CustomContextMenuSpellcheck.md Outdated
Comment thread specs/CustomContextMenuSpellcheck.md Outdated
Comment thread specs/CustomContextMenuSpellcheck.md Outdated
Comment thread specs/CustomContextMenuSpellcheck.md Outdated
Comment thread specs/CustomContextMenuSpellcheck.md Outdated
Comment thread specs/CustomContextMenuSpellcheck.md Outdated
Comment thread specs/CustomContextMenuSpellcheck.md
Comment thread specs/CustomContextMenuSpellcheck.md Outdated
Comment thread specs/CustomContextMenuSpellcheck.md Outdated
Comment thread specs/CustomContextMenuSpellcheck.md Outdated
Comment thread specs/CustomContextMenuSpellcheck.md Outdated
Comment thread specs/CustomContextMenuSpellcheck.md Outdated
Comment thread specs/CustomContextMenuSpellcheck.md Outdated
Comment thread specs/CustomContextMenuSpellcheck.md Outdated
Comment thread specs/CustomContextMenuSpellcheck.md Outdated
Comment thread specs/CustomContextMenuSpellcheck.md Outdated
Comment thread specs/CustomContextMenuSpellcheck.md
Comment thread specs/CustomContextMenuSpellcheck.md Outdated
Comment thread specs/CustomContextMenuSpellcheck.md Outdated
Comment thread specs/CustomContextMenuSpellcheck.md

@shrinaths shrinaths left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Documentation style review - checking for Microsoft documentation guidelines adherence.

Comment thread specs/CustomContextMenuSpellcheck.md
Comment thread specs/CustomContextMenuSpellcheck.md Outdated
Comment thread specs/CustomContextMenuSpellcheck.md Outdated
Comment thread specs/CustomContextMenuSpellcheck.md
Comment thread specs/CustomContextMenuSpellcheck.md Outdated
Comment thread specs/CustomContextMenuSpellcheck.md
Comment thread specs/CustomContextMenuSpellcheck.md Outdated
Comment thread specs/CustomContextMenuSpellcheck.md
Comment thread specs/CustomContextMenuSpellcheck.md
@anuragkumar878 anuragkumar878 merged commit 3ab0c67 into main May 18, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

API Proposal Review WebView2 API Proposal for review.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants