mirror of
https://github.com/microsoft/terminal.git
synced 2025-12-11 04:38:24 -06:00
We originally needed this library (or a separate DLL in our own project) to handle hooking up the XAML resource loader to the providers that our application needed. It was introduced in its nascent form in 2019, in a PR titled "Make XAML files work." It appears we no longer need it, and the provider hookup is being handled by our `AppT2` base class override. I've tested this in Windows 10 Vb running unpackaged, and it seems to work totally fine. Crazy. Removing this dependency saves us a couple hundred kilobytes on disk and removes one consumer of the App CRT from our package.
97 lines
2.7 KiB
C++
97 lines
2.7 KiB
C++
// Copyright (c) Microsoft Corporation.
|
|
// Licensed under the MIT license.
|
|
|
|
#include "pch.h"
|
|
#include "App.h"
|
|
#include "App.g.cpp"
|
|
|
|
using namespace winrt;
|
|
using namespace winrt::Windows::ApplicationModel::Activation;
|
|
using namespace winrt::Windows::Foundation;
|
|
using namespace winrt::Windows::UI::Xaml;
|
|
using namespace winrt::Windows::UI::Xaml::Controls;
|
|
using namespace winrt::Windows::UI::Xaml::Navigation;
|
|
|
|
namespace xaml = ::winrt::Windows::UI::Xaml;
|
|
|
|
namespace winrt::SampleApp::implementation
|
|
{
|
|
App::App()
|
|
{
|
|
Initialize();
|
|
|
|
// Disable XAML's automatic backplating of text when in High Contrast
|
|
// mode: we want full control of and responsibility for the foreground
|
|
// and background colors that we draw in XAML.
|
|
HighContrastAdjustment(::winrt::Windows::UI::Xaml::ApplicationHighContrastAdjustment::None);
|
|
}
|
|
|
|
void App::Initialize()
|
|
{
|
|
const auto dispatcherQueue = winrt::Windows::System::DispatcherQueue::GetForCurrentThread();
|
|
if (!dispatcherQueue)
|
|
{
|
|
_windowsXamlManager = xaml::Hosting::WindowsXamlManager::InitializeForCurrentThread();
|
|
}
|
|
else
|
|
{
|
|
_isUwp = true;
|
|
}
|
|
}
|
|
|
|
void App::Close()
|
|
{
|
|
if (_bIsClosed)
|
|
{
|
|
return;
|
|
}
|
|
|
|
_bIsClosed = true;
|
|
|
|
if (_windowsXamlManager)
|
|
{
|
|
_windowsXamlManager.Close();
|
|
}
|
|
_windowsXamlManager = nullptr;
|
|
|
|
Exit();
|
|
{
|
|
MSG msg = {};
|
|
while (PeekMessageW(&msg, nullptr, 0, 0, PM_REMOVE))
|
|
{
|
|
::DispatchMessageW(&msg);
|
|
}
|
|
}
|
|
}
|
|
|
|
SampleAppLogic App::Logic()
|
|
{
|
|
static SampleAppLogic logic;
|
|
return logic;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Invoked when the application is launched normally by the end user. Other entry points
|
|
/// will be used such as when the application is launched to open a specific file.
|
|
/// </summary>
|
|
/// <param name="e">Details about the launch request and process.</param>
|
|
void App::OnLaunched(LaunchActivatedEventArgs const& /*e*/)
|
|
{
|
|
// if this is a UWP... it means its our problem to hook up the content to the window here.
|
|
if (_isUwp)
|
|
{
|
|
auto content = Window::Current().Content();
|
|
if (content == nullptr)
|
|
{
|
|
auto logic = Logic();
|
|
logic.Create();
|
|
|
|
auto page = logic.GetRoot().as<MyPage>();
|
|
|
|
Window::Current().Content(page);
|
|
Window::Current().Activate();
|
|
}
|
|
}
|
|
}
|
|
}
|