mirror of
https://github.com/microsoft/PowerToys.git
synced 2026-04-07 03:36:44 +02:00
* 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>
95 lines
4.0 KiB
C#
95 lines
4.0 KiB
C#
// Copyright (c) Microsoft Corporation
|
|
// The Microsoft Corporation licenses this file to you under the MIT license.
|
|
// See the LICENSE file in the project root for more information.
|
|
|
|
using System.Collections.Generic;
|
|
using System.Globalization;
|
|
using System.IO.Abstractions;
|
|
using Microsoft.PowerToys.Settings.UI.Helpers;
|
|
using Microsoft.PowerToys.Settings.UI.Library;
|
|
using Microsoft.PowerToys.Settings.UI.Library.Utilities;
|
|
using Microsoft.PowerToys.Settings.UI.ViewModels;
|
|
using Microsoft.UI.Xaml.Controls;
|
|
using Windows.System;
|
|
|
|
namespace Microsoft.PowerToys.Settings.UI.Views
|
|
{
|
|
/// <summary>
|
|
/// An empty page that can be used on its own or navigated to within a Frame.
|
|
/// </summary>
|
|
public sealed partial class KeyboardManagerPage : Page, IRefreshablePage
|
|
{
|
|
private const string PowerToyName = "Keyboard Manager";
|
|
|
|
private readonly IFileSystemWatcher watcher;
|
|
|
|
public KeyboardManagerViewModel ViewModel { get; }
|
|
|
|
public KeyboardManagerPage()
|
|
{
|
|
var settingsUtils = new SettingsUtils();
|
|
ViewModel = new KeyboardManagerViewModel(settingsUtils, SettingsRepository<GeneralSettings>.GetInstance(settingsUtils), ShellPage.SendDefaultIPCMessage, FilterRemapKeysList);
|
|
|
|
watcher = Helper.GetFileWatcher(
|
|
PowerToyName,
|
|
ViewModel.Settings.Properties.ActiveConfiguration.Value + ".json",
|
|
OnConfigFileUpdate);
|
|
|
|
InitializeComponent();
|
|
DataContext = ViewModel;
|
|
}
|
|
|
|
private void OnConfigFileUpdate()
|
|
{
|
|
// Note: FileSystemWatcher raise notification multiple times for single update operation.
|
|
// Todo: Handle duplicate events either by somehow suppress them or re-read the configuration everytime since we will be updating the UI only if something is changed.
|
|
if (ViewModel.LoadProfile())
|
|
{
|
|
this.DispatcherQueue.TryEnqueue(() =>
|
|
{
|
|
ViewModel.NotifyFileChanged();
|
|
});
|
|
}
|
|
}
|
|
|
|
private static void CombineRemappings(List<KeysDataModel> remapKeysList, uint leftKey, uint rightKey, uint combinedKey)
|
|
{
|
|
// Using InvariantCulture for keys as they are internally represented as numerical values
|
|
KeysDataModel firstRemap = remapKeysList.Find(x => uint.Parse(x.OriginalKeys, CultureInfo.InvariantCulture) == leftKey);
|
|
KeysDataModel secondRemap = remapKeysList.Find(x => uint.Parse(x.OriginalKeys, CultureInfo.InvariantCulture) == rightKey);
|
|
if (firstRemap != null && secondRemap != null)
|
|
{
|
|
if (firstRemap.NewRemapKeys == secondRemap.NewRemapKeys)
|
|
{
|
|
KeysDataModel combinedRemap = new KeysDataModel
|
|
{
|
|
OriginalKeys = combinedKey.ToString(CultureInfo.InvariantCulture),
|
|
NewRemapKeys = firstRemap.NewRemapKeys,
|
|
};
|
|
remapKeysList.Insert(remapKeysList.IndexOf(firstRemap), combinedRemap);
|
|
remapKeysList.Remove(firstRemap);
|
|
remapKeysList.Remove(secondRemap);
|
|
}
|
|
}
|
|
}
|
|
|
|
private int FilterRemapKeysList(List<KeysDataModel> remapKeysList)
|
|
{
|
|
if (remapKeysList != null)
|
|
{
|
|
CombineRemappings(remapKeysList, (uint)VirtualKey.LeftControl, (uint)VirtualKey.RightControl, (uint)VirtualKey.Control);
|
|
CombineRemappings(remapKeysList, (uint)VirtualKey.LeftMenu, (uint)VirtualKey.RightMenu, (uint)VirtualKey.Menu);
|
|
CombineRemappings(remapKeysList, (uint)VirtualKey.LeftShift, (uint)VirtualKey.RightShift, (uint)VirtualKey.Shift);
|
|
CombineRemappings(remapKeysList, (uint)VirtualKey.LeftWindows, (uint)VirtualKey.RightWindows, Helper.VirtualKeyWindows);
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
public void RefreshEnabledState()
|
|
{
|
|
ViewModel.RefreshEnabledState();
|
|
}
|
|
}
|
|
}
|