From a64bd80cc925146c687ca6f8612d81f2d15cc755 Mon Sep 17 00:00:00 2001 From: bbedward Date: Mon, 20 Jul 2026 18:00:56 -0400 Subject: [PATCH] window-rules/niri: make floating a tri-state (cherry picked from commit 814871d9820a6ff9811707d279127e2140e09c36) --- .../windowrules/providers/niri_parser.go | 4 ++-- quickshell/Modals/WindowRuleModal.qml | 18 +++++++++++++++++- 2 files changed, 19 insertions(+), 3 deletions(-) diff --git a/core/internal/windowrules/providers/niri_parser.go b/core/internal/windowrules/providers/niri_parser.go index 6c7423f85..8f949fbd8 100644 --- a/core/internal/windowrules/providers/niri_parser.go +++ b/core/internal/windowrules/providers/niri_parser.go @@ -928,8 +928,8 @@ func (p *NiriWritableProvider) formatRule(rule windowrules.WindowRule) string { if a.Opacity != nil { lines = append(lines, fmt.Sprintf(" opacity %.2f", *a.Opacity)) } - if a.OpenFloating != nil && *a.OpenFloating { - lines = append(lines, " open-floating true") + if a.OpenFloating != nil { + lines = append(lines, fmt.Sprintf(" open-floating %t", *a.OpenFloating)) } if a.OpenMaximized != nil && *a.OpenMaximized { lines = append(lines, " open-maximized true") diff --git a/quickshell/Modals/WindowRuleModal.qml b/quickshell/Modals/WindowRuleModal.qml index 765e3c81c..75716d89c 100644 --- a/quickshell/Modals/WindowRuleModal.qml +++ b/quickshell/Modals/WindowRuleModal.qml @@ -52,6 +52,7 @@ FloatingWindow { condInitialised.triState = 0; opacityEnabled.checked = false; opacitySlider.value = 100; + floatingCond.triState = 0; floatingToggle.checked = false; maximizedToggle.checked = false; maximizedToEdgesToggle.checked = false; @@ -164,6 +165,7 @@ FloatingWindow { opacityEnabled.checked = hasOpacity; opacitySlider.value = hasOpacity ? Math.round(actions.opacity * 100) : 100; + floatingCond.triState = triFromBool(actions.openFloating); floatingToggle.checked = actions.openFloating || false; maximizedToggle.checked = actions.openMaximized || false; maximizedToEdgesToggle.checked = actions.openMaximizedToEdges || false; @@ -318,7 +320,9 @@ FloatingWindow { if (opacityEnabled.checked) actions.opacity = opacitySlider.value / 100; - if (floatingToggle.checked) + if (isNiri) + applyCond(actions, "openFloating", floatingCond.triState); + else if (floatingToggle.checked) actions.openFloating = true; if (maximizedToggle.checked) actions.openMaximized = true; @@ -943,6 +947,17 @@ FloatingWindow { title: I18n.tr("Window Opening") } + Flow { + width: parent.width + spacing: Theme.spacingS + visible: isNiri + + MatchCond { + id: floatingCond + label: I18n.tr("Float") + } + } + Flow { width: parent.width spacing: Theme.spacingL @@ -950,6 +965,7 @@ FloatingWindow { CheckboxRow { id: floatingToggle label: I18n.tr("Float") + visible: !isNiri } CheckboxRow { id: maximizedToggle