diff --git a/src/cascadia/TerminalApp/TabHeaderControl.h b/src/cascadia/TerminalApp/TabHeaderControl.h
index 39744b2bcb0a..41c81fb783d3 100644
--- a/src/cascadia/TerminalApp/TabHeaderControl.h
+++ b/src/cascadia/TerminalApp/TabHeaderControl.h
@@ -23,6 +23,7 @@ namespace winrt::TerminalApp::implementation
WINRT_CALLBACK(PropertyChanged, Windows::UI::Xaml::Data::PropertyChangedEventHandler);
OBSERVABLE_GETSET_PROPERTY(winrt::hstring, Title, _PropertyChangedHandlers);
OBSERVABLE_GETSET_PROPERTY(bool, IsPaneZoomed, _PropertyChangedHandlers);
+ OBSERVABLE_GETSET_PROPERTY(double, RenamerMaxWidth, _PropertyChangedHandlers);
OBSERVABLE_GETSET_PROPERTY(bool, IsProgressRingActive, _PropertyChangedHandlers);
OBSERVABLE_GETSET_PROPERTY(bool, IsProgressRingIndeterminate, _PropertyChangedHandlers);
OBSERVABLE_GETSET_PROPERTY(uint32_t, ProgressValue, _PropertyChangedHandlers);
diff --git a/src/cascadia/TerminalApp/TabHeaderControl.idl b/src/cascadia/TerminalApp/TabHeaderControl.idl
index 0fc8fc2da3ee..808b72067c4a 100644
--- a/src/cascadia/TerminalApp/TabHeaderControl.idl
+++ b/src/cascadia/TerminalApp/TabHeaderControl.idl
@@ -9,6 +9,7 @@ namespace TerminalApp
{
String Title { get; set; };
Boolean IsPaneZoomed { get; set; };
+ Double RenamerMaxWidth { get; set; };
Boolean IsProgressRingActive { get; set; };
Boolean IsProgressRingIndeterminate { get; set; };
UInt32 ProgressValue { get; set; };
diff --git a/src/cascadia/TerminalApp/TabHeaderControl.xaml b/src/cascadia/TerminalApp/TabHeaderControl.xaml
index 65e8b5ee7b96..ba8350d3b123 100644
--- a/src/cascadia/TerminalApp/TabHeaderControl.xaml
+++ b/src/cascadia/TerminalApp/TabHeaderControl.xaml
@@ -9,8 +9,25 @@ the MIT License. See LICENSE in the project root for license information. -->
xmlns:mux="using:Microsoft.UI.Xaml.Controls"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
- mc:Ignorable="d">
+ mc:Ignorable="d"
+ MinHeight="16">
+
+
+
+
+ 0,0,0,1
+
+
+ 0,0,0,1
+
+
+ 0,0,0,1
+
+
+
+
+
Visibility="Collapsed"
MinHeight="0"
Padding="4,0,4,0"
- Margin="0,-8,0,-8"
MaxLength="1024"
- LostFocus="RenameBoxLostFocusHandler"/>
+ LostFocus="RenameBoxLostFocusHandler"
+ Height="16"
+ FontSize="12"
+ IsSpellCheckEnabled="False"
+ MaxWidth="{x:Bind RenamerMaxWidth, Mode=OneWay}"/>
diff --git a/src/cascadia/TerminalApp/TerminalTab.cpp b/src/cascadia/TerminalApp/TerminalTab.cpp
index 3777f0ab19ee..8e7252c4e41d 100644
--- a/src/cascadia/TerminalApp/TerminalTab.cpp
+++ b/src/cascadia/TerminalApp/TerminalTab.cpp
@@ -50,6 +50,9 @@ namespace winrt::TerminalApp::implementation
tab->SetTabText(title);
}
});
+
+ _UpdateHeaderControlMaxWidth();
+
// Use our header control as the TabViewItem's header
TabViewItem().Header(_headerControl);
}
@@ -75,6 +78,26 @@ namespace winrt::TerminalApp::implementation
_RecalculateAndApplyTabColor();
}
+ winrt::fire_and_forget TerminalTab::_UpdateHeaderControlMaxWidth()
+ {
+ auto weakThis{ get_weak() };
+
+ co_await winrt::resume_foreground(TabViewItem().Dispatcher());
+
+ if (auto tab{ weakThis.get() })
+ {
+ const auto settings{ winrt::TerminalApp::implementation::AppLogic::CurrentAppSettings() };
+ if (settings.GlobalSettings().TabWidthMode() == winrt::Microsoft::UI::Xaml::Controls::TabViewWidthMode::SizeToContent)
+ {
+ tab->_headerControl.RenamerMaxWidth(HeaderRenameBoxWidthTitleLength);
+ }
+ else
+ {
+ tab->_headerControl.RenamerMaxWidth(HeaderRenameBoxWidthDefault);
+ }
+ }
+ }
+
void TerminalTab::_SetToolTip(const winrt::hstring& tabTitle)
{
WUX::Controls::ToolTip toolTip{};
@@ -169,6 +192,9 @@ namespace winrt::TerminalApp::implementation
void TerminalTab::UpdateSettings(const winrt::TerminalApp::TerminalSettings& settings, const GUID& profile)
{
_rootPane->UpdateSettings(settings, profile);
+
+ // The tabWidthMode may have changed, update the header control accordingly
+ _UpdateHeaderControlMaxWidth();
}
// Method Description:
diff --git a/src/cascadia/TerminalApp/TerminalTab.h b/src/cascadia/TerminalApp/TerminalTab.h
index 1ae7ad2e6dd9..62783d5160e4 100644
--- a/src/cascadia/TerminalApp/TerminalTab.h
+++ b/src/cascadia/TerminalApp/TerminalTab.h
@@ -7,6 +7,9 @@
#include "TabBase.h"
#include "TerminalTab.g.h"
+static constexpr double HeaderRenameBoxWidthDefault{ 165 };
+static constexpr double HeaderRenameBoxWidthTitleLength{ std::numeric_limits::infinity() };
+
// fwdecl unittest classes
namespace TerminalAppLocalTests
{
@@ -102,6 +105,7 @@ namespace winrt::TerminalApp::implementation
void _MakeTabViewItem();
+ winrt::fire_and_forget _UpdateHeaderControlMaxWidth();
void _SetToolTip(const winrt::hstring& tabTitle);
void _CreateContextMenu() override;