mirror of
https://github.com/microsoft/PowerToys
synced 2025-09-01 06:55:17 +00:00
[Settings][runner]Quick access system tray launcher (#22408)
* Init * Fix running settings * UI design * Left click trigger Wire up colorpicker and pt run * Wire up others * Update FlyoutWindow.xaml.cs * Removed comments * Update FlyoutWindow.xaml * More work * Open Settings page * More UI work * Resolve conflicts * [General] SystemTray Flyout: Add update on tray items' visibility when module gets enabled/disabled Also remove context menu opening on tray icon. * Adding app list * Adding more buttons, resolving conflicts * [General] Flyout: improving opening, closing flyout/settings window. Implementing basic bahaviour on enabling/disabling modules. * [General] FlyoutWindow: proceed with implementation. GPO works. Main functionallity works (launching and enabling apps). * [general] flyout: fix exit button * [general] flyout: implement double click handling * Localization * [Generel] Flyout: Re-implement flyout launching, add workaround: disable flyout hiding in case the user switches on modules on the all apps page + minor changes * [general] flyout: restore the context menu when right clicking on system tray icon * Fix spellchecker * [installer] fixing missing dll files + suppress error on not signed script * Fix spell checker * Fix flyout not focusing when activated * Refresh Settings UI enabled state when flyout changes * fix spellcheck * Remove VCM from the list * [General] flyout: fix settings window opening. Switch to general page only if there is no page opened * [general] flyout: add launching hosts app * Fix CI build * adding check on elevation when launching hosts * Use localization strings that already exist * Remove dll not present in arm64 build * Adding GPO policy check for the launcher page items * fix hosts launching * Add telemetry * Also hide from all apps list when gpo is force enabling * fix spellchecker * Improve focus issues * Fix flickering Bitmap Icons * Fix telemetry error * Fix telemetry call * Fix wrong comment --------- Co-authored-by: Stefan Markovic <stefan@janeasystems.com> Co-authored-by: Laszlo Nemeth <laszlo.nemeth.hu@gmail.com> Co-authored-by: Jaime Bernardo <jaime@janeasystems.com>
This commit is contained in:
@@ -6,6 +6,7 @@ using System;
|
||||
using ManagedCommon;
|
||||
using Microsoft.PowerLauncher.Telemetry;
|
||||
using Microsoft.PowerToys.Settings.UI.Helpers;
|
||||
using Microsoft.PowerToys.Settings.UI.Library;
|
||||
using Microsoft.PowerToys.Settings.UI.Library.Utilities;
|
||||
using Microsoft.PowerToys.Settings.UI.Views;
|
||||
using Microsoft.PowerToys.Telemetry;
|
||||
@@ -14,6 +15,7 @@ using Microsoft.UI.Windowing;
|
||||
using Microsoft.UI.Xaml;
|
||||
using Windows.ApplicationModel.Resources;
|
||||
using Windows.Data.Json;
|
||||
using WinUIEx;
|
||||
|
||||
namespace Microsoft.PowerToys.Settings.UI
|
||||
{
|
||||
@@ -73,6 +75,90 @@ namespace Microsoft.PowerToys.Settings.UI
|
||||
App.GetTwoWayIPCManager()?.Send(msg);
|
||||
});
|
||||
|
||||
// open main window
|
||||
ShellPage.SetOpenMainWindowCallback(() =>
|
||||
{
|
||||
this.DispatcherQueue.TryEnqueue(Microsoft.UI.Dispatching.DispatcherQueuePriority.Normal, () =>
|
||||
App.OpenSettingsWindow(typeof(GeneralPage)));
|
||||
});
|
||||
|
||||
// open main window
|
||||
ShellPage.SetUpdatingGeneralSettingsCallback((string module, bool isEnabled) =>
|
||||
{
|
||||
SettingsRepository<GeneralSettings> repository = SettingsRepository<GeneralSettings>.GetInstance(new SettingsUtils());
|
||||
GeneralSettings generalSettingsConfig = repository.SettingsConfig;
|
||||
bool needToUpdate = false;
|
||||
switch (module)
|
||||
{
|
||||
case "AlwaysOnTop":
|
||||
needToUpdate = generalSettingsConfig.Enabled.AlwaysOnTop != isEnabled;
|
||||
generalSettingsConfig.Enabled.AlwaysOnTop = isEnabled; break;
|
||||
case "Awake":
|
||||
needToUpdate = generalSettingsConfig.Enabled.Awake != isEnabled;
|
||||
generalSettingsConfig.Enabled.Awake = isEnabled; break;
|
||||
case "ColorPicker":
|
||||
needToUpdate = generalSettingsConfig.Enabled.ColorPicker != isEnabled;
|
||||
generalSettingsConfig.Enabled.ColorPicker = isEnabled; break;
|
||||
case "FancyZones":
|
||||
needToUpdate = generalSettingsConfig.Enabled.FancyZones != isEnabled;
|
||||
generalSettingsConfig.Enabled.FancyZones = isEnabled; break;
|
||||
case "FileLocksmith":
|
||||
needToUpdate = generalSettingsConfig.Enabled.FileLocksmith != isEnabled;
|
||||
generalSettingsConfig.Enabled.FileLocksmith = isEnabled; break;
|
||||
case "FindMyMouse":
|
||||
needToUpdate = generalSettingsConfig.Enabled.FindMyMouse != isEnabled;
|
||||
generalSettingsConfig.Enabled.FindMyMouse = isEnabled; break;
|
||||
case "Hosts":
|
||||
needToUpdate = generalSettingsConfig.Enabled.Hosts != isEnabled;
|
||||
generalSettingsConfig.Enabled.Hosts = isEnabled; break;
|
||||
case "ImageResizer":
|
||||
needToUpdate = generalSettingsConfig.Enabled.ImageResizer != isEnabled;
|
||||
generalSettingsConfig.Enabled.ImageResizer = isEnabled; break;
|
||||
case "KeyboardManager":
|
||||
needToUpdate = generalSettingsConfig.Enabled.KeyboardManager != isEnabled;
|
||||
generalSettingsConfig.Enabled.KeyboardManager = isEnabled; break;
|
||||
case "MouseHighlighter":
|
||||
needToUpdate = generalSettingsConfig.Enabled.MouseHighlighter != isEnabled;
|
||||
generalSettingsConfig.Enabled.MouseHighlighter = isEnabled; break;
|
||||
case "MousePointerCrosshairs":
|
||||
needToUpdate = generalSettingsConfig.Enabled.MousePointerCrosshairs != isEnabled;
|
||||
generalSettingsConfig.Enabled.MousePointerCrosshairs = isEnabled; break;
|
||||
case "PowerRename":
|
||||
needToUpdate = generalSettingsConfig.Enabled.PowerRename != isEnabled;
|
||||
generalSettingsConfig.Enabled.PowerRename = isEnabled; break;
|
||||
case "PowerLauncher":
|
||||
needToUpdate = generalSettingsConfig.Enabled.PowerLauncher != isEnabled;
|
||||
generalSettingsConfig.Enabled.PowerLauncher = isEnabled; break;
|
||||
case "PowerAccent":
|
||||
needToUpdate = generalSettingsConfig.Enabled.PowerAccent != isEnabled;
|
||||
generalSettingsConfig.Enabled.PowerAccent = isEnabled; break;
|
||||
case "MeasureTool":
|
||||
needToUpdate = generalSettingsConfig.Enabled.MeasureTool != isEnabled;
|
||||
generalSettingsConfig.Enabled.MeasureTool = isEnabled; break;
|
||||
case "ShortcutGuide":
|
||||
needToUpdate = generalSettingsConfig.Enabled.ShortcutGuide != isEnabled;
|
||||
generalSettingsConfig.Enabled.ShortcutGuide = isEnabled; break;
|
||||
case "PowerOCR":
|
||||
needToUpdate = generalSettingsConfig.Enabled.PowerOCR != isEnabled;
|
||||
generalSettingsConfig.Enabled.PowerOCR = isEnabled; break;
|
||||
case "VideoConference":
|
||||
needToUpdate = generalSettingsConfig.Enabled.VideoConference != isEnabled;
|
||||
generalSettingsConfig.Enabled.VideoConference = isEnabled; break;
|
||||
}
|
||||
|
||||
if (needToUpdate)
|
||||
{
|
||||
var outgoing = new OutGoingGeneralSettings(generalSettingsConfig);
|
||||
this.DispatcherQueue.TryEnqueue(Microsoft.UI.Dispatching.DispatcherQueuePriority.Normal, () =>
|
||||
{
|
||||
ShellPage.SendDefaultIPCMessage(outgoing.ToString());
|
||||
ShellPage.ShellHandler?.SignalGeneralDataUpdate();
|
||||
});
|
||||
}
|
||||
|
||||
return needToUpdate;
|
||||
});
|
||||
|
||||
// open oobe
|
||||
ShellPage.SetOpenOobeCallback(() =>
|
||||
{
|
||||
@@ -84,6 +170,39 @@ namespace Microsoft.PowerToys.Settings.UI
|
||||
App.GetOobeWindow().Activate();
|
||||
});
|
||||
|
||||
// open flyout
|
||||
ShellPage.SetOpenFlyoutCallback(() =>
|
||||
{
|
||||
this.DispatcherQueue.TryEnqueue(Microsoft.UI.Dispatching.DispatcherQueuePriority.Normal, () =>
|
||||
{
|
||||
if (App.GetFlyoutWindow() == null)
|
||||
{
|
||||
App.SetFlyoutWindow(new FlyoutWindow());
|
||||
}
|
||||
|
||||
FlyoutWindow flyout = App.GetFlyoutWindow();
|
||||
flyout.Activate();
|
||||
|
||||
// https://github.com/microsoft/microsoft-ui-xaml/issues/7595 - Activate doesn't bring window to the foreground
|
||||
// Need to call SetForegroundWindow to actually gain focus.
|
||||
Utils.BecomeForegroundWindow(flyout.GetWindowHandle());
|
||||
});
|
||||
});
|
||||
|
||||
// disable flyout hiding
|
||||
ShellPage.SetDisableFlyoutHidingCallback(() =>
|
||||
{
|
||||
this.DispatcherQueue.TryEnqueue(Microsoft.UI.Dispatching.DispatcherQueuePriority.Normal, () =>
|
||||
{
|
||||
if (App.GetFlyoutWindow() == null)
|
||||
{
|
||||
App.SetFlyoutWindow(new FlyoutWindow());
|
||||
}
|
||||
|
||||
App.GetFlyoutWindow().ViewModel.DisableHiding();
|
||||
});
|
||||
});
|
||||
|
||||
this.InitializeComponent();
|
||||
|
||||
// receive IPC Message
|
||||
@@ -140,5 +259,10 @@ namespace Microsoft.PowerToys.Settings.UI
|
||||
NativeMethods.ShowWindow(hWnd, NativeMethods.SW_HIDE);
|
||||
}
|
||||
}
|
||||
|
||||
internal void EnsurePageIsSelected()
|
||||
{
|
||||
ShellPage.EnsurePageIsSelected();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user