fb597ed304
## Summary of the Pull Request This PR adds support for renaming windows. ![window-renaming-000](https://user-images.githubusercontent.com/18356694/113034344-9a30be00-9157-11eb-9443-975f3c294f56.gif) ![window-renaming-001](https://user-images.githubusercontent.com/18356694/113034452-b5033280-9157-11eb-9e35-e5ac80fef0bc.gif) It does so through two new actions: * `renameWindow` takes a `name` parameter, and attempts to set the window's name to the provided name. This is useful if you always want to hit <kbd>F3</kbd> and rename a window to "foo" (READ: probably not that useful) * `openWindowRenamer` is more interesting: it opens a `TeachingTip` with a `TextBox`. When the user hits Ok, it'll request a rename for the provided value. This lets the user pick a new name for the window at runtime. In both cases, if there's already a window with that name, then the monarch will reject the rename, and pop a `Toast` in the window informing the user that the rename failed. Nifty! ## References * Builds on the toasts from #9523 * #5000 - process model megathread ## PR Checklist * [x] Closes https://github.com/microsoft/terminal/projects/5#card-50771747 * [x] I work here * [x] Tests addded (and pass with the help of #9660) * [ ] Requires documentation to be updated ## Detailed Description of the Pull Request / Additional comments I'm sending this PR while finishing up the tests. I figured I'll have time to sneak them in before I get the necessary reviews. > PAIN: We can't immediately focus the textbox in the TeachingTip. It's > not technically focusable until it is opened. However, it doesn't > provide an even tto tell us when it is opened. That's tracked in > microsoft/microsoft-ui-xaml#1607. So for now, the user _needs_ to > click on the text box manually. > We're also not using a ContentDialog for this, because in Xaml > Islands a text box in a ContentDialog won't recieve _any_ keypresses. > Fun! ## Validation Steps Performed I've been playing with ```json { "keys": "f1", "command": "identifyWindow" }, { "keys": "f2", "command": "identifyWindows" }, { "keys": "f3", "command": "openWindowRenamer" }, { "keys": "f4", "command": { "action": "renameWindow", "name": "foo" } }, { "keys": "f5", "command": { "action": "renameWindow", "name": "bar" } }, ``` and they seem to work as expected
90 lines
3.5 KiB
Plaintext
90 lines
3.5 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 FindTargetWindowResult
|
|
{
|
|
Int32 WindowId { get; };
|
|
String WindowName { get; };
|
|
};
|
|
|
|
[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 cwd);
|
|
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; };
|
|
|
|
void IdentifyWindow();
|
|
String WindowName;
|
|
UInt64 WindowId;
|
|
void RenameFailed();
|
|
|
|
Windows.Foundation.Size GetLaunchDimensions(UInt32 dpi);
|
|
Boolean CenterOnLaunch { get; };
|
|
|
|
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();
|
|
|
|
FindTargetWindowResult FindTargetWindow(String[] args);
|
|
|
|
// 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;
|
|
event Windows.Foundation.TypedEventHandler<Object, Object> IdentifyWindowsRequested;
|
|
event Windows.Foundation.TypedEventHandler<Object, RenameWindowRequestedArgs> RenameWindowRequested;
|
|
}
|
|
}
|