Skip to content

Commit

Permalink
simplify; adapt; overcome
Browse files Browse the repository at this point in the history
  • Loading branch information
carlos-zamora committed Oct 31, 2024
1 parent c9c997e commit 04691f4
Show file tree
Hide file tree
Showing 28 changed files with 39 additions and 87 deletions.
5 changes: 0 additions & 5 deletions src/cascadia/TerminalApp/AppLogic.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -663,11 +663,6 @@ namespace winrt::TerminalApp::implementation
globals.MinimizeToNotificationArea();
}

void AppLogic::SetHighContrast(bool highContrast)
{
_settings.HighContrastMode(highContrast);
}

bool AppLogic::AllowHeadless()
{
if (!_loadedInitialSettings)
Expand Down
1 change: 0 additions & 1 deletion src/cascadia/TerminalApp/AppLogic.h
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,6 @@ namespace winrt::TerminalApp::implementation
bool IsolatedMode();
bool AllowHeadless();
bool RequestsTrayIcon();
void SetHighContrast(bool highContrast);

TerminalApp::TerminalWindow CreateNewWindow();

Expand Down
1 change: 0 additions & 1 deletion src/cascadia/TerminalApp/AppLogic.idl
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,6 @@ namespace TerminalApp
Boolean IsolatedMode { get; };
Boolean AllowHeadless { get; };
Boolean RequestsTrayIcon { get; };
void SetHighContrast(Boolean highContrast);

FindTargetWindowResult FindTargetWindow(String[] args);

Expand Down
8 changes: 3 additions & 5 deletions src/cascadia/TerminalApp/TerminalPaneContent.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -339,13 +339,11 @@ namespace winrt::TerminalApp::implementation
RestartTerminalRequested.raise(*this, nullptr);
}

void TerminalPaneContent::UpdateSettings(const CascadiaSettings& settings)
void TerminalPaneContent::UpdateSettings(const CascadiaSettings& /*settings*/)
{
if (const auto& cachedSettings{ _cache.TryLookup(_profile) })
if (const auto& settings{ _cache.TryLookup(_profile) })
{
auto cachedDefaultSettings = cachedSettings.DefaultSettings();
cachedDefaultSettings.HighContrastMode(settings.HighContrastMode());
_control.UpdateControlSettings(cachedDefaultSettings, cachedSettings.UnfocusedSettings());
_control.UpdateControlSettings(settings.DefaultSettings(), settings.UnfocusedSettings());
}
}

Expand Down
6 changes: 5 additions & 1 deletion src/cascadia/TerminalControl/ControlCore.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -864,7 +864,6 @@ namespace winrt::Microsoft::Terminal::Control::implementation
_cellHeight = CSSLengthPercentage::FromString(_settings->CellHeight().c_str());
_runtimeOpacity = std::nullopt;
_runtimeFocusedOpacity = std::nullopt;
_terminal->SetHighContrastInfo(settings.HighContrastMode());

// Manually turn off acrylic if they turn off transparency.
_runtimeUseAcrylic = _settings->Opacity() < 1.0 && _settings->UseAcrylic();
Expand Down Expand Up @@ -942,6 +941,11 @@ namespace winrt::Microsoft::Terminal::Control::implementation
}
}

void ControlCore::SetHighContrastInfo(const bool enabled)
{
_terminal->SetHighContrastInfo(enabled);
}

