Skip to content

Releases: peddamat/PowerToys

Release v0.58.7-maxinzoneDll

11 Jun 08:42
Compare
Choose a tag to compare
Pre-release

Changes

  • Implemented temporary workaround causing Windows Explorer crashes.
  • Fixed quirky titlebars in Chrome and Brave (and potentially others).
  • Implemented temporary stability improvement by excluding hooking of 32-bit apps.
  • Improved overall stability.

Release v0.58.6-maxinzoneDll

09 Jun 23:19
Compare
Choose a tag to compare
Pre-release

EDIT: Please try the updated release here: https://github.com/peddamat/PowerToys/releases/tag/v0.58.7-maxinzoneDll

Notes
After a window has been added to a zone:

  • If it does not already fill the zone, triggering a maximize event (clicking the maximize button or double-clicking the titlebar) will resize it to fit the zone.

  • If the window already fills the zone, triggering a maximize event will convince the window that it is actually maximized (removing one-pixel border, changing maximize button to a restore button, etc).

    • Once in this state, "full screen" events will work, but occur within the zone region.
      Some applications, such as Chrome and Brave, have minor quirks in their titlebars in the fake maximized state.
  • Hold down Shift to override.

Changes

  • Fixed major memory leak.
  • Fixed titlebar styling issue when restoring a previously maximized window.

Release v0.58.5-maxinzoneDll

09 Jun 19:29
Compare
Choose a tag to compare
Pre-release

EDIT: Installer for this build was removed. Please use: https://github.com/peddamat/PowerToys/releases/tag/v0.58.6-maxinzoneDll

DLL-based reimplementation of "Maximize in Zone" feature.

Benefits include allowing applications to be "pinned" as actual full-screen windows, within a zone.

Release v0.58.3

30 May 10:13
Compare
Choose a tag to compare
Release v0.58.3 Pre-release
Pre-release

New Features

  • Refactored "Maximize In Zone" code, which overrides window maximize behavior to keep windows sized within the zone you placed them in
    • The behavior can be overridden by holding "Shift" while maximizing
    • See discussion here for further details
  • "Auto Zoning" all currently unzoned windows when starting/initializing PowerToys
  • "Auto Zoning" any new windows, which have never been previously zoned, to the currently active zone (zone under the mouse cursor)
  • "Auto Zoning" new child windows over their parent window, in conjunction with "last known zone", if their parent window is currently active
    • Detailed rationale for this feature here: fdf5597
  • UPDATE: Non-admin installer removed due to bugs.

Maximize In Zone Support

26 May 23:13
Compare
Choose a tag to compare
Pre-release

Outdated!

Please use latest release, here: v0.58.7


This implementation resizes any recently maximized window to fit the zone the cursor is currently in.

Holding down Shift "bypasses" this behavior and resizes the window to fit across all zones in the window's current workarea.

Implementation rationale, below.

  1. I initially tried hooking EVENT_OBJECT_STATECHANGE to detect keypresses on "Maximize" buttons, as directly hooking EVENT_OBJECT_LOCATIONCHANGE seemed expensive, but discovered some apps cough Chrome cough don't emit the event consistently, or at all. Therefore, I do indeed hook EVENT_OBJECT_LOCATIONCHANGE, but tried to be efficient.

  2. To reduce overhead, I initially implemented the event filtering logic in FancyZonesApp.cpp, but moved it to FancyZone.cpp, as that seemed more consistent with the codebase architecture.

  3. The reason I expand the window across all zones in the workarea, instead of simply bypassing the hook, is if the maximized window is completely unmanaged by FancyZones, any subsequent "EVENT_OBJECT_LOCATIONCHANGE" events emitted by the window cause FancyZones to belatedly, and seemingly spuriously, resize the window to whichever zone is under the user's cursor.

    • Additionally, my implementation keeps the window "un-maximized", preventing reentrancy, as we look for windows that pass the IsWindowMaximized() check.
    • Finally, I simply couldn't figure out how to add state to the window to keep track of whether the user wanted to bypass the maximize or not, but I like how the code feels now.