Make a shared method for applying some function to all active controls in a (parent) pane.
This commit is contained in:
parent
1db7b7591a
commit
6a8c70c3af
|
@ -377,19 +377,10 @@ namespace winrt::TerminalApp::implementation
|
|||
{
|
||||
if (const auto& realArgs = args.ActionArgs().try_as<AdjustFontSizeArgs>())
|
||||
{
|
||||
if (const auto tab{ _GetFocusedTabImpl() })
|
||||
{
|
||||
if (const auto activePane = tab->GetActivePane())
|
||||
{
|
||||
activePane->WalkTree([&](auto p) {
|
||||
if (const auto& control{ p->GetTerminalControl() })
|
||||
{
|
||||
control.AdjustFontSize(realArgs.Delta());
|
||||
}
|
||||
});
|
||||
args.Handled(true);
|
||||
}
|
||||
}
|
||||
const auto res = _ApplyToActiveControls([&](auto& control) {
|
||||
control.AdjustFontSize(realArgs.Delta());
|
||||
});
|
||||
args.Handled(res);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -403,37 +394,19 @@ namespace winrt::TerminalApp::implementation
|
|||
void TerminalPage::_HandleResetFontSize(const IInspectable& /*sender*/,
|
||||
const ActionEventArgs& args)
|
||||
{
|
||||
if (const auto tab{ _GetFocusedTabImpl() })
|
||||
{
|
||||
if (const auto activePane = tab->GetActivePane())
|
||||
{
|
||||
activePane->WalkTree([](auto p) {
|
||||
if (const auto& control{ p->GetTerminalControl() })
|
||||
{
|
||||
control.ResetFontSize();
|
||||
}
|
||||
});
|
||||
args.Handled(true);
|
||||
}
|
||||
}
|
||||
const auto res = _ApplyToActiveControls([](auto& control) {
|
||||
control.ResetFontSize();
|
||||
});
|
||||
args.Handled(res);
|
||||
}
|
||||
|
||||
void TerminalPage::_HandleToggleShaderEffects(const IInspectable& /*sender*/,
|
||||
const ActionEventArgs& args)
|
||||
{
|
||||
if (const auto tab{ _GetFocusedTabImpl() })
|
||||
{
|
||||
if (const auto activePane = tab->GetActivePane())
|
||||
{
|
||||
activePane->WalkTree([](auto p) {
|
||||
if (const auto& control{ p->GetTerminalControl() })
|
||||
{
|
||||
control.ToggleShaderEffects();
|
||||
}
|
||||
});
|
||||
args.Handled(true);
|
||||
}
|
||||
}
|
||||
const auto res = _ApplyToActiveControls([](auto& control) {
|
||||
control.ToggleShaderEffects();
|
||||
});
|
||||
args.Handled(res);
|
||||
}
|
||||
|
||||
void TerminalPage::_HandleToggleFocusMode(const IInspectable& /*sender*/,
|
||||
|
@ -476,42 +449,33 @@ namespace winrt::TerminalApp::implementation
|
|||
args.Handled(false);
|
||||
if (const auto& realArgs = args.ActionArgs().try_as<SetColorSchemeArgs>())
|
||||
{
|
||||
if (const auto activeTab{ _GetFocusedTabImpl() })
|
||||
if (const auto scheme = _settings.GlobalSettings().ColorSchemes().TryLookup(realArgs.SchemeName()))
|
||||
{
|
||||
if (auto activePane = activeTab->GetActivePane())
|
||||
{
|
||||
if (const auto scheme = _settings.GlobalSettings().ColorSchemes().TryLookup(realArgs.SchemeName()))
|
||||
const auto res = _ApplyToActiveControls([&](auto& control) {
|
||||
// Start by getting the current settings of the control
|
||||
auto controlSettings = control.Settings().as<TerminalSettings>();
|
||||
auto parentSettings = controlSettings;
|
||||
// Those are the _runtime_ settings however. What we
|
||||
// need to do is:
|
||||
//
|
||||
// 1. Blow away any colors set in the runtime settings.
|
||||
// 2. Apply the color scheme to the parent settings.
|
||||
//
|
||||
// 1 is important to make sure that the effects of
|
||||
// something like `colortool` are cleared when setting
|
||||
// the scheme.
|
||||
if (controlSettings.GetParent() != nullptr)
|
||||
{
|
||||
activePane->WalkTree([&](auto p) {
|
||||
if (const auto control = p->GetTerminalControl())
|
||||
{
|
||||
// Start by getting the current settings of the control
|
||||
auto controlSettings = control.Settings().as<TerminalSettings>();
|
||||
auto parentSettings = controlSettings;
|
||||
// Those are the _runtime_ settings however. What we
|
||||
// need to do is:
|
||||
//
|
||||
// 1. Blow away any colors set in the runtime settings.
|
||||
// 2. Apply the color scheme to the parent settings.
|
||||
//
|
||||
// 1 is important to make sure that the effects of
|
||||
// something like `colortool` are cleared when setting
|
||||
// the scheme.
|
||||
if (controlSettings.GetParent() != nullptr)
|
||||
{
|
||||
parentSettings = controlSettings.GetParent();
|
||||
}
|
||||
|
||||
// ApplyColorScheme(nullptr) will clear the old color scheme.
|
||||
controlSettings.ApplyColorScheme(nullptr);
|
||||
parentSettings.ApplyColorScheme(scheme);
|
||||
|
||||
control.UpdateSettings();
|
||||
}
|
||||
});
|
||||
args.Handled(true);
|
||||
parentSettings = controlSettings.GetParent();
|
||||
}
|
||||
}
|
||||
|
||||
// ApplyColorScheme(nullptr) will clear the old color scheme.
|
||||
controlSettings.ApplyColorScheme(nullptr);
|
||||
parentSettings.ApplyColorScheme(scheme);
|
||||
|
||||
control.UpdateSettings();
|
||||
});
|
||||
args.Handled(res);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -925,19 +889,10 @@ namespace winrt::TerminalApp::implementation
|
|||
{
|
||||
if (const auto& realArgs = args.ActionArgs().try_as<ClearBufferArgs>())
|
||||
{
|
||||
if (const auto tab{ _GetFocusedTabImpl() })
|
||||
{
|
||||
if (const auto activePane = tab->GetActivePane())
|
||||
{
|
||||
activePane->WalkTree([&](auto p) {
|
||||
if (const auto& control{ p->GetTerminalControl() })
|
||||
{
|
||||
control.ClearBuffer(realArgs.Clear());
|
||||
}
|
||||
});
|
||||
args.Handled(true);
|
||||
}
|
||||
}
|
||||
const auto res = _ApplyToActiveControls([&](auto& control) {
|
||||
control.ClearBuffer(realArgs.Clear());
|
||||
});
|
||||
args.Handled(res);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -462,8 +462,8 @@ std::shared_ptr<Pane> Pane::NavigateDirection(const std::shared_ptr<Pane> source
|
|||
{
|
||||
if (const auto parent = _FindParentOfPane(sourcePane))
|
||||
{
|
||||
// Capture a weak reference to the source pane if it is a leaf so that
|
||||
// we can keep the same terminal focused and take the same path back down
|
||||
// Capture a weak reference to the original leaf pane so that
|
||||
// we can keep the same TermControl focused and take the same path back down
|
||||
// if a child movement is requested.
|
||||
parent->_previouslyFocusedTerminal = sourcePane->_IsLeaf() ? sourcePane->weak_from_this() : sourcePane->_previouslyFocusedTerminal;
|
||||
|
||||
|
|
|
@ -256,6 +256,26 @@ namespace winrt::TerminalApp::implementation
|
|||
bool _SwapPane(const Microsoft::Terminal::Settings::Model::FocusDirection& direction);
|
||||
bool _MovePane(const uint32_t tabIdx);
|
||||
|
||||
template<typename F>
|
||||
bool _ApplyToActiveControls(F f)
|
||||
{
|
||||
if (const auto tab{ _GetFocusedTabImpl() })
|
||||
{
|
||||
if (const auto activePane = tab->GetActivePane())
|
||||
{
|
||||
activePane->WalkTree([&](auto p) {
|
||||
if (const auto& control{ p->GetTerminalControl() })
|
||||
{
|
||||
f(control);
|
||||
}
|
||||
});
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
winrt::Microsoft::Terminal::Control::TermControl _GetActiveControl();
|
||||
std::optional<uint32_t> _GetFocusedTabIndex() const noexcept;
|
||||
TerminalApp::TabBase _GetFocusedTab() const noexcept;
|
||||
|
|
Loading…
Reference in a new issue