Adds a `Microsoft.Terminal.Remoting.dll` to our solution. This DLL will be responsible for all the Monarch/Peasant work that's been described in #7240 & #8135. This PR does _not_ implement the Monarch/Peasant architecture in any significant way. The goal of this PR is to just to establish the project layout, and the most basic connections. This should make reviewing the actual meat of the implementation (in a later PR) easier. It will also give us the opportunity to include some of the basic weird things we're doing (with `CoRegisterClass`) in the Terminal _now_, and get them selfhosted, before building on them too much. This PR does have windows registering the `Monarch` class with COM. When windows are created, they'll as the Monarch if they should create a new window or not. In this PR, the Monarch will always reply "yes, please make a new window". Similar to other projects in our solution, we're adding 3 projects here: * `Microsoft.Terminal.Remoting.lib`: the actual implementation, as a static lib. * `Microsoft.Terminal.Remoting.dll`: The implementation linked as a DLL, for use in `WindowsTerminal.exe`. * `Remoting.UnitTests.dll`: A unit test dll that links with the static lib. There are plenty of TODOs scattered about the code. Clearly, most of this isn't implemented yet, but I do have more WIP branches. I'm using [`projects/5`](https://github.com/microsoft/terminal/projects/5) as my notation for TODOs that are too small for an issue, but are part of the whole Process Model 2.0 work. ## References * #5000 - this is the process model megathread * #7240 - The process model 2.0 spec. * #8135 - the window management spec. (please review me, I have 0/3 signoffs even after the discussion we had 😢) * #8171 - the Monarch/peasant sample. (please review me, I have 1/2) ## PR Checklist * [x] Closes nothing, this is just infrastructure * [x] I work here * [x] Tests added/passed * [n/a] Requires documentation to be updated
74 lines
3 KiB
Plaintext
74 lines
3 KiB
Plaintext
// Copyright (c) Microsoft Corporation.
|
|
// Licensed under the MIT license.
|
|
|
|
import "TerminalPage.idl";
|
|
import "ShortcutActionDispatch.idl";
|
|
import "IDirectKeyListener.idl";
|
|
|
|
namespace TerminalApp
|
|
{
|
|
struct InitialPosition
|
|
{
|
|
Int64 X;
|
|
Int64 Y;
|
|
};
|
|
|
|
[default_interface] runtimeclass AppLogic : IDirectKeyListener, IDialogPresenter
|
|
{
|
|
AppLogic();
|
|
|
|
// For your own sanity, it's better to do setup outside the ctor.
|
|
// If you do any setup in the ctor that ends up throwing an exception,
|
|
// then it might look like TermApp just failed to activate, which will
|
|
// cause you to chase down the rabbit hole of "why is TermApp not
|
|
// registered?" when it definitely is.
|
|
void Create();
|
|
|
|
Boolean IsUwp();
|
|
void RunAsUwp();
|
|
Boolean IsElevated();
|
|
|
|
Int32 SetStartupCommandline(String[] commands);
|
|
Int32 ExecuteCommandline(String[] commands);
|
|
String ParseCommandlineMessage { get; };
|
|
Boolean ShouldExitEarly { get; };
|
|
|
|
void LoadSettings();
|
|
Windows.UI.Xaml.UIElement GetRoot();
|
|
|
|
String Title { get; };
|
|
|
|
Boolean FocusMode { get; };
|
|
Boolean Fullscreen { get; };
|
|
Boolean AlwaysOnTop { get; };
|
|
|
|
Windows.Foundation.Size GetLaunchDimensions(UInt32 dpi);
|
|
|
|
InitialPosition GetInitialPosition(Int64 defaultInitialX, Int64 defaultInitialY);
|
|
Windows.UI.Xaml.ElementTheme GetRequestedTheme();
|
|
Microsoft.Terminal.Settings.Model.LaunchMode GetLaunchMode();
|
|
Boolean GetShowTabsInTitlebar();
|
|
Boolean GetInitialAlwaysOnTop();
|
|
Single CalcSnappedDimension(Boolean widthOrHeight, Single dimension);
|
|
void TitlebarClicked();
|
|
void WindowCloseButtonClicked();
|
|
|
|
UInt64 GetLastActiveControlTaskbarState();
|
|
UInt64 GetLastActiveControlTaskbarProgress();
|
|
|
|
// See IDialogPresenter and TerminalPage's DialogPresenter for more
|
|
// information.
|
|
Windows.Foundation.IAsyncOperation<Windows.UI.Xaml.Controls.ContentDialogResult> ShowDialog(Windows.UI.Xaml.Controls.ContentDialog dialog);
|
|
|
|
event Windows.Foundation.TypedEventHandler<Object, Windows.UI.Xaml.UIElement> SetTitleBarContent;
|
|
event Windows.Foundation.TypedEventHandler<Object, String> TitleChanged;
|
|
event Windows.Foundation.TypedEventHandler<Object, LastTabClosedEventArgs> LastTabClosed;
|
|
event Windows.Foundation.TypedEventHandler<Object, Windows.UI.Xaml.ElementTheme> RequestedThemeChanged;
|
|
event Windows.Foundation.TypedEventHandler<Object, Object> FocusModeChanged;
|
|
event Windows.Foundation.TypedEventHandler<Object, Object> FullscreenChanged;
|
|
event Windows.Foundation.TypedEventHandler<Object, Object> AlwaysOnTopChanged;
|
|
event Windows.Foundation.TypedEventHandler<Object, Object> RaiseVisualBell;
|
|
event Windows.Foundation.TypedEventHandler<Object, Object> SetTaskbarProgress;
|
|
}
|
|
}
|