Remove WinRT composition (inheritance) from PaletteItem#19132
Merged
Conversation
Right now, we construct **two objects** for every palette item: the derived type and the base type. It's unnnecessary. This also removes many of our palette items from our IDL. The only ones that are necessary to expose via our WinRT API surface are the ones that are used in XAML documents.
Member
Author
|
The tests are probably exploded rigth now. |
Member
Author
|
Yes, we should cache the name. |
Member
Author
|
(Specifically: it is called 2386 times for a small repertoire of only 110 or so commands...) |
lhecker
approved these changes
Jul 16, 2025
| { | ||
| return NestedItemTemplate(); | ||
| } | ||
| __fallthrough; |
Member
There was a problem hiding this comment.
[[fallthrough]], I believe. But why not just do a break instead?
Comment on lines
16
to
19
| const auto icon = Microsoft::Terminal::UI::IconPathConverter::IconWUX(static_cast<T*>(this)->Icon()); | ||
| icon.Width(16); | ||
| icon.Height(16); | ||
| return icon; |
Member
There was a problem hiding this comment.
Is this also called hundreds of times? It looks immutable at first glance.
carlos-zamora
approved these changes
Jul 16, 2025
Comment on lines
+106
to
+108
| if (auto tab = _tab.get()) | ||
| { | ||
| if (auto terminalTab = tab.try_as<winrt::TerminalApp::TerminalTab>()) |
Member
There was a problem hiding this comment.
Suggested change
| if (auto tab = _tab.get()) | |
| { | |
| if (auto terminalTab = tab.try_as<winrt::TerminalApp::TerminalTab>()) | |
| if (const auto tab = _tab.get()) | |
| { | |
| if (const auto terminalTab = tab.try_as<winrt::TerminalApp::TerminalTab>()) |
DHowett
added a commit
that referenced
this pull request
Jul 19, 2025
In #19132, we introduced caching for BasePaletteItem::ResolvedIcon as a late optimization. We actually can't cache those, because they're UI elements, with parents and relationships and all. When you filter a list with icons and the list elements change physical position, they're assigned new templates-- and new parents. Fixes e7939bb
DHowett
added a commit
that referenced
this pull request
Jul 21, 2025
In #19132, we introduced caching for BasePaletteItem::ResolvedIcon as a late optimization. We actually can't cache those, because they're UI elements, with parents and relationships and all. When you filter a list with icons and the list elements change physical position, they're assigned new templates-- and new parents. Fixes e7939bb Co-authored-by: Eric Nelson <[email protected]>
DHowett
added a commit
that referenced
this pull request
Jul 28, 2025
The bulk of this work is changing `Command::Name` (and its descendants like `GenerateName`) to support looking up names in English and in the local language. When matching a "palette item" with a "subtitle" (a new field introduced to store the English command name when the current language is not English), the weight of the subtitle is used only if it is greater than the weight of the name. This ensures that we do not penalize or over-promote results that contain similar Latin letters in both fields. Refs #19130, #19131, #19132, #19165 Closes #7039
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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.

Right now, we construct two objects for every palette item: the
derived type and the base type. It's unnnecessary.
This pull request replaces WinRT composition with a good old-fashioned
enum ThingType.This also removes many of our palette items from our IDL. The only ones
that are necessary to expose via our WinRT API surface are the ones that
are used in XAML documents.
I originally removed the caching for
Command.Name, but it turns outthat something calls
Nameroughly 17 times per command and havingthe generator running that often is a serious waste of CPU.
Validation Steps