Skip to content

Make Shift-driven legacy window snapping configurable #863

Description

@jonarihen

Distribution

Linux Mint Cinnamon 6.6.9 on X11

Package version

Muffin 6.6.3+zena

Graphics hardware in use

Not graphics-driver-specific; reproduced while moving ordinary application
windows on X11.

Frequency

Always

Problem

Muffin uses the physical Shift modifier as a hard-coded command to enable
legacy window snapping / edge resistance during a window move. This conflicts
with applications and Cinnamon extensions that intentionally use Shift as a
drag modifier. One example is FancyTiles, whose users may choose Shift to
match Windows FancyZones behaviour.

Setting org.cinnamon.muffin edge-tiling to false does not disable this
Shift-controlled behaviour. The interaction therefore remains active at
screen and monitor boundaries even when native edge tiling is disabled.

The behaviour comes from the two update_move() calls in
src/core/window.c, which receive CLUTTER_SHIFT_MASK during move events and
on completing the grab.

Steps to reproduce

  1. Disable Cinnamon edge tiling:
    gsettings set org.cinnamon.muffin edge-tiling false.
  2. Start moving a normal window with the mouse.
  3. Hold Left Shift while moving the window near screen or monitor edges.
  4. Observe Muffin's native Shift-driven edge resistance / snap behaviour.

With FancyTiles configured to use Shift, this occurs at the same time as the
extension is trying to display and apply its own zones, so the window movement
is visibly constrained or jumps to a native target.

Expected behaviour

Provide a Muffin preference to disable or rebind Shift-driven legacy snapping.
The existing behavior can remain the default, but users who use Shift for
another drag workflow should be able to opt out without rebuilding Muffin.

Additional information

This is related to, but not solved by, #657 and PR #828: those concern
window-to-window edge resistance only. This request covers the physical Shift
trigger and screen/monitor edge behaviour.

FancyTiles has an independent report of the user-facing conflict:
BasGeertsema/fancytiles#38

I verified a local proof-of-concept which suppresses the Shift flag in both
move paths. It is intentionally not proposed as a global default because that
would remove existing legacy snapping for everyone. The patch and rebuild
notes are available here:
https://github.com/jonarihen/muffin-shift-snap-fix

Activity

  1. jonarihen commented on Sep 19, 2026

    @jonarihen
    Author

    I prepared a small opt-in implementation for discussion:

    https://github.com/jonarihen/muffin-shift-snap-fix/tree/proposal/configurable-legacy-window-snap

    It adds org.cinnamon.muffin legacy-window-snap, defaulting to true, so
    current Shift-based legacy snapping remains unchanged. Setting it to false
    suppresses Shift-driven snapping only while moving windows; it does not change
    resizing or normal edge tiling.

    The patch is based on Muffin 6.6.3 and was validated with a full Meson build
    (720 targets) and an isolated GSettings schema check (default true, accepts
    false, reset restores true). This is a code sketch for review rather than a
    request to remove the existing behavior globally; naming or scope can be
    adjusted if there is a preferred Muffin convention.

  2. mtwebster commented on Sep 19, 2026

    @mtwebster
    Member

    I wouldn't mind getting rid of this 'feature' entirely - it's unpredictable at best, and most users never find out about it except accidentally.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions