From 445c3b60239c2604024753a4baaf1481e5ea8d2e Mon Sep 17 00:00:00 2001 From: Yocraft-2000 <304616174+Yocraft-2000@users.noreply.github.com> Date: Sat, 22 Aug 2026 02:10:58 +0200 Subject: [PATCH 1/4] feat: add default_maximize_to_edges window rule --- src/config/config.cpp | 1 + src/config/config.h | 3 +++ src/config/resolve.cpp | 5 ++++- src/view/view.cpp | 14 ++++++++++++-- 4 files changed, 20 insertions(+), 3 deletions(-) diff --git a/src/config/config.cpp b/src/config/config.cpp index 8a1edc6..7eab014 100644 --- a/src/config/config.cpp +++ b/src/config/config.cpp @@ -1031,6 +1031,7 @@ namespace umbriel { keys.boolean("default_floating", rule.defaultFloating) .boolean("default_fullscreen", rule.defaultFullscreen) + .boolean("default_maximize_to_edges", rule.defaultMaximizeToEdges) .boolean("default_maximize", rule.defaultMaximize) .boolean("default_focused", rule.defaultFocused) .boolean("default_pinned", rule.defaultPinned) diff --git a/src/config/config.h b/src/config/config.h index a3975bb..3ab6c24 100644 --- a/src/config/config.h +++ b/src/config/config.h @@ -144,6 +144,7 @@ namespace umbriel { std::optional defaultWidth; // column width fraction override std::optional defaultWorkspace; // 1-64 std::optional defaultFullscreen; + std::optional defaultMaximizeToEdges; std::optional defaultMaximize; std::optional defaultFocused; std::optional defaultPinned; @@ -167,6 +168,7 @@ namespace umbriel { && defaultWidth == other.defaultWidth && defaultWorkspace == other.defaultWorkspace && defaultFullscreen == other.defaultFullscreen + && defaultMaximizeToEdges == other.defaultMaximizeToEdges && defaultMaximize == other.defaultMaximize && defaultFocused == other.defaultFocused && defaultPinned == other.defaultPinned @@ -188,6 +190,7 @@ namespace umbriel { std::optional defaultWidth; std::optional defaultWorkspace; std::optional defaultFullscreen; + std::optional defaultMaximizeToEdges; std::optional defaultMaximize; std::optional defaultFocused; std::optional defaultPinned; diff --git a/src/config/resolve.cpp b/src/config/resolve.cpp index 7d1446a..66e45ec 100644 --- a/src/config/resolve.cpp +++ b/src/config/resolve.cpp @@ -141,7 +141,10 @@ namespace umbriel { resolved.defaultWorkspace = rule.defaultWorkspace; } if (rule.defaultFullscreen) { - resolved.defaultFullscreen = rule.defaultFullscreen; + resolved.defaultFullscreen = rule.defaultFullscreen; + } + if (rule.defaultMaximizeToEdges) { + resolved.defaultMaximizeToEdges = rule.defaultMaximizeToEdges; } if (rule.defaultMaximize) { resolved.defaultMaximize = rule.defaultMaximize; diff --git a/src/view/view.cpp b/src/view/view.cpp index 3f7cdde..38d8636 100644 --- a/src/view/view.cpp +++ b/src/view/view.cpp @@ -1454,7 +1454,11 @@ namespace umbriel { // Fullscreen after workspace + focus so the view lands in the right place. if (rule.defaultFullscreen && *rule.defaultFullscreen) { - setFullscreen(true); + setFullscreen(true); + } + + if (rule.defaultMaximizeToEdges && *rule.defaultMaximizeToEdges) { + setMaximizedToEdges(true); } if (Overview* overview = m_server->overview(); overview != nullptr && overview->active()) { @@ -2238,7 +2242,13 @@ namespace umbriel { if (changedInitialRule(rule.defaultFullscreen, initiallyApplied.defaultFullscreen) && *rule.defaultFullscreen && !m_toplevel->scheduled.fullscreen) { - setFullscreen(true); + setFullscreen(true); + } + + if (changedInitialRule(rule.defaultMaximizeToEdges, initiallyApplied.defaultMaximizeToEdges) + && *rule.defaultMaximizeToEdges + && !m_maximizedToEdges) { + setMaximizedToEdges(true); } if (changedInitialRule(rule.defaultMaximize, initiallyApplied.defaultMaximize) From b4e80df363719bec67f37bd9af54956d09a787ad Mon Sep 17 00:00:00 2001 From: Yocraft-2000 <304616174+Yocraft-2000@users.noreply.github.com> Date: Sat, 22 Aug 2026 02:28:01 +0200 Subject: [PATCH 2/4] docs: document default_maximize_to_edges window rule --- docs/user/rules.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/user/rules.md b/docs/user/rules.md index 13c40dd..ac2ff72 100644 --- a/docs/user/rules.md +++ b/docs/user/rules.md @@ -46,6 +46,7 @@ opening settings do not overwrite user changes made in the meantime. | `default_width` | float | Scrolling only. Column width fraction (0.1-1.0). Gap-aware: fractions that sum to 1 tile exactly. Overrides `layout.scrolling.default_width_fraction`. Dragging the column within or between scrolling workspaces retains its current width. Ignored in dwindle. | | `default_workspace` | int | Place on workspace N from 1 to 64. On dynamic outputs, values beyond the current count clamp to the last workspace. | | `default_fullscreen` | bool | Open in fullscreen. | +| `default_maximize_to_edges` | bool | Open maximized to edges, expanding the window to the usable area's edges, without gaps or borders. Layer-shell exclusive zones remain visible. | | `default_maximize` | bool | Open maximized. For tiled windows, Umbriel expands the column to full width without changing the layout when the client requests maximize. Floating windows fill the usable area. | | `default_focused` | bool | Take focus when opening on the active workspace. Defaults to `true`; set to `false` to preserve the existing focus. | | `default_pinned` | bool | Open pinned above regular windows and keep the window visible across workspace changes. Pinning makes a tiled window floating. | From 8132a0d69f14fc73e2e1329955d15c654f7b262a Mon Sep 17 00:00:00 2001 From: Yocraft-2000 <304616174+Yocraft-2000@users.noreply.github.com> Date: Sat, 22 Aug 2026 02:30:40 +0200 Subject: [PATCH 3/4] docs: update examples/config.toml --- examples/config.toml | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/examples/config.toml b/examples/config.toml index 70300c7..07ede18 100644 --- a/examples/config.toml +++ b/examples/config.toml @@ -227,6 +227,14 @@ follows_mouse = false # default_focused = false # default_pinned = true +# [[window_rule]] +# match.app_id = "^discord$" +# default_maximize_to_edges = true +# +# [[window_rule]] +# match.title = "^Discord Updater$" +# default_maximize_to_edges = false + [[window_rule]] match.app_id = "^dev.noctalia.Noctalia$" default_floating = true From 9723f362c233505cb9cdb567736dd3af33a3e70d Mon Sep 17 00:00:00 2001 From: Yocraft-2000 <304616174+Yocraft-2000@users.noreply.github.com> Date: Sat, 22 Aug 2026 02:37:40 +0200 Subject: [PATCH 4/4] fix: run just format --- src/config/resolve.cpp | 2 +- src/view/view.cpp | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/config/resolve.cpp b/src/config/resolve.cpp index 66e45ec..23c281a 100644 --- a/src/config/resolve.cpp +++ b/src/config/resolve.cpp @@ -141,7 +141,7 @@ namespace umbriel { resolved.defaultWorkspace = rule.defaultWorkspace; } if (rule.defaultFullscreen) { - resolved.defaultFullscreen = rule.defaultFullscreen; + resolved.defaultFullscreen = rule.defaultFullscreen; } if (rule.defaultMaximizeToEdges) { resolved.defaultMaximizeToEdges = rule.defaultMaximizeToEdges; diff --git a/src/view/view.cpp b/src/view/view.cpp index 38d8636..1e5b070 100644 --- a/src/view/view.cpp +++ b/src/view/view.cpp @@ -1454,7 +1454,7 @@ namespace umbriel { // Fullscreen after workspace + focus so the view lands in the right place. if (rule.defaultFullscreen && *rule.defaultFullscreen) { - setFullscreen(true); + setFullscreen(true); } if (rule.defaultMaximizeToEdges && *rule.defaultMaximizeToEdges) { @@ -2242,7 +2242,7 @@ namespace umbriel { if (changedInitialRule(rule.defaultFullscreen, initiallyApplied.defaultFullscreen) && *rule.defaultFullscreen && !m_toplevel->scheduled.fullscreen) { - setFullscreen(true); + setFullscreen(true); } if (changedInitialRule(rule.defaultMaximizeToEdges, initiallyApplied.defaultMaximizeToEdges)