Files
PowerToys/doc/devdocs
Stefan Markovic 1b1d65ef8d Merge upstream PT #7 (#330)
* [Workspaces] implement the move feature (#35480)

* [Workspaces] Add move functionality

* spell checker

* [Workspaces] Modify Arranger to move apps without launch

* moved ipc helper

* removed callback

* use LauncherStatus in WindowArranger

* wait for launching next app

* launch in a separate thread and protect by mutexes

* update app version in advance

* changed canceling launch

* increased waiting time

* Fix optional parameter load from json

* changed arranger waiting time

* additional waiting time for Outlook

* added app id

* ensure ids before launch

* set id in editor

* minor updates

* [Workspaces] Move: Get the nearest window when moving a window

* [Workspaces] convert optional boolean to enum to avoid json problems

* Handle case when the new Application Property "moveIfExists" does not exist

* Re-implementing app-window pairing for moving feature.

* spell checker

* XAML formatting

* Fixing bug: IPC message not arriving

* spell checker

* Removing app-level-setting for move app. Also fixed compiler errors due styling.

* Updating editor window layout

* Re-implementing window positioning UI elements

* XAML formatting

* Code review findings

* Code cleanup

* Code cleanup

* Code cleanup

* code cleanup

* Code cleanup

* Code cleanup

* fix Move attribute after launch and snapshot

* Extend WindowArranger with PWA functionality to detect different PWA apps. PwaHelper moved to the common library

* fix repeat counter in the editor

* Code optimization

* code cleanup, optimization

* fix double-processing window

---------

Co-authored-by: Seraphima <zykovas91@gmail.com>
Co-authored-by: donlaci <donlaci@yahoo.com>

* [KeyboardManager]Fix mapping shift to numpad (#35890)

* Keyboard Manger fix numpad as shift

Fixed shift not being released if a numpad key as shift.

* Added comments

* Fix typo

* Fix the numpad unlocked key not working if the locked version is overridden by shift

* Fix spelling check.

* Revert the VK_CLEAR change.

---------

Co-authored-by: Jaime Bernardo <jaime@janeasystems.com>

* [Analyzers] Update .editorconfig with rules to relax IDE errors (#36095)

* [Analyzers] Remove duplicate pascal case style from .editorconfig

* [Analyzers] Configured severity for individual IDE and CA rules showing as errors in VS

Set severity for IDE0005, IDE0008, IDE0016, IDE0018, IDE0019, IDE0021, IDE0022, IDE0023, IDE0025, IDE0027, IDE0028, IDE0029, IDE0031, IDE0032, IDE0034, IDE0036, IDE0039, IDE0042, IDE0044, IDE0045, IDE0046, IDE0047, IDE0057, IDE0051, IDE0052, IDE0054, IDE0055, IDE0056, IDE0057, IDE0059, IDE0060, IDE0061, IDE0063, IDE0071, IDE0073, IDE0074, IDE0075, IDE0077, IDE0078, IDE0083, IDE0090, IDE0100, IDE0130, IDE160, IDE180, IDE0200, IDE0240, IDE0250, IDE0251, IDE0260, IDE0270, IDE0290, IDE0300, IDE0301, IDE0305, IDE1005, IDE1006, CA1859, CA2022, CA2263

* [Analyzers] Fix mismatched analyzer descriptions

* [Analyzers] Fix misspelling

* Update .editorconfig

Made the following style rules `silent` instead of `suggestion`: 
- Use explicit type instead of 'var'
- Use expression body for ...
- Use block-scoped namespace

* [Analyzers] Set IDE0290 to silent

* [Analyzers] Remove IDE1006 configuration from .editorconfig in favor of making exclusions for the few entries

* [Analyzers][Indexer] Add IDE1006 suppressions

* [Analyzers][Peek] Add IDE1006 suppression

* [Analyzers][MWB] Add IDE1006 suppression.

* [Analyzers][Plugins] Add IDE1006 suppression

* [Analyzers][ImageResizer] Suppress IDE0073 to retain original copyright

* [Analyzers] Remove IDE0073 severity change in .editorconfig

---------

Co-authored-by: Ani <115020168+drawbyperpetual@users.noreply.github.com>

* [Workspaces] PWA follow-up (#36217)

* [PTRun][Calculator]Allow scientific notation with lowercase 'e' (#36187)

* [Workspaces] Add encoder parameter to bitmap.save() (#36228)

* [Workspaces] Add encoder parameter to bitmap.save()

* 1 more call fixed

* Move repeated code to the csharp library

* [Workspaces] Implement store of app window's size and position (#36086)

* [Workspaces] Implement store of app window's size and position

* Modifying the default values to -1. The program will use the original default values for the first run.

* [ScreenRuler]Add setting to show the measurement in an extra unit (#35887)

* display ruler: supporting millimeter and other units

* Measurement Tool: UI Setting for an extra unit

* Update images

* spelling

* spelling

* suit code style

* Fix for code review

* remove weird file

* rename field

* [Deps]Update MSTest from 3.5.0 to 3.6.3 (#36115)

* Update MSTest from 3.5.0 to 3.6.3

* Use STA attributes that are now part of MSTest

* Adding Jerry to community.md (#36232)

Update COMMUNITY.md

* [Workspaces] Arranger: smart timer (#36096)

* [Workspaces] Add move functionality

* spell checker

* [Workspaces] Modify Arranger to move apps without launch

* moved ipc helper

* removed callback

* use LauncherStatus in WindowArranger

* wait for launching next app

* launch in a separate thread and protect by mutexes

* update app version in advance

* changed canceling launch

* increased waiting time

* Fix optional parameter load from json

* changed arranger waiting time

* additional waiting time for Outlook

* added app id

* ensure ids before launch

* set id in editor

* minor updates

* [Workspaces] Move: Get the nearest window when moving a window

* [Workspaces] convert optional boolean to enum to avoid json problems

* Handle case when the new Application Property "moveIfExists" does not exist

* Re-implementing app-window pairing for moving feature.

* spell checker

* XAML formatting

* Fixing bug: IPC message not arriving

* spell checker

* Removing app-level-setting for move app. Also fixed compiler errors due styling.

* Updating editor window layout

* Re-implementing window positioning UI elements

* XAML formatting

* Code review findings

* Code cleanup

* Code cleanup

* Code cleanup

* code cleanup

* Code cleanup

* Code cleanup

* [Workspaces] Arranger: Reset wait timer after each successful arrange action

* fix merge error

---------

Co-authored-by: Seraphima <zykovas91@gmail.com>
Co-authored-by: donlaci <donlaci@yahoo.com>

* Upgrade to check-spelling v0.0.24 (#36235)

This upgrades to [v0.0.24](https://github.com/check-spelling/check-spelling/releases/tag/v0.0.24).

A number of GitHub APIs are being turned off shortly, so you need to upgrade or various uncertain outcomes will occur.

There's a new accessibility forbidden pattern:

> Do not use `(click) here` links
> For more information, see:
> * https://www.w3.org/QA/Tips/noClickHere
> * https://webaim.org/techniques/hypertext/link_text
> * https://granicus.com/blog/why-click-here-links-are-bad/
> * https://heyoka.medium.com/dont-use-click-here-f32f445d1021
```pl
(?i)(?:>|\[)(?:(?:click |)here|link|(?:read |)more)(?:</|\]\()
```

There are some minor bugs that I'm aware of and which I've fixed since this release, but I don't expect to make another release this month.

I've added a pair of patterns for includes and pragmas. My argument is that the **compiler** will _generally_ tell you if you've misspelled an include and the **linker** will _generally_ tell you if you misspell a lib.

- There's a caveat here: If your include case-insensitively matches the referenced file (but doesn't properly match it), then unless you either use a case-sensitive file system (as opposed to case-preserving) or beg clang to warn, you won't notice when you make this specific mistake -- this matters in that a couple of Windows headers (e.g. Unknwn.h) have particular case and repositories don't tend to consistently/properly write them.

* Adjust to community.md, shifting jerry's github user name (#36242)

Update COMMUNITY.md

* [AOT compatible] Resolve AOT Build Error in Peek.UI (#36194)

* add partial for aot support

* add Microsoft.NET.ILLink.Tasks to packages.props

* format

* Revert "format"

This reverts commit 742d5e2214.

* add Microsoft.NET.ILLink.Tasks to notice.md

* add auto reference

* update script to remove the 'Auto-reference line'

---------

Co-authored-by: Jaime Bernardo <jaime@janeasystems.com>

* Awake Updates - `TILLSON_11272024` (#36049)

* Update with bug fixes for tray icon and support for parent process

* Process information enum

* Update the docs

* Fix spelling

* Make sure that PID is used in PT config flow

* Logic for checks based on #34148

* Update with link to PR

* Fixes #34717

* Small cleanup

* Proper task segmentation in a function

* Cleanup the code

* Fix synchronization context issue

* Update planning doc

* Test disabling caching to see if that manages to pass CI

* Cleanup to make sure that we're logging things properly.

* Update ci.yml

* Disable cache to pass CI

* Retry logic

* Cleanup

* Code cleanup

* Fixes #35848

* Update notes and codename

* After third attempt, log error instead of throwing exception

* More cleanup to avoid double execution

* Add expected word

* Safeguards for bad values for timed keep-awake

* More updates to make sure I am using uint

* Update error message

* Update packages

* Fix notice and revert CsWinRT upgrade

* Codename update

* Update expect.txt

* Update the struct

* Ensuring we're properly awaiting tray initialization

* Update to make sure tray reflects the bound process

* Cleanup, proper JSON serialization for logs.

* Not needed.

* Add command validation logic

* Moving the initialization logic earlier

* Make sure we show the display state in the tooltip

* Update tray string

* Update src/modules/awake/Awake/Core/Manager.cs

Co-authored-by: Jaime Bernardo <jaime@janeasystems.com>

* Update src/modules/awake/Awake/Core/Manager.cs

Co-authored-by: Jaime Bernardo <jaime@janeasystems.com>

* Update src/modules/awake/Awake/Core/Manager.cs

Co-authored-by: Jaime Bernardo <jaime@janeasystems.com>

* Update src/modules/awake/Awake/Core/Manager.cs

Co-authored-by: Jaime Bernardo <jaime@janeasystems.com>

* Update logic for icon resets

* Update doc

* Simplify function for setting mode shell icon

* Issues should be properly linked

* Minor cleanup

* Update timed behavior

---------

Co-authored-by: Jaime Bernardo <jaime@janeasystems.com>
Co-authored-by: Clint Rutkas <clint@rutkas.com>

* [Workspaces] detecting right app version (#36100)

* [Workspaces] Add move functionality

* spell checker

* [Workspaces] Modify Arranger to move apps without launch

* moved ipc helper

* removed callback

* use LauncherStatus in WindowArranger

* wait for launching next app

* launch in a separate thread and protect by mutexes

* update app version in advance

* changed canceling launch

* increased waiting time

* Fix optional parameter load from json

* changed arranger waiting time

* additional waiting time for Outlook

* added app id

* ensure ids before launch

* set id in editor

* minor updates

* [Workspaces] Move: Get the nearest window when moving a window

* [Workspaces] convert optional boolean to enum to avoid json problems

* Handle case when the new Application Property "moveIfExists" does not exist

* Re-implementing app-window pairing for moving feature.

* spell checker

* XAML formatting

* Fixing bug: IPC message not arriving

* spell checker

* Removing app-level-setting for move app. Also fixed compiler errors due styling.

* Updating editor window layout

* Re-implementing window positioning UI elements

* XAML formatting

* Code review findings

* Code cleanup

* Code cleanup

* Code cleanup

* code cleanup

* Code cleanup

* Code cleanup

* [Workspaces] fix detection of specific version of apps

---------

Co-authored-by: Seraphima <zykovas91@gmail.com>
Co-authored-by: donlaci <donlaci@yahoo.com>

* Move the XamlStyler config to src/ (#36202)

my never ending goal to minimize files in the root dir

* [AdvancedPaste]Add Semantic Kernel opt-in to allow chaining of paste actions (#35902)

* [AdvancedPaste] Semantic Kernel support

* Changed log-line with potentially sensitive info

* Spellcheck issues

* Various improvements for Semantic Kernel

* Spellcheck issue

* Refactored Clipboard routines

* Added integration tests for KernelService

* Extra telemetry for AdvancedPaste

* Added 'Hotkey' suffix to AdvancedPaste_Settings telemetry event

* Added IsSavedQuery

* Added KernelQueryCache

* Refactoring

* Added KernelQueryCache to BugReportTool delete list

* Added opt-n for Semantic Kernel

* Fixed bug with KernelQueryCache

* Ability to view last AI chat message on error

* Improved kernel query cache

* Used System.IO.Abstractions and improved tests

* Fixed under-count of token usage

* Used Semantic Kernel icon

* Cleanup

* Add missing EndProject line

* Fix dependency version conflicts

* Fix NOTICE.md

* Correct place of SemanticKernel in NOTICE.md

* Unlinked CustomPreview toggle from AI

* Added Microsoft.Bcl.AsyncInterfaces dependency to AdvancedPaste

* Fixed NOTICE.md order

* Moved Custom Preview to behaviour section

* Made Image to Text raise error on empty output

* Added AIServiceBatchIntegrationTests

* Updated AIServiceBatchIntegrationTests

* Added prompt moderation

* Moved GPO Infobar to better location

* [Launcher]Port from WPF-UI to .NET 9 WPF (#36215)

* Initial implementation

* Fix fluent style

* Fix no endline

* Update expect.txt

* Fix formatting

* Fix light theme looking bad on Windows 10

* fix formatting

* test change

* Now really fixed W10

* Add a comment

* Fix typos

* Fix spellcheck errors

* Fix spellcheck pattern for websites

* Change patterns for spellcheck in the right file

* Fix XAML styling

* Fix contrast colors on W11

* Fix formatting

* Removed emty line

* Fix formatting

* Added comment to fluentHC file

* fix comment

* Fix Windows10 again.
Adress feedback.

* W11 fix chaning from high contrast to normal not having correct background

* W10 Fix high contrast not working after switching from light/dark moed

* Address feedback

* Fix formatting

* Second W11 fix chaning from high contrast to normal not having correct background

* [UX]Updating New+ and Settings icons (#36290)

* Updated icons

* Updating more icons and icos

* [Settings][Dashboard] Accessibility fixes (#36280)

* make narrator announce buttons/toggles

* add toggles module name

* [ci]Sign OpenAI dll that's not signed (#36299)

* Update CODEOWNERS to include gordon, jerry and kayla (#36308)

* Update CODEOWNERS

* Update names.txt

* Making the powertoys-code-owners team code owners (#36310)

* Update CODEOWNERS

* Update names.txt

* Update CODEOWNERS

* [FZEditor]Fix Create new layout dialog radio buttons IsChecked values  (#36320)

* 0.87 changelog (#36335)

* 0.87 changelog

* Fix spellcheck

* Update README.md

Co-authored-by: Heiko <61519853+htcfreek@users.noreply.github.com>

---------

Co-authored-by: Heiko <61519853+htcfreek@users.noreply.github.com>

* [PTRun]Fix WPF transparent border issue on Windows 10 (#36392)

* Added border on W10

* Added a comment

---------
Co-authored-by: Davide Giacometti <25966642+davidegiacometti@users.noreply.github.com>

* [PTRun]Fix .NET 9 crash in OneNote (#36417)

* Fix crash in OneNote Run

* added better comment

* [AdvancedPaste]Fix NullReferenceException on Dispose (#36428)

[AdvancedPaste] Fixed NullReferenceException on Dispose

* [Fuzz] Add fuzz testing for AdvancedPaste and new pipeline for onboarding OneFuzz (#36329)

* add fuzz

* install .net8

* add spelling check

* refine the pipeline

* add readme and update the test code

* fix spelling error

* change to weekly run

* Add New CI Pipeline for Latest WindowsAppSDK (#36282)

This PR introduces the following changes to the CI pipeline and version management:

Pipeline Enhancements:
1. Added a new script UpdateVersions.ps1 to automate the update of Microsoft.WindowsAppSDK versions across various project files.
2. Introduced a new pipeline configuration ci-using-the-latest-winappsdk.yml to build using the latest Microsoft.WindowsAppSDK.
3. Updated existing pipeline configurations to support the new useLatestWinAppSDK parameter.

Pipeline Configuration Updates:
1. Updated job-build-project.yml to handle the useLatestWinAppSDK parameter and adjust the RestoreAdditionalProjectSourcesArg accordingly.
2. Added a new template steps-update-winappsdk-and-restore-nuget.yml for updating and restoring NuGet packages with the latest Microsoft.WindowsAppSDK.
3. Added WinAPPSDK version selection, the pipeline can be manually triggered to use the specified version.

---------

Signed-off-by: Shawn Yuan <shuai.yuan.zju@gmail.com>
Co-authored-by: Clint Rutkas <clint@rutkas.com>

* [AOT compatible] Make HostsUILib become AOT compatible (#36136)

* Remove AOT configuration

* Refer to AOT compatibility props

---------

Co-authored-by: Yu Leng (from Dev Box) <yuleng@microsoft.com>

* [AOT compatible] Clean up some AOT build issue in FilePreviewCommon and MarkdownPreviewHandler (#36207)

* Use AppContext.BaseDirectory to replace assembly.GetExeAseembly.Location.
Fix json serilizer aot issue.

* clean up some AOT build issue

* Update src/modules/previewpane/MarkdownPreviewHandler/MarkdownPreviewHandlerControl.cs

Co-authored-by: Jeremy Sinclair <4016293+snickler@users.noreply.github.com>

* Update src/common/FilePreviewCommon/Formatters/JsonFormatter.cs

Co-authored-by: Jeremy Sinclair <4016293+snickler@users.noreply.github.com>

---------

Co-authored-by: Yu Leng (from Dev Box) <yuleng@microsoft.com>
Co-authored-by: Jeremy Sinclair <4016293+snickler@users.noreply.github.com>

* Add new pipeline using the latest webview2 from Edge Canary (#36317)

* using the latest webview2 for testing


---------

Signed-off-by: Shawn Yuan <shuai.yuan.zju@gmail.com>
Co-authored-by: Clint Rutkas <clint@rutkas.com>

* [Bug fix] Making the OpenAI key configuration page scrollable. (#36359)

* Fixed #34470

---------

Signed-off-by: Shawn Yuan <shuai.yuan.zju@gmail.com>

* [Bug fix] Add a format validation step before format conversion. (#36404)

This PR aims to fix the bug #35225 by introducing a new method IsJson to determine if a given text is in JSON format.
The IsJson method is then utilized in the ToJsonFromXmlOrCsvAsync method to optimize the processing logic.
If the text is already in JSON format, it is returned directly without further conversion from XML or CSV.

Co-authored-by: Heiko <61519853+htcfreek@users.noreply.github.com>

---------

Signed-off-by: Shawn Yuan <shuai.yuan.zju@gmail.com>
Co-authored-by: Heiko <61519853+htcfreek@users.noreply.github.com>

* Add more STCA team members (#36438)

* Add more STCA team members

* Include more spelling check errors

* Remove non-alpha in dictionary

* Add Zhaopeng Wang

* Fix spell checking error

* Remove "prerelease: true" (#36484)

* Remove "prerelease: true"

The Microsoft.WinGet.DSC module is GA so prerelease: true is no longer needed.

* Update expect.txt

fixing spellcheck warning

---------

Co-authored-by: Clint Rutkas <clint@rutkas.com>

* [Docs]Update README for 0.87.1 release (#36534)

* [CI] Enhance build Pipeline Reliability with Retry Logic and Improved Error Messaging (#36529)

* update pipeline with retry

* remove tests

* Add team member (#36590)

* [New+]Don't override New actions from Explorer on Windows 10 (#36467)

* [New+]Don't override New actions from Explorer

* Update src/modules/NewPlus/NewShellExtensionContextMenu.win10/shell_context_menu_win10.cpp

* Update src/modules/NewPlus/NewShellExtensionContextMenu.win10/shell_context_menu_win10.cpp

* Add pattern for learn.microsoft links

* Also only Query for context menu

* [PTRun][Calculator]Handle hexadecimal numbers to not return divide by 0 error (#36390)

* add '0x' handling for divide by 0 scenarios

* fix comment on division by 0 check

---------

Co-authored-by: Connor Plante <connor.plante@gmail.com>

* [TextExtractor]Minor UI/Accessibility fixes in the overlay UI (#36356)

minor UI and accessibility fixes

* [PTRun][Calculator]Update mages to v3.0.0 and support for `randi(n)` (#36560)

* update to mages 3.0.0

* allow randi() in calculator plugin

* fix tests and input validation

* fix spell check

* [QuickAccent]Added ć for Slovenian (#36336) (#36338)

* Fix snapping Workspaces Editor to Fancy Zones (#36463)

* Remove Workspaces Editor from Fancy Zone's excluded app list

* removed unused string

---------

Co-authored-by: Seraphima <zykovas91@gmail.com>

* [PTRun]Fix drag on .NET 9 WPF (#36635)

* [CQ]Continued to move stuff out of root - Solution.props (#36244)

* [QuickAccent]Add Proto-Indo-European (#36408)

* Add ḱ to PowerAccent for Proto-Indo-European

* Fix Spelling Check

* Add more letters to PIE

* Order PIE after PI

---------

Co-authored-by: Hao Liu (from Dev Box) <haoliu3@microsoft.com>
Co-authored-by: Jaime Bernardo <jaime@janeasystems.com>

* [PTRun]Add context buttons for VSCodeWorkspaces plugin (#36517)

* [Settings][QuickAccent]Change 'character set' to plural form (#36565)

* [PTRun][Calculator]Fix unit tests on non-english systems (#36569)

* fix tests

* update comment

* [PTRun][Calc]Improve handling of non-base 10 numbers (#36700)

* [Settings][PTRun]Show plugin version and website (#36580)

* [Monaco]Add support for .resx and .resw preview support. (#36499)

Added support for .resx and .resw preview support. These files are XML based files so I added the file extensions as part of the registerAdditionalLanguage("xmlExt"...) function.

* [Settings] Add Workspaces' workspaces.json file to backup/restore list (#36714)

* [Localization] Fix loc pipeline to send downloaded localized files to TDBuild upon retry after failure (#36766)

* [AdvancedPaste]Fixed issues with Screen Reader integration (#36778)

* Remove Advent calendar from README (#36777)

* Remove Advent calendar from README

* Update hero image

* Delete doc/images/overview/PT_holiday_hero_image.png

* [AdvancedPaste]Add all BitmapDecoder supported image filetypes to ImageToText (#35600)

Adds support to ImageToText for all image filetypes supported by BitmapDecoder.

* [AOT]Clean up some AOT build issues in PowerAccent.Core (#36264)

* init

* Use AotCompatibility instead

* Replace typeof(Lanaguge) with GetValues<Language>

* Create new folder to place source generation context file.

---------

Co-authored-by: Yu Leng (from Dev Box) <yuleng@microsoft.com>

* [WinUI3]Fix Windows 10 title bar borders (#36429)

* Fix borders for windows in the Settings UI

* Fix HOSTS window

* Fix Advanced Paste

* Fix Environment Variables

* Fix File Locksmith

* Fix Peek, with a caveat

* Fix Registry Preview

* Remove unused imports

* Clean up imports in OobeShellPage

* Move OSVersionHelper from Common.UI up into ManagedCommon

* [QuickAccent]Fix unstable language loading (#36721)

* [Peek]Bring into foreground if previously minimized (#36506)

Added Activate() to bring Peek.UI window into focus upon Toggle. This allows the UI to be presented even if it was previously minimized.

* Update Run docs README (#36857)

* Update Run docs README

* Remove System dupe

* [Monaco]Make minimap toggleable (#33742)

* [Monaco]Fix Json format preview setting (#36867)

* [KBM]Added option for exact match shortcut (#36000)

* Added option for exact match shortcut

* Fix spell-check

* [Deps][Security]Update .NET Packages from 9.0.0 to 9.0.1  (#36879)

* [Deps] Update NuGet packages to version 9.0.1

Updated several NuGet packages from version 9.0.0 to 9.0.1, including:
- Microsoft.Data.Sqlite
- Microsoft.Bcl.AsyncInterfaces
- Microsoft.Extensions.DependencyInjection
- Microsoft.Extensions.Logging
- Microsoft.Extensions.Logging.Abstractions
- Microsoft.Extensions.Hosting
- Microsoft.Extensions.Hosting.WindowsServices
- Microsoft.Win32.SystemEvents
- Microsoft.Windows.Compatibility
- System.CodeDom
- System.ComponentModel.Composition
- System.Configuration.ConfigurationManager
- System.Data.OleDb
- System.Diagnostics.EventLog
- System.Diagnostics.PerformanceCounter
- System.Drawing.Common
- System.Management
- System.Runtime.Caching
- System.ServiceProcess.ServiceController
- System.Text.Encoding.CodePages
- System.Text.Json

* [Deps] Update NOTICE.md

* Fix bad merge

* [check-spelling] Update metadata

Update for https://github.com/zadjii-msft/PowerToys/actions/runs/12790673218/attempts/1
Accepted in https://github.com/zadjii-msft/PowerToys/pull/330#issuecomment-2593053640

Signed-off-by: check-spelling-bot <check-spelling-bot@users.noreply.github.com>
on-behalf-of: @check-spelling <check-spelling-bot@check-spelling.dev>

---------

Signed-off-by: Shawn Yuan <shuai.yuan.zju@gmail.com>
Signed-off-by: check-spelling-bot <check-spelling-bot@users.noreply.github.com>
Co-authored-by: Laszlo Nemeth <57342539+donlaci@users.noreply.github.com>
Co-authored-by: Seraphima <zykovas91@gmail.com>
Co-authored-by: donlaci <donlaci@yahoo.com>
Co-authored-by: Ionuț Manța <ionut@janeasystems.com>
Co-authored-by: Jaime Bernardo <jaime@janeasystems.com>
Co-authored-by: Jeremy Sinclair <4016293+snickler@users.noreply.github.com>
Co-authored-by: Ani <115020168+drawbyperpetual@users.noreply.github.com>
Co-authored-by: PesBandi <127593627+PesBandi@users.noreply.github.com>
Co-authored-by: Wenjian Chern <55335597+Sophanatprime@users.noreply.github.com>
Co-authored-by: Youssef Victor <youssefvictor00@gmail.com>
Co-authored-by: Clint Rutkas <clint@rutkas.com>
Co-authored-by: Josh Soref <2119212+jsoref@users.noreply.github.com>
Co-authored-by: leileizhang <leilzh@microsoft.com>
Co-authored-by: Den Delimarsky 🔐 <sign@den.dev>
Co-authored-by: Niels Laute <niels.laute@live.nl>
Co-authored-by: Davide Giacometti <25966642+davidegiacometti@users.noreply.github.com>
Co-authored-by: Heiko <61519853+htcfreek@users.noreply.github.com>
Co-authored-by: Shuai Yuan <128874481+shuaiyuanxx@users.noreply.github.com>
Co-authored-by: moooyo <42196638+moooyo@users.noreply.github.com>
Co-authored-by: Yu Leng (from Dev Box) <yuleng@microsoft.com>
Co-authored-by: Jerry Xu <n.xu@outlook.com>
Co-authored-by: Demitrius Nelon <denelon@microsoft.com>
Co-authored-by: Kai Tao <69313318+vanzue@users.noreply.github.com>
Co-authored-by: Connor Plante <150482134+plante-msft@users.noreply.github.com>
Co-authored-by: Connor Plante <connor.plante@gmail.com>
Co-authored-by: Domen Soklič <soklicd@gmail.com>
Co-authored-by: Hao Liu <liuhaobupt@163.com>
Co-authored-by: Hao Liu (from Dev Box) <haoliu3@microsoft.com>
Co-authored-by: immi <iafullprogrammer@gmail.com>
Co-authored-by: Asif Islam <77113884+asif4318@users.noreply.github.com>
Co-authored-by: Kayla Cinnamon <cinnamon@microsoft.com>
Co-authored-by: Dave Rayment <dave.rayment@gmail.com>
Co-authored-by: Neil McAlister <pingzing@users.noreply.github.com>
Co-authored-by: Stefan Markovic <stefansjfw@users.noreply.github.com>
2025-01-15 16:15:09 +01:00
..
2024-12-18 08:57:45 +01:00
2025-01-15 16:15:09 +01:00
2024-12-18 08:57:45 +01:00
2024-12-18 08:57:45 +01:00
2023-03-21 10:27:29 +01:00
2024-03-26 15:37:40 +00:00
2024-12-18 08:57:45 +01:00

Dev Documentation

Fork, Clone, Branch and Create your PR

Once you've discussed your proposed feature/fix/etc. with a team member, and an approach or a spec has been written and approved, it's time to start development:

  1. Fork the repo on GitHub if you haven't already
  2. Clone your fork locally
  3. Create a feature branch
  4. Work on your changes
  5. Create a Draft Pull Request (PR)
  6. When ready, mark your PR as "ready for review".

Rules

  • Follow the pattern of what you already see in the code.
  • Coding style.
  • Try to package new functionality/components into libraries that have nicely defined interfaces.
  • Package new functionality into classes or refactor existing functionality into a class as you extend the code.
  • When adding new classes/methods/changing existing code, add new unit tests or update the existing tests.

GitHub Workflow

  • Before starting to work on a fix/feature, make sure there is an open issue to track the work.
  • Add the In progress label to the issue, if not already present. Also add a Cost-Small/Medium/Large estimate and make sure all appropriate labels are set.
  • If you are a community contributor, you will not be able to add labels to the issue; in that case just add a comment saying that you have started work on the issue and try to give an estimate for the delivery date.
  • If the work item has a medium/large cost, using the markdown task list, list each sub item and update the list with a check mark after completing each sub item.
  • When opening a PR, follow the PR template.
  • When you'd like the team to take a look (even if the work is not yet fully complete) mark the PR as 'Ready For Review' so that the team can review your work and provide comments, suggestions, and request changes. It may take several cycles, but the end result will be solid, testable, conformant code that is safe for us to merge.
  • When the PR is approved, let the owner of the PR merge it. For community contributions, the reviewer who approved the PR can also merge it.
  • Use the Squash and merge option to merge a PR. If you don't want to squash it because there are logically different commits, use Rebase and merge.
  • We don't close issues automatically when referenced in a PR, so after the PR is merged:
    • mark the issue(s) that the PR solved with the Resolution-Fix-Committed label, remove the In progress label and if the issue is assigned to a project, move the item to the Done status.
    • don't close the issue if it's a bug in the current released version; since users tend to not search for closed issues, we will close the resolved issues when a new version is released.
    • if it's not a code fix that effects the end user, the issue can be closed (for example a fix in the build or a code refactoring and so on).

Compiling PowerToys

Prerequisites for Compiling PowerToys

  1. Windows 10 April 2018 Update (version 1803) or newer
  2. Visual Studio Community/Professional/Enterprise 2022 17.4 or newer
  3. A local clone of the PowerToys repository

Install Visual Studio dependencies

  1. Open the PowerToys.sln file.
  2. If you see a dialog that says install extra components in the solution explorer pane, click install

Get Submodules to compile

We have submodules that need to be initialized before you can compile most parts of PowerToys. This should be a one-time step.

  1. Open a terminal
  2. Navigate to the folder you cloned PowerToys to.
  3. Run git submodule update --init --recursive

Compiling Source Code

  • Open PowerToys.sln in Visual Studio.
  • In the Solutions Configuration drop-down menu select Release or Debug.
  • From the Build menu choose Build Solution, or press Control+Shift+b on your keyboard.
  • The build process may take several minutes depending on your computer's performance. Once it completes, the PowerToys binaries will be in your repo under x64\Release\.
    • You can run x64\Release\PowerToys.exe directly without installing PowerToys, but some modules (i.e. PowerRename, ImageResizer, File Explorer extension etc.) will not be available unless you also build the installer and install PowerToys.

Compile the installer

Our installer is two parts, an EXE and an MSI. The EXE (Bootstrapper) contains the MSI and handles more complex installation logic.

  • The EXE installs all prerequisites and installs PowerToys via the MSI. It has additional features such as the installation flags (see below).
  • The MSI installs the PowerToys binaries.

The installer can only be compiled in Release mode; steps 1 and 2 must be performed before the MSI can be compiled.

  1. Compile PowerToys.sln. Instructions are listed above.
  2. Compile BugReportTool.sln tool. Path from root: tools\BugReportTool\BugReportTool.sln (details listed below)
  3. Compile WebcamReportTool.sln tool. Path from root: tools\WebcamReportTool\WebcamReportTool.sln (details listed below)
  4. Compile StylesReportTool.sln tool. Path from root: tools\StylesReportTool\StylesReportTool.sln (details listed below)
  5. Compile PowerToysSetup.sln Path from root: installer\PowerToysSetup.sln (details listed below)

Prerequisites for building the MSI installer

  1. Install the WiX Toolset Visual Studio 2022 Extension.
  2. Install the WiX Toolset build tools. (installer direct link)
  3. Download WiX binaries and extract wix.targets to C:\Program Files (x86)\WiX Toolset v3.14.

Building prerequisite projects

From the command line

  1. From the start menu, open a Developer Command Prompt for VS 2022
  2. Ensure nuget.exe is in your %path%
  3. In the repo root, run these commands:
nuget restore .\tools\BugReportTool\BugReportTool.sln
msbuild -p:Platform=x64 -p:Configuration=Release .\tools\BugReportTool\BugReportTool.sln

nuget restore .\tools\WebcamReportTool\WebcamReportTool.sln
msbuild -p:Platform=x64 -p:Configuration=Release .\tools\WebcamReportTool\WebcamReportTool.sln

nuget restore .\tools\StylesReportTool\StylesReportTool.sln
msbuild -p:Platform=x64 -p:Configuration=Release .\tools\StylesReportTool\StylesReportTool.sln

From Visual Studio

If you prefer, you can alternatively build prerequisite projects for the installer using the Visual Studio UI.

  1. Open tools\BugReportTool\BugReportTool.sln
  2. In Visual Studio, in the Solutions Configuration drop-down menu select Release
  3. From the Build menu, choose Build Solution.
  4. Open tools\WebcamReportTool\WebcamReportTool.sln
  5. In Visual Studio, in the Solutions Configuration drop-down menu select Release
  6. From the Build menu, choose Build Solution.
  7. Open tools\StylesReportTool\StylesReportTool.sln
  8. In Visual Studio, in the Solutions Configuration drop-down menu select Release
  9. From the Build menu, choose Build Solution.

Locally compiling the installer

  1. Open installer\PowerToysSetup.sln
  2. In Visual Studio, in the Solutions Configuration drop-down menu select Release
  3. From the Build menu choose Build Solution.

The resulting PowerToysSetup.msi installer will be available in the installer\PowerToysSetup\x64\Release\ folder.

Supported arguments for the .EXE Bootstrapper installer

Head over to the wiki to see the [full list of supported installer arguments][installerArgWiki].

Debugging

To debug the PowerToys application in Visual Studio, set the runner project as your start-up project, then start the debugger.

Some PowerToys modules must be run with the highest permission level if the current user is a member of the Administrators group. The highest permission level is required to be able to perform some actions when an elevated application (e.g. Task Manager) is in the foreground or is the target of an action. Without elevated privileges some PowerToys modules will still work but with some limitations:

  • The FancyZones module will not be able to move an elevated window to a zone.
  • The Shortcut Guide module will not appear if the foreground window belongs to an elevated application.

Therefore, it is recommended to run Visual Studio with elevated privileges when debugging these scenarios. If you want to avoid running Visual Studio with elevated privileges and don't mind the limitations described above, you can do the following: open the runner project properties and navigate to the Linker -> Manifest File settings, edit the UAC Execution Level property and change it from highestAvailable (level='highestAvailable') to `asInvoker (/level='asInvoker').

How to create new PowerToys

See the instructions on how to install the PowerToys Module project template.
Specifications for the PowerToys settings API.

Implementation details

Runner

The PowerToys Runner contains the project for the PowerToys.exe executable. It's responsible for:

  • Loading the individual PowerToys modules.
  • Passing registered events to the PowerToys.
  • Showing a system tray icon to manage the PowerToys.
  • Bridging between the PowerToys modules and the Settings editor.

Image of the tray icon

Interface

The definition of the interface used by the runner to manage the PowerToys. All PowerToys must implement this interface.

Common

The common lib, as the name suggests, contains code shared by multiple PowerToys components and modules, e.g. json parsing and IPC primitives.

Settings

Settings v2 is our current settings implementation. Please head over to the dev docs that describe the current settings system.