* installer: extract version number into separate file and use it where possible
* MSIX: rename package to include version on CDPx
* installer: generate assembly info for FZ editor
* MSIX: inject correct version to appxmanifest
* format_sources: exclude 3rd party sources
* format common project
* format leftovers in runner & settings projects
* move source formatting-related files according to #939
* Introduce handling of new/old work areas (defined by virtual desktop id and monitor)
* Save data to JSON storage only once after we register all deleted virtual desktops
* Update saving mechanism
* Remove resolution from unique identifier
* Update comments related to new unique identifier
* Don't handle NULL GUID as it is default one
* Revert "Remove resolution from unique identifier"
This reverts commit 5a36651217.
* Revert "Update comments related to new unique identifier"
This reverts commit 8e89802549.
* removed MigrateDeviceInfoFromRegistry
Co-authored-by: Seraphima Zykova <zykovas91@gmail.com>
* Migrate FancyZones data persisting from Registry to JSON file
* Address PR comment: Remove redundant check
* Addres PR comment: Remove unused Dpi and add CmdArgs enum
* Address PR comment: Make methods const and inline
* Address PR comments: Expose GenerateUniqueId function and use const ref instead of passing wstring by value
* Address PR comment: Use lamdba as callback
* Address PR comment: Move GenerateUniqueId to ZoneWindowUtils namespace
* Address PR comment: Use regular comparison instead of std::wstring::compare
* Address PR comment: Use std::wstring_view for tmp file paths
* Address PR comment: Use scoped lock when accessing member data
* Address PR comment: Remove typedefs to increase code readability
* Address PR comment: removed nullptr checks with corresponding tests
* Address PR comment: Move ZoneSet object instead of copying
* Address PR comment: Make FancyZonesData instance const where possible
* Remove unnecessary gutter variable during calculating zone coordinates
* Remove uneeded subclass
* Avoid unnecessary copying and reserve space for vector if possible
* Save FancyZones data after exiting editor
* App zone history (#18)
* added window and zone set ids to app zone history
* Rename JSON file
* Remove AppZoneHistory migration
* Move parsing of ZoneWindow independent temp files outside of it
* Unit tests update (#19)
* check device existence in map
* updated ZoneSet tests
* updated JsonHelpers tests
* Use single zone count information
* Remove uneeded tests
* Remove one more test
* Remove uneeded line
* Address PR comments - Missing whitespace
* Update zoneset data for new virtual desktops (#21)
* update active zone set with actual data
* Introduce Blank zone set (used to indicate that no layout applied yet). Move parsing completely outside of ZoneWindow.
* Fix unit tests to match modifications in implementation
* Fix applying layouts on startup (second monitor)
Co-authored-by: vldmr11080 <57061786+vldmr11080@users.noreply.github.com>
Co-authored-by: Seraphima <zykovas91@gmail.com>
Splits the code use to filter windows for FancyZones and the
"active window" for the ShortcutGuide. The FancyZones logic is preserved
and merged into a single function. We keep it in common.h, as it might
be also used in other PowerToys, like maximized to new desktop. We do
however change the return type to be more descriptive. It also returns
a separate flag for if the window has a visible owner. This can be used
to implement the approved apps list.
For the ShortcutGuide, the logic is relaxed to include more windows. One
example are Explorer properties windows. Those are (and should) filtered
by the FancyZones, but should appear in the window preview in the SCG.
The new return type also includes information if the window will react
to the default Windows Snap. This is not ideal though. Currently, SCG
can only disable the entire "Windows Controls" group. OTOH windows like
"Save As..." dialogs can be snapped to corners etc., but cannot be
minimized nor maximized. Until SCG can separately disable those buttons
we will display the buttons in the enabled state only if the window
supports all settings. In the future, we should integrate FancyZones
snap override here too.
The cache was introduced to improve performance by not querying the
OS for the window process path every time we need to check if the window
is interesting to FancyZones. Since then other changes were made to the
the way we check the windows. Right now, the IsInterestingWindow function is
called when:
1) WinKey + arrows are used
2) window is started to be dragged
3) window is created
1) and 2) are initiated by the user, happen only once per interaction so
their performance impact can be dismissed. The 3) happens all the time
but for the most part the check for WS_CHILD or
GetAncestor(window, GA_ROOT) == window will filter those out. In the
end, only top-level windows will be queried for their path.
Removing the cache improves code readability and will make code
maintenance easier.
Do not swallow WinKey+Arrow events for non-interesting windows. This makes apps that are in the "excluded apps" list behave as if "Override windows snap keys" is disabled - they will react to the Windows default snap.
* localized dllmain.cpp of fancyzones project
* localized FancyZones.cpp
* format fancyzones.rc file
* Moved SuperFancyZones back to being a string instead of having it in the resource file as it is the window class name
* reverted changes for window name
* Formatted fancyzones rc file
* Localized shortcut_guide.cpp
* localized overlay_window.cpp
* formatting changes
* Localize overlay window
* removed the README link from the set of localized resources
* Typo: changed upper to lower
* removed hardcoded strings from CanvasEditorWindow.xaml
* removed hardcoded strings from GridEditorWindow.xaml
* loc
* Localized MainWindow
* reverting MainWindow.xaml as it is not rendering the window as expected
* Changed the resource settings from internal to public
* the culture is set based on the culture of the system UI set in the system settings
* Removed the french resource files used for testing
* Localized canvasWindow and mainwindow
* Removed setting the UI culture explicitly as it would be implicitly set to the culture of system UI
* Removed redundant header file
* adding fancy zone opacity setting, enhancement #631
* applying zone opacity setting to all zones during zone selection
* changing opacity setting to percentage
Ensure stored settings get evaluated after initial enumeration
There was a bug where the list view was not getting updated with the results of the search and replace on launch when we are using a stored search or replace text from a previous session.
Make the runner not run as elevated by default. Add a setting for
"run PowerToys as elevated" and buttons to restart the process
with the different elevation levels.
* docs: split usage and dev docs
* # This is a combination of 2 commits.
# This is the 1st commit message:
docs: split usage and dev docs
# The commit message #2 will be skipped:
# fixup add docs
* docs: add runner documentation and move hooks documentation to devdocs
* docs: add stubs for modules technical description
* docs: add paragraph about event thread-safety
* docs: add 'Current modules' section header
1. Creating a mock ZoneWindowHost. Previously creating a ZoneWindow would throw an exception if the ZoneWindowHost is null.
2. Passing in HWND() instead of null to get rig of SAL annotation warnings.
1efe5bff9f
It looks to me like the test cases just was also wrong and just wasn't updated with the fix.
I've modified some of the test cases to verify the expected behavior:
1) Slight refactor of the tests to pass in the SearchReplaceExpected and flags for the tests.
2) Using Assert::AreEqual instead of Assert::IsTrue for better error meesaging when failed.
3) Verifying that the behavior is the same with or without match all occurances when using *.
4) Verifying that without the `UseRegularExpressionsFlag` the `.*` characters get replaced, including when MatchAllOccurances is set.
1) Adding example project to Debug / Release Builds.
2) Including <string> in common.h
3) Using std::optional instead of PowerToysValues::is_[type]_value
4) Fixing warnings generated by unreferenced 'ex' variable in exception handling.
5) Updated relative path of version.h in exeample_powertoy.rc
This makes the Hotkey settings object ignore the key value stored in
json. Instead it will be deduced from the current keyboard layout and
the vk_code.
* Removed and runs
Still needs some extra cleanup and addressing open issues
* Removed and runs
Still needs some extra cleanup and addressing open issues
* Clean
* Update
Unifies the way windows are considered "interesting" by FancyZone.
Berfore the change WinKey + arrows would use different method than
dragging. This PR makes both use the WinKey + arrows method.
Cleans up FancyZones Settings.cpp by removing m_configStrings variable.
Contrary to its name it was used to create color picker control.
Adds a multiline option to the text input to settings. Uses this to
provide the user with a way to exclude certain apps from snapping to
zones.
* Use DPIAware::DEFAULT_DPI
* Make runner DPI-unaware, since it doesn't need to use a Per Monitor V2 DPI.
* Programmatically enable "Per Monitor V2 DPI" for the runner proccess and use a separate DPI-unaware thread for the corresponding API calls
* Increase PCH memory limit for settings project
* Address review issues
* Draw zoneWindows properly scaled
* Bug Fixes
Fixes include:
* Pass parent HWND to UI so dialog is no longer appearing in top corner all the time
* Fix duplicate entries for PowerRename in context menu for shortcuts
* Fix crashing bug due to telemetry not getting unregistered on unload
* Ensure we show the file extension in the UI even if extensions are hidden in Windows Explorer
* Update PowerRenameExt.cpp
Fix missed line to set parent HWND
Use reserved 0xCF virtual key-code to suppress the Start menu from
appearing instead of 0x07 which is used by the Xbox Controller for the
Xbox Guide button.
Fixes: https://github.com/microsoft/PowerToys/issues/595
The call to load_general_settings will throw an exception if the
settings.json file for the general settings is not present. This leaves
settings_theme variable uninitialized, resulting in no value selected in
the general settings screen for users that did not make any changes to
the general settings. This fixes this issue by initializing the value
with a "system" default value.
Fixes: https://github.com/microsoft/PowerToys/issues/560
* Update icon and add telemetry calls
This change adds the new PowerRename icon and includes telemetry calls
* Ensure string is freed
* Update event naming convention
* Delete PowerRenameDemo.gif
Deleting this gif as I added it with a separate commit with the README.md update for PowerRename
don't exit when clicking on "Apply" if no layout is selected
Credit to @AlexR3 for the fix. Alex provided a more extensive fix that disable the button when no layout is selected, but it requires more changes to the XAML and we preferred to avoid that now.
* Don't trace event on exit
change 'PowertoyModuleDeleter' to not call 'module->disable();' before 'module->destroy();' so the module can distinguish between being turned off and PowerToys exiting.
Code formatting.
* uppercase for event name
* Trace on/off event for ShortcutGuide module
* Trace the 'hide' event only if the guide was visible
'on_hide()' is invoked when the module is turned off, in that case don't trace the hide event.
* Remove spaces in data field names
Remove 'ShowGuide' event since it's not providing any useful data.
* Include build number in version number
the screen. Previously, it would iterate through the zones in the order
they were added and find the first one that fit the description. While
this works in most cases, if a user wants to have overlapping zones, it
is better to iterate through all of them and find the zone that the user
expects. There are cases where a zone is completely inaccessible on drag
because of the current code. To resolve this, the zone search will look
for the smallest zone possible. The reason I chose this solution is
because this guarantees that zones are at least reachable since if a
zone was bigger than another zone, then there must be a part of it
that is exposed, therefore reachable itself. Note: this solution is for
the scenario between two zones. More than that is not guaranteed. But I
feel like this covers enough scenarios to warrant its addition.
Example:
----------------
- Zone1 -
- ---------- -
- - Zone2 - -
- - - -
- ---------- -
----------------
Previously, zone2 was inaccessible since it would iterate through 1 then
2. But 1 would always be seen first when dragging a window. With this
fix it zone2 will be accessible.
Co-authored-by: Alexis Campailla <alexis@janeasystems.com>
Co-authored-by: Bret Anderson <bretan@microsoft.com>
Co-authored-by: Enrico Giordani <enrico.giordani@gmail.com>
Co-authored-by: Jaime Bernardo <jaime@janeasystems.com>
Co-authored-by: Jeff Bogdan <jeffbog@microsoft.com>
Co-authored-by: March Rogers <marchr@microsoft.com>
Co-authored-by: Mike Harsh <mharsh@microsoft.com>
Co-authored-by: Nachum Bundak <Nachum.Bundak@microsoft.com>
Co-authored-by: Oliver Jones <ojones@microsoft.com>
Co-authored-by: Patrick Little <plittle@microsoft.com>