Skip to content

Commit cb2daea

Browse files
committed
Make emoji icons work again too... NOTE RELATED 8583
1 parent afaf33a commit cb2daea

File tree

10 files changed

+25
-9
lines changed

10 files changed

+25
-9
lines changed

src/cascadia/TerminalApp/CommandPaletteItems.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ namespace winrt::TerminalApp::implementation
3131

3232
winrt::hstring Icon()
3333
{
34-
return _Command.IconPath();
34+
return _Command.ResolvedIcon();
3535
}
3636

3737
WINRT_PROPERTY(Microsoft::Terminal::Settings::Model::Command, Command, nullptr);

src/cascadia/TerminalSettingsModel/ActionEntry.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ namespace winrt::Microsoft::Terminal::Settings::Model::implementation
5252
{
5353
if (!_Icon.empty())
5454
{
55-
ResolveMediaResourceIntoPath(basePath, _Icon, resolver, _resolvedIcon);
55+
ResolveIconMediaResourceIntoPath(basePath, _Icon, resolver, _resolvedIcon);
5656
}
5757
}
5858
}

src/cascadia/TerminalSettingsModel/CascadiaSettings.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -488,7 +488,7 @@ void CascadiaSettings::_validateAllSchemesExist()
488488
}
489489
}
490490

491-
void CascadiaSettings::_resolveSingleMediaResource(Model::OriginTag /*origin*/, std::wstring_view basePath, const Model::IMediaResource& resource)
491+
void CascadiaSettings::_resolveSingleMediaResource(std::wstring_view basePath, const Model::IMediaResource& resource)
492492
{
493493
auto resourcePath{ resource.Path() };
494494

src/cascadia/TerminalSettingsModel/CascadiaSettings.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -210,7 +210,7 @@ namespace winrt::Microsoft::Terminal::Settings::Model::implementation
210210

211211
void _validateSettings();
212212
void _validateAllSchemesExist();
213-
void _resolveSingleMediaResource(Model::OriginTag origin, std::wstring_view basePath, const Model::IMediaResource& resource);
213+
void _resolveSingleMediaResource(std::wstring_view basePath, const Model::IMediaResource& resource);
214214
void _validateMediaResources();
215215
void _validateProfileEnvironmentVariables();
216216
void _validateKeybindings() const;

src/cascadia/TerminalSettingsModel/Command.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -594,7 +594,7 @@ namespace winrt::Microsoft::Terminal::Settings::Model::implementation
594594
{
595595
if (_iconPath && !_iconPath->empty())
596596
{
597-
ResolveMediaResourceIntoPath(basePath, hstring{ *_iconPath }, resolver, _resolvedIcon);
597+
ResolveIconMediaResourceIntoPath(basePath, hstring{ *_iconPath }, resolver, _resolvedIcon);
598598
}
599599
}
600600

src/cascadia/TerminalSettingsModel/FolderEntry.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -147,7 +147,7 @@ namespace winrt::Microsoft::Terminal::Settings::Model::implementation
147147
{
148148
if (!_Icon.empty())
149149
{
150-
ResolveMediaResourceIntoPath(basePath, _Icon, resolver, _resolvedIcon);
150+
ResolveIconMediaResourceIntoPath(basePath, _Icon, resolver, _resolvedIcon);
151151
}
152152

153153
if (_RawEntries)

src/cascadia/TerminalSettingsModel/MediaResourceSupport.h

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,3 +61,18 @@ _TIL_INLINEPREFIX void ResolveMediaResourceIntoPath(const winrt::hstring& basePa
6161
resolver(basePath, *mediaResource); // populates MediaResourcePath
6262
resolvedPath = std::move(mediaResource->path);
6363
}
64+
65+
_TIL_INLINEPREFIX void ResolveIconMediaResourceIntoPath(const winrt::hstring& basePath, const winrt::hstring& unresolvedPath, const winrt::Microsoft::Terminal::Settings::Model::MediaResourceResolver& resolver, MediaResourcePath& resolvedPath)
66+
{
67+
std::wstring_view unresolvedPathAsView{ unresolvedPath };
68+
if (unresolvedPath.size() <= 2 || unresolvedPathAsView.find_first_of(L'\u200D') <= 8)
69+
{
70+
// **HEURISTIC**
71+
// If it's 2 code units long or contains a zero-width joiner in the first 8 code units, it is
72+
// PROBABLY an Emoji. Just pass it through.
73+
resolvedPath = { unresolvedPath, true, true };
74+
return;
75+
}
76+
77+
ResolveMediaResourceIntoPath(basePath, unresolvedPath, resolver, resolvedPath);
78+
}

src/cascadia/TerminalSettingsModel/Profile.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -558,7 +558,7 @@ void Profile::ResolveMediaResources(const Model::MediaResourceResolver& resolver
558558
if (const auto icon{ _getIconImpl() })
559559
{
560560
const auto iconSource{ _getIconOverrideSourceImpl() };
561-
ResolveMediaResourceIntoPath(iconSource->SourceBasePath, *icon, resolver, _resolvedIcon);
561+
ResolveIconMediaResourceIntoPath(iconSource->SourceBasePath, *icon, resolver, _resolvedIcon);
562562
}
563563

564564
if (const auto container{ _DefaultAppearance.as<IMediaResourceContainer>() })

src/cascadia/TerminalSettingsModel/ProfileEntry.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ namespace winrt::Microsoft::Terminal::Settings::Model::implementation
7777
{
7878
if (!_Icon.empty())
7979
{
80-
ResolveMediaResourceIntoPath(basePath, _Icon, resolver, _resolvedIcon);
80+
ResolveIconMediaResourceIntoPath(basePath, _Icon, resolver, _resolvedIcon);
8181
}
8282
}
8383
}

src/cascadia/UIHelpers/IconPathConverter.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -135,7 +135,8 @@ namespace winrt::Microsoft::Terminal::UI::implementation
135135
//
136136
// Anything longer than 2 wchar_t's _isn't_ an emoji or symbol, so
137137
// don't do this if it's just an invalid path.
138-
if (!iconSource && iconPath.size() <= 2)
138+
std::wstring_view iconPathAsView{ iconPath };
139+
if (!iconSource && (iconPath.size() <= 2 || iconPathAsView.find_first_of(L'\u200D') <= 8))
139140
{
140141
try
141142
{

0 commit comments

Comments
 (0)