microsoft / microsoft/PowerToys

FancyZones: reliable mouse-driven maximize trigger for stacked multi-monitor setups (3 proposed approaches)

Open
#48,270 0 comments 1 reaction 0 assignees View on GitHub

Nobody has claimed this yet.

Needs-Triage Product-FancyZones
Dominant language
C
Stars
139k
Forks
8.6k
PR merge metrics
PR metrics pending

Description

### Description of the new feature / enhancement

Scope note: these proposals concern FancyZones / PowerToys, not native Aero Snap. I understand Windows' Aero Snap behavior cannot be modified by PowerToys; the goal is for FancyZones to provide an equivalent, since it already hooks window dragging and can override Windows snap hotkeys.
Root problem: the native maximize trigger (cursor against the top edge) becomes unusable as soon as a display is physically positioned above the primary display. The top edge stops being a hard stop and becomes a passage to the display above: the window crosses to the other monitor instead of maximizing.
I propose three independent approaches to restore a mouse-driven maximize trigger that is robust regardless of physical arrangement:

Proposal 1 — Assignable "Maximize" action per zone
Add a per-zone property, in the layout editor, defining the action performed when a window is released into the zone: "Fill zone" (current, default) or "Maximize window" on the current monitor (true maximized state, equivalent to Win + Up Arrow), independent of the zone's size. A "Maximize" zone can therefore be visually small while still maximizing any window dropped into it.

Proposal 2 — Reassignable maximize edge, per monitor
Allow choosing, per monitor, which edge triggers maximize during a window drag (top by default, but also bottom / left / right). The user can thus assign the trigger to an edge that is actually free (no adjacent monitor), and therefore reliable. Example: if a display sits above but the right edge is free, set the trigger to the right edge.

Proposal 3 — Freely segmented edge: user-defined boundary and pass-through portions
Allow splitting a screen edge into configurable segments, each with a distinct behavior during a window drag, even when another monitor is adjacent to that edge. The user defines the number of segments, their position along the edge, and their width — it is not limited to a left/right split or to fixed proportions. Each segment is set either to "boundary" (triggers maximize when a window is pushed into it) or to "pass-through" (lets the window cross normally to the adjacent monitor). Example on the top edge of the primary display: a boundary segment placed wherever desired (center, a corner, an arbitrary portion) triggers maximize, while the rest of the edge lets windows cross to the display above. Key point: this only applies while dragging a window; with a free cursor and no window, the entire edge remains pass-through to the neighboring monitor. Resulting behavior: push the window up into a boundary segment → it maximizes; push it up into a pass-through segment → it crosses to the display above.

The three proposals are mutually compatible and do not affect existing layouts (default behaviors = current behaviors).

### Scenario when this would be used?

Multi-monitor setups where a monitor is physically positioned above the primary monitor (or more generally, where the edge normally used to maximize is flush against another monitor). In this layout, the "slam the window against the top edge to maximize" gesture fails: the window crosses to the display above.
Concrete use case: a primary display with a second display placed directly above it. The user wants to keep a mouse-driven maximize gesture (grab the window, push it, it maximizes) without that gesture sending the window to the upper display. Additionally, a narrow column zone on the side, set to "Fill zone", to stack terminals without them going fullscreen.

### Supporting information

Aero Snap hard-codes the top edge as the maximize trigger, with no native option to move it, reassign it, or turn it into a boundary against an adjacent monitor. FancyZones is therefore the only available lever on the PowerToys side.
FancyZones already hooks window dragging and already offers "Override Windows Snap hotkeys", which makes these behaviors plausible within its existing scope.
The intended maximize is the standard window maximize (true maximized state), not a resize to a zone's bounds.
Proposals 2 and 3 are two solutions to the same problem: 2 moves the trigger to a free edge; 3 keeps the usual edge but turns a user-defined portion of it into a boundary while the rest stays pass-through.
Depending on implementation effort, either one is sufficient.

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start by examining FancyZones' existing window-drag handling and its Override Windows Snap hotkeys behavior. Compare the three proposed approaches against the current maximize and pass-through behavior, then define which approach can preserve existing layouts while providing a reliable mouse-driven maximize trigger on stacked monitors.

Written by the indexing model from the issue text.

Assessment

Tech stack
c
Domain
desktop, operating-systems
Issue type
Feature
Difficulty
5/5
Estimated time
Over a week
Activity status
Quiet
Clarity
Mostly clear
Newbie friendliness
35/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.