From 4154b50204919f231cfbe1e4802add2337d56beb Mon Sep 17 00:00:00 2001 From: marcelm Date: Tue, 16 Jun 2026 12:09:03 +0300 Subject: [PATCH] edge-resistance: restore edge-resistance-window setting Reintroduces the edge-resistance-window gsettings/dconf key, removed in a previous refactor. When disabled, window edge resistance threshold is set to 0, allowing free dragging. Defaults to true to preserve current behavior. https://github.com/linuxmint/muffin/issues/657 --- data/org.cinnamon.muffin.gschema.xml.in | 11 +++++++++++ src/core/edge-resistance.c | 4 +++- src/core/prefs.c | 17 +++++++++++++++++ src/meta/prefs.h | 4 ++++ 4 files changed, 35 insertions(+), 1 deletion(-) diff --git a/data/org.cinnamon.muffin.gschema.xml.in b/data/org.cinnamon.muffin.gschema.xml.in index 88d7be2c7..c8814e8e0 100644 --- a/data/org.cinnamon.muffin.gschema.xml.in +++ b/data/org.cinnamon.muffin.gschema.xml.in @@ -43,6 +43,17 @@ + + true + Enable edge resistance between windows + + If enabled, windows resist movement when their edges approach the + edges of other windows. Disabling this allows windows to be dragged + freely past one another without any sticky edge effect. Resistance + against monitor and screen boundaries is not affected by this setting. + + + false Sets maximize as the tile action for the top edge of the screen diff --git a/src/core/edge-resistance.c b/src/core/edge-resistance.c index fc7c06602..ed7ca3f2b 100644 --- a/src/core/edge-resistance.c +++ b/src/core/edge-resistance.c @@ -27,6 +27,7 @@ #include "core/display-private.h" #include "core/meta-workspace-manager-private.h" #include "core/workspace-private.h" +#include "meta/prefs.h" /* A simple macro for whether a given window's edges are potentially * relevant for resistance/snapping during a move/resize operation @@ -341,7 +342,8 @@ apply_edge_resistance (MetaWindow *window, gboolean increasing = new_pos > old_pos; int increment = increasing ? 1 : -1; - const int PIXEL_DISTANCE_THRESHOLD_TOWARDS_WINDOW = 16; + const gboolean resist = meta_prefs_get_edge_resistance_window (); + const int PIXEL_DISTANCE_THRESHOLD_TOWARDS_WINDOW = resist ? 16 : 0; const int PIXEL_DISTANCE_THRESHOLD_AWAYFROM_WINDOW = 0; const int PIXEL_DISTANCE_THRESHOLD_TOWARDS_MONITOR = 32; const int PIXEL_DISTANCE_THRESHOLD_AWAYFROM_MONITOR = 0; diff --git a/src/core/prefs.c b/src/core/prefs.c index 6c697b2e4..1eda5d39f 100644 --- a/src/core/prefs.c +++ b/src/core/prefs.c @@ -123,6 +123,7 @@ static int draggable_border_width = 10; static int drag_threshold; static gboolean resize_with_right_button = FALSE; static gboolean edge_tiling = FALSE; +static gboolean edge_resistance_window = TRUE; static gboolean force_fullscreen = TRUE; static gboolean auto_maximize = TRUE; static gboolean show_fallback_app_menu = TRUE; @@ -415,6 +416,13 @@ static MetaBoolPreference preferences_bool[] = }, &edge_tiling, }, + { + { "edge-resistance-window", + SCHEMA_MUFFIN, + META_PREF_EDGE_RESISTANCE_WINDOW, + }, + &edge_resistance_window, + }, { { "workspaces-only-on-primary", SCHEMA_MUFFIN, @@ -1925,6 +1933,9 @@ meta_preference_to_string (MetaPreference pref) case META_PREF_EDGE_TILING: return "EDGE_TILING"; + case META_PREF_EDGE_RESISTANCE_WINDOW: + return "EDGE_RESISTANCE_WINDOW"; + case META_PREF_FORCE_FULLSCREEN: return "FORCE_FULLSCREEN"; @@ -2400,6 +2411,12 @@ meta_prefs_get_edge_tiling (void) return edge_tiling; } +gboolean +meta_prefs_get_edge_resistance_window (void) +{ + return edge_resistance_window; +} + gboolean meta_prefs_get_tile_maximize (void) { diff --git a/src/meta/prefs.h b/src/meta/prefs.h index 1179d530d..702c9bd9b 100644 --- a/src/meta/prefs.h +++ b/src/meta/prefs.h @@ -106,6 +106,7 @@ typedef enum META_PREF_CURSOR_SIZE, META_PREF_RESIZE_WITH_RIGHT_BUTTON, META_PREF_EDGE_TILING, + META_PREF_EDGE_RESISTANCE_WINDOW, META_PREF_FORCE_FULLSCREEN, META_PREF_WORKSPACES_ONLY_ON_PRIMARY, META_PREF_DRAGGABLE_BORDER_WIDTH, @@ -204,6 +205,9 @@ gboolean meta_prefs_get_gnome_animations (void); META_EXPORT gboolean meta_prefs_get_edge_tiling (void); +META_EXPORT +gboolean meta_prefs_get_edge_resistance_window (void); + META_EXPORT gboolean meta_prefs_get_tile_maximize (void);