d08271e734
Adds support for two new actions: * `globalSummon`, which can be used to activate a window using a _global_ (READ: OS-level) hotkey. - accepts an optional `name` argument. When provided, this will attempt to summon with the given name. When omitted, we'll try to summon the most recent window. * `quakeMode` which is `globalSummon` for the `_quake` window. These actions are stored in the actions array, but are read by the `WindowsTerminal` level and bound to the OS in `IslandWindow`. The monarch registers for these keybindings with the OS. When one is pressed, the monarch will recieve a `WM_HOTKEY` message. It'll use that to look up the corresponding action args. It'll use those to try and summon the right window. ## References * #8888: Quake mode megathread * #9274: Spec (**guys seriously i just need one more ✔️**) * #9785: The start of granting "\_quake" super powers ## PR Checklist * [x] Closes #653 - I'm gonna say this closes it for now, though we have _many_ follow-ups in #8888 * [x] I work here * [x] Tests added/passed ## Validation Steps Performed * Validated that it works with `win` keys * Validated that it works without `win` keys * Validated that it hot-reloads * Validated that it moves to the new monarch * Validated that you can bind both `globalSummon` and `quakeMode` at the same time and do different things * Validated that you can bind `globalSummon` with a name and it creates that name if it doesn't already exist
88 lines
2.5 KiB
C
88 lines
2.5 KiB
C
/*++
|
|
Copyright (c) Microsoft Corporation
|
|
Licensed under the MIT license.
|
|
|
|
Module Name:
|
|
- pch.h
|
|
|
|
Abstract:
|
|
- Contains external headers to include in the precompile phase of console build process.
|
|
- Avoid including internal project headers. Instead include them only in the classes that need them (helps with test project building).
|
|
--*/
|
|
|
|
#pragma once
|
|
|
|
// Ignore checked iterators warning from VC compiler.
|
|
#define _SCL_SECURE_NO_WARNINGS
|
|
|
|
// Block minwindef.h min/max macros to prevent <algorithm> conflict
|
|
#define NOMINMAX
|
|
|
|
#define WIN32_LEAN_AND_MEAN
|
|
#define NOMCX
|
|
#define NOHELP
|
|
#define NOCOMM
|
|
|
|
#include <unknwn.h>
|
|
|
|
#define NT_SUCCESS(Status) (((NTSTATUS)(Status)) >= 0)
|
|
|
|
#include <windows.h>
|
|
#include <UIAutomation.h>
|
|
#include <cstdlib>
|
|
#include <cstring>
|
|
#include <shellscalingapi.h>
|
|
#include <windowsx.h>
|
|
#include <ShObjIdl.h>
|
|
|
|
// Manually include til after we include Windows.Foundation to give it winrt superpowers
|
|
#define BLOCK_TIL
|
|
#include "../inc/LibraryIncludes.h"
|
|
|
|
// This is inexplicable, but for whatever reason, cppwinrt conflicts with the
|
|
// SDK definition of this function, so the only fix is to undef it.
|
|
// from WinBase.h
|
|
// Windows::UI::Xaml::Media::Animation::IStoryboard::GetCurrentTime
|
|
#ifdef GetCurrentTime
|
|
#undef GetCurrentTime
|
|
#endif
|
|
|
|
#include <wil/cppwinrt.h>
|
|
|
|
// Needed just for XamlIslands to work at all:
|
|
#include <winrt/Windows.system.h>
|
|
#include <winrt/Windows.Foundation.Collections.h>
|
|
#include <winrt/Windows.UI.Xaml.Hosting.h>
|
|
#include <windows.ui.xaml.hosting.desktopwindowxamlsource.h>
|
|
|
|
// Additional headers for various xaml features. We need:
|
|
// * Core so we can resume_foreground with CoreDispatcher
|
|
// * Controls for grid
|
|
// * Media for ScaleTransform
|
|
// * ApplicationModel for finding the path to wt.exe
|
|
#include <winrt/Windows.UI.Core.h>
|
|
#include <winrt/Windows.UI.Xaml.Controls.h>
|
|
#include <winrt/Windows.ui.xaml.media.h>
|
|
#include <winrt/Windows.ApplicationModel.h>
|
|
|
|
#include <winrt/TerminalApp.h>
|
|
#include <winrt/Microsoft.Terminal.Settings.Model.h>
|
|
#include <winrt/Microsoft.Terminal.Remoting.h>
|
|
#include <winrt/Microsoft.Terminal.Control.h>
|
|
|
|
#include <wil/resource.h>
|
|
#include <wil/win32_helpers.h>
|
|
|
|
// Including TraceLogging essentials for the binary
|
|
#include <TraceLoggingProvider.h>
|
|
#include <winmeta.h>
|
|
TRACELOGGING_DECLARE_PROVIDER(g_hWindowsTerminalProvider);
|
|
#include <telemetry/ProjectTelemetry.h>
|
|
#include <TraceLoggingActivity.h>
|
|
|
|
// For commandline argument processing
|
|
#include <shellapi.h>
|
|
#include <processenv.h>
|
|
#include <WinUser.h>
|
|
#include "til.h"
|