Control::IControlSettings ControlCore::Settings()
{
return *_settings;
Expand Down
1 change: 1 addition & 0 deletions src/cascadia/TerminalControl/ControlCore.h
Original file line number Diff line number Diff line change
Expand Up @@ -94,6 +94,7 @@ namespace winrt::Microsoft::Terminal::Control::implementation

void UpdateSettings(const Control::IControlSettings& settings, const IControlAppearance& newAppearance);
void ApplyAppearance(const bool focused);
void SetHighContrastInfo(const bool enabled);
Control::IControlSettings Settings();
Control::IControlAppearance FocusedAppearance() const;
Control::IControlAppearance UnfocusedAppearance() const;
Expand Down
1 change: 1 addition & 0 deletions src/cascadia/TerminalControl/ControlCore.idl
Original file line number Diff line number Diff line change
Expand Up @@ -102,6 +102,7 @@ namespace Microsoft.Terminal.Control
IControlAppearance FocusedAppearance { get; };
IControlAppearance UnfocusedAppearance { get; };
Boolean HasUnfocusedAppearance();
void SetHighContrastInfo(Boolean enabled);

UInt64 SwapChainHandle { get; };

Expand Down
2 changes: 0 additions & 2 deletions src/cascadia/TerminalControl/ControlSettings.h
Original file line number Diff line number Diff line change
Expand Up @@ -26,8 +26,6 @@ namespace winrt::Microsoft::Terminal::Control::implementation
CONTROL_SETTINGS(SETTINGS_GEN)
#undef SETTINGS_GEN

WINRT_PROPERTY(bool, HighContrastMode, false);

private:
winrt::com_ptr<ControlAppearance> _unfocusedAppearance{ nullptr };
winrt::com_ptr<ControlAppearance> _focusedAppearance{ nullptr };
Expand Down
2 changes: 0 additions & 2 deletions src/cascadia/TerminalControl/IControlSettings.idl
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,5 @@ namespace Microsoft.Terminal.Control
Boolean RepositionCursorWithMouse { get; };

// NOTE! When adding something here, make sure to update ControlProperties.h too!
// Non-serialized settings
Boolean HighContrastMode;
};
}
8 changes: 8 additions & 0 deletions src/cascadia/TerminalControl/TermControl.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,8 @@ static Microsoft::Console::TSF::Handle& GetTSFHandle()

namespace winrt::Microsoft::Terminal::Control::implementation
{
Windows::UI::ViewManagement::AccessibilitySettings TermControl::_accessibilitySettings{};

TsfDataProvider::TsfDataProvider(TermControl* termControl) noexcept :
_termControl{ termControl }
{
Expand Down Expand Up @@ -187,6 +189,12 @@ namespace winrt::Microsoft::Terminal::Control::implementation

_core = _interactivity.Core();

// If high contrast mode was changed, update the appearance appropriately.
_accessibilitySettings.HighContrastChanged([this](const Windows::UI::ViewManagement::AccessibilitySettings& a11ySettings, auto&&) {
_core.SetHighContrastInfo(a11ySettings.HighContrast());
_core.ApplyAppearance(_focused);
});

// This event is specifically triggered by the renderer thread, a BG thread. Use a weak ref here.
_revokers.RendererEnteredErrorState = _core.RendererEnteredErrorState(winrt::auto_revoke, { get_weak(), &TermControl::_RendererEnteredErrorState });

Expand Down
2 changes: 2 additions & 0 deletions src/cascadia/TerminalControl/TermControl.h
Original file line number Diff line number Diff line change
Expand Up @@ -237,6 +237,8 @@ namespace winrt::Microsoft::Terminal::Control::implementation
friend struct TermControlT<TermControl>; // friend our parent so it can bind private event handlers
friend struct TsfDataProvider;

static Windows::UI::ViewManagement::AccessibilitySettings _accessibilitySettings;

// NOTE: _uiaEngine must be ordered before _core.
//
// ControlCore::AttachUiaEngine receives a IRenderEngine as a raw pointer, which we own.
Expand Down
3 changes: 1 addition & 2 deletions src/cascadia/TerminalCore/ICoreAppearance.idl
Original file line number Diff line number Diff line change
Expand Up @@ -24,8 +24,7 @@ namespace Microsoft.Terminal.Core
Never,
Indexed,
Always,
AutomaticIndexed,
AutomaticAlways
Automatic
};

// TerminalCore declares its own Color struct to avoid depending
Expand Down
4 changes: 1 addition & 3 deletions src/cascadia/TerminalCore/Terminal.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -147,10 +147,8 @@ void Terminal::UpdateAppearance(const ICoreAppearance& appearance)
const auto initialAIC = appearance.AdjustIndistinguishableColors();
switch (initialAIC)
{
case AdjustTextMode::AutomaticIndexed:
case AdjustTextMode::Automatic:
return _highContrastMode ? AdjustTextMode::Indexed : AdjustTextMode::Never;
case AdjustTextMode::AutomaticAlways:
return _highContrastMode ? AdjustTextMode::Always : AdjustTextMode::Never;
default:
return initialAIC;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -942,13 +942,9 @@
<value>Always</value>
<comment>An option to choose from for the "adjust indistinguishable colors" setting. When selected, we will adjust the text colors for visibility.</comment>
</data>
<data name="Profile_AdjustIndistinguishableColorsAutomaticIndexed.Content" xml:space="preserve">
<value>When High Contrast is enabled, only for colors in the color scheme</value>
<data name="Profile_AdjustIndistinguishableColorsAutomatic.Content" xml:space="preserve">
<value>Automatic</value>
<comment>An option to choose from for the "adjust indistinguishable colors" setting. When selected, we will adjust the text colors for visibility only when the colors are part of this profile's color scheme's color table if and only if high contrast mode is enabled.</comment>
</data>
<data name="Profile_AdjustIndistinguishableColorsAutomaticAlways.Content" xml:space="preserve">
<value>When High Contrast Mode is enabled, all colors</value>
<comment>An option to choose from for the "adjust indistinguishable colors" setting. When selected, we will adjust the text colors for visibility if and only if high contrast mode is enabled.</comment>
</data>
<data name="Profile_CursorShapeBar.Content" xml:space="preserve">
<value>Bar ( ┃ )</value>
Expand Down Expand Up @@ -1969,4 +1965,4 @@
<value>Display a shield in the title bar when Windows Terminal is running as Administrator</value>
<comment>Header for a control to toggle displaying a shield in the title bar of the app. "Admin" refers to elevated sessions like "run as Admin"</comment>
</data>
</root>
</root>
12 changes: 0 additions & 12 deletions src/cascadia/TerminalSettingsModel/CascadiaSettings.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -23,8 +23,6 @@ using namespace winrt::Microsoft::Terminal::Control;
using namespace winrt::Windows::Foundation::Collections;
using namespace Microsoft::Console;

bool CascadiaSettings::_highContrastMode{ false };

// Creating a child of a profile requires us to copy certain
// required attributes. This method handles those attributes.
//
Expand Down Expand Up @@ -55,16 +53,6 @@ std::string_view Model::implementation::LoadStringResource(int resourceID)
return { reinterpret_cast<const char*>(ptr), sz };
}

bool CascadiaSettings::HighContrastMode()
{
return _highContrastMode;
}

void CascadiaSettings::HighContrastMode(bool value)
{
_highContrastMode = value;
}

winrt::hstring CascadiaSettings::Hash() const noexcept
{
return _hash;
Expand Down
3 changes: 0 additions & 3 deletions src/cascadia/TerminalSettingsModel/CascadiaSettings.h
Original file line number Diff line number Diff line change
Expand Up @@ -114,8 +114,6 @@ namespace winrt::Microsoft::Terminal::Settings::Model::implementation
static winrt::hstring ApplicationDisplayName();
static winrt::hstring ApplicationVersion();
static bool IsPortableMode();
static bool HighContrastMode();
static void HighContrastMode(bool value);

CascadiaSettings() noexcept = default;
CascadiaSettings(const winrt::hstring& userJSON, const winrt::hstring& inboxJSON);
Expand Down Expand Up @@ -160,7 +158,6 @@ namespace winrt::Microsoft::Terminal::Settings::Model::implementation
static const std::filesystem::path& _settingsPath();
static const std::filesystem::path& _releaseSettingsPath();
static winrt::hstring _calculateHash(std::string_view settings, const FILETIME& lastWriteTime);
static bool _highContrastMode;

winrt::com_ptr<implementation::Profile> _createNewProfile(const std::wstring_view& name) const;
Model::Profile _getProfileForCommandLine(const winrt::hstring& commandLine) const;
Expand Down
1 change: 0 additions & 1 deletion src/cascadia/TerminalSettingsModel/CascadiaSettings.idl
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,6 @@ namespace Microsoft.Terminal.Settings.Model
static String SettingsPath { get; };
static String DefaultSettingsPath { get; };
static Boolean IsPortableMode { get; };
static Boolean HighContrastMode;

static String ApplicationDisplayName { get; };
static String ApplicationVersion { get; };
Expand Down
2 changes: 0 additions & 2 deletions src/cascadia/TerminalSettingsModel/TerminalSettings.h
Original file line number Diff line number Diff line change
Expand Up @@ -178,8 +178,6 @@ namespace winrt::Microsoft::Terminal::Settings::Model::implementation

INHERITABLE_SETTING(Model::TerminalSettings, bool, ReloadEnvironmentVariables, true);

WINRT_PROPERTY(bool, HighContrastMode, false);

private:
std::optional<std::array<Microsoft::Terminal::Core::Color, COLOR_TABLE_SIZE>> _ColorTable;
std::span<Microsoft::Terminal::Core::Color> _getColorTableImpl();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,12 +35,11 @@ JSON_ENUM_MAPPER(::winrt::Microsoft::Terminal::Core::CursorStyle)
// - Helper for converting a user-specified adjustTextMode value to its corresponding enum
JSON_ENUM_MAPPER(::winrt::Microsoft::Terminal::Core::AdjustTextMode)
{
JSON_MAPPINGS(5) = {
JSON_MAPPINGS(4) = {
pair_type{ "never", ValueType::Never },
pair_type{ "indexed", ValueType::Indexed },
pair_type{ "always", ValueType::Always },
pair_type{ "automaticIndexed", ValueType::AutomaticIndexed },
pair_type{ "automaticAlways", ValueType::AutomaticAlways },
pair_type{ "automatic", ValueType::Automatic },
};

// Override mapping parser to add boolean parsing
Expand Down
4 changes: 2 additions & 2 deletions src/cascadia/WindowsTerminal/AppHost.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1574,7 +1574,7 @@ void AppHost::_handleSendContent(const winrt::Windows::Foundation::IInspectable&
// Bubble the update settings request up to the emperor. We're being called on
// the Window thread, but the Emperor needs to update the settings on the _main_
// thread.
void AppHost::_requestUpdateSettings(bool highContrastEnabled)
void AppHost::_requestUpdateSettings()
{
UpdateSettingsRequested.raise(highContrastEnabled);
UpdateSettingsRequested.raise();
}
4 changes: 2 additions & 2 deletions src/cascadia/WindowsTerminal/AppHost.h
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ class AppHost : public std::enable_shared_from_this<AppHost>

static void s_DisplayMessageBox(const winrt::TerminalApp::ParseCommandlineResult& message);

til::event<winrt::delegate<void(bool)>> UpdateSettingsRequested;
til::event<winrt::delegate<void()>> UpdateSettingsRequested;

private:
std::unique_ptr<IslandWindow> _window;
Expand Down Expand Up @@ -151,7 +151,7 @@ class AppHost : public std::enable_shared_from_this<AppHost>
void _handleAttach(const winrt::Windows::Foundation::IInspectable& sender,
winrt::Microsoft::Terminal::Remoting::AttachRequest args);

void _requestUpdateSettings(bool highContrastEnabled);
void _requestUpdateSettings();

// Page -> us -> monarch
void _handleReceiveContent(const winrt::Windows::Foundation::IInspectable& sender,
Expand Down
25 changes: 1 addition & 24 deletions src/cascadia/WindowsTerminal/IslandWindow.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -758,8 +758,6 @@ long IslandWindow::_calculateTotalSize(const bool isWidth, const long clientSize
// themes, color schemes that might depend on the OS theme
if (param == L"ImmersiveColorSet")
{
bool updateSettings = false;

// GH#15732: Don't update the settings, unless the theme
// _actually_ changed. ImmersiveColorSet gets sent more often
// than just on a theme change. It notably gets sent when the PC
Expand All @@ -768,28 +766,7 @@ long IslandWindow::_calculateTotalSize(const bool isWidth, const long clientSize
if (isCurrentlyDark != _currentSystemThemeIsDark)
{
_currentSystemThemeIsDark = isCurrentlyDark;
updateSettings = true;
}

bool isCurrentlyHighContrast = []() {
HIGHCONTRAST hc = { 0 };
hc.cbSize = sizeof(HIGHCONTRAST);
if (SystemParametersInfo(SPI_GETHIGHCONTRAST, sizeof(hc), &hc, 0))
{
return (bool)(hc.dwFlags & HCF_HIGHCONTRASTON);
}
return false;
}();

if (isCurrentlyHighContrast != _currentHighContrastModeState)
{
_currentHighContrastModeState = isCurrentlyHighContrast;
updateSettings = true;
}

if (updateSettings)
{
UpdateSettingsRequested.raise(_currentHighContrastModeState);
UpdateSettingsRequested.raise();
}
}
}
Expand Down
3 changes: 1 addition & 2 deletions src/cascadia/WindowsTerminal/IslandWindow.h
Original file line number Diff line number Diff line change
Expand Up @@ -87,7 +87,7 @@ class IslandWindow :

til::event<winrt::delegate<void()>> WindowMoved;
til::event<winrt::delegate<void(bool)>> WindowVisibilityChanged;
til::event<winrt::delegate<void(bool)>> UpdateSettingsRequested;
til::event<winrt::delegate<void()>> UpdateSettingsRequested;

protected:
void ForceResize()
Expand Down Expand Up @@ -118,7 +118,6 @@ class IslandWindow :
RECT _rcWorkBeforeFullscreen{};
UINT _dpiBeforeFullscreen{ 96 };
bool _currentSystemThemeIsDark{ true };
bool _currentHighContrastModeState{ false };

void _coldInitialize();
void _warmInitialize();
Expand Down
3 changes: 1 addition & 2 deletions src/cascadia/WindowsTerminal/WindowEmperor.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -850,10 +850,9 @@ safe_void_coroutine WindowEmperor::_windowIsQuakeWindowChanged(winrt::Windows::F
co_await wil::resume_foreground(this->_dispatcher);
_checkWindowsForNotificationIcon();
}
safe_void_coroutine WindowEmperor::_windowRequestUpdateSettings(bool highContrastEnabled)
safe_void_coroutine WindowEmperor::_windowRequestUpdateSettings()
{
// We MUST be on the main thread to update the settings. We will crash when trying to enumerate fragment extensions otherwise.
co_await wil::resume_foreground(this->_dispatcher);
_app.Logic().SetHighContrast(highContrastEnabled);
_app.Logic().ReloadSettings();
}
2 changes: 1 addition & 1 deletion src/cascadia/WindowsTerminal/WindowEmperor.h
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,7 @@ class WindowEmperor : public std::enable_shared_from_this<WindowEmperor>
void _numberOfWindowsChanged(const winrt::Windows::Foundation::IInspectable&, const winrt::Windows::Foundation::IInspectable&);

safe_void_coroutine _windowIsQuakeWindowChanged(winrt::Windows::Foundation::IInspectable sender, winrt::Windows::Foundation::IInspectable args);
safe_void_coroutine _windowRequestUpdateSettings(bool highContrastEnabled);
safe_void_coroutine _windowRequestUpdateSettings();

void _createMessageWindow();

Expand Down
4 changes: 2 additions & 2 deletions src/cascadia/WindowsTerminal/WindowThread.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ void WindowThread::CreateHost()
_manager,
_peasant);

_UpdateSettingsRequestedToken = _host->UpdateSettingsRequested([this](bool highContrastEnabled) { UpdateSettingsRequested.raise(highContrastEnabled); });
_UpdateSettingsRequestedToken = _host->UpdateSettingsRequested([this]() { UpdateSettingsRequested.raise(); });

winrt::init_apartment(winrt::apartment_type::single_threaded);

Expand Down Expand Up @@ -113,7 +113,7 @@ bool WindowThread::KeepWarm()
// state transitions. In this case, the window is actually being woken up.
if (msg.message == AppHost::WM_REFRIGERATE)
{
_UpdateSettingsRequestedToken = _host->UpdateSettingsRequested([this](bool highContrastEnabled) { UpdateSettingsRequested.raise(highContrastEnabled); });
_UpdateSettingsRequestedToken = _host->UpdateSettingsRequested([this]() { UpdateSettingsRequested.raise(); });
// Re-initialize the host here, on the window thread
_host->Initialize();
return true;
Expand Down
2 changes: 1 addition & 1 deletion src/cascadia/WindowsTerminal/WindowThread.h
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ class WindowThread : public std::enable_shared_from_this<WindowThread>

uint64_t PeasantID();

til::event<winrt::delegate<void(bool)>> UpdateSettingsRequested;
til::event<winrt::delegate<void()>> UpdateSettingsRequested;

private:
winrt::Microsoft::Terminal::Remoting::Peasant _peasant{ nullptr };
Expand Down
2 changes: 1 addition & 1 deletion src/cascadia/inc/ControlProperties.h
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
X(til::color, SelectionBackground, DEFAULT_FOREGROUND) \
X(bool, IntenseIsBold) \
X(bool, IntenseIsBright, true) \
X(winrt::Microsoft::Terminal::Core::AdjustTextMode, AdjustIndistinguishableColors, winrt::Microsoft::Terminal::Core::AdjustTextMode::AutomaticIndexed)
X(winrt::Microsoft::Terminal::Core::AdjustTextMode, AdjustIndistinguishableColors, winrt::Microsoft::Terminal::Core::AdjustTextMode::Automatic)

// --------------------------- Control Appearance ---------------------------
// All of these settings are defined in IControlAppearance.
Expand Down

0 comments on commit 04691f4

Please sign in to comment.