From 4c2dba2e454896cbbe34ca13de23311b46f02438 Mon Sep 17 00:00:00 2001 From: SpeakingPNG Date: Wed, 4 Mar 2026 15:04:32 +0100 Subject: [PATCH] feat(bar): add a toggle for 1px exclusion zone --- Assets/settings-default.json | 1 + Assets/settings-search-index.json | 9 +++++++++ Commons/Settings.qml | 1 + Modules/MainScreen/BarExclusionZone.qml | 5 +++-- Modules/Panels/Settings/Tabs/Bar/AppearanceSubTab.qml | 9 +++++++++ 5 files changed, 23 insertions(+), 2 deletions(-) diff --git a/Assets/settings-default.json b/Assets/settings-default.json index 7a5658aac..7e0a9f676 100644 --- a/Assets/settings-default.json +++ b/Assets/settings-default.json @@ -15,6 +15,7 @@ "backgroundOpacity": 0.93, "useSeparateOpacity": false, "floating": false, + "exclusionZoneOffset": false, "marginVertical": 4, "marginHorizontal": 4, "frameThickness": 8, diff --git a/Assets/settings-search-index.json b/Assets/settings-search-index.json index 0880c2fc9..f4d91530d 100644 --- a/Assets/settings-search-index.json +++ b/Assets/settings-search-index.json @@ -251,6 +251,15 @@ "subTab": 0, "subTabLabel": "common.appearance" }, + { + "labelKey": "panels.bar.appearance-exclusion-zone-offset-label", + "descriptionKey": "panels.bar.appearance-exclusion-zone-offset-description", + "widget": "NToggle", + "tab": 4, + "tabLabel": "panels.bar.title", + "subTab": 0, + "subTabLabel": "common.appearance" + }, { "labelKey": "panels.bar.appearance-hide-on-overview-label", "descriptionKey": "panels.bar.appearance-hide-on-overview-description", diff --git a/Commons/Settings.qml b/Commons/Settings.qml index bc1554b36..d7e7010a4 100644 --- a/Commons/Settings.qml +++ b/Commons/Settings.qml @@ -184,6 +184,7 @@ Singleton { property int widgetSpacing: 6 property int contentPadding: 2 property real fontScale: 1.0 + property bool exclusionZoneOffset: false // Bar background opacity settings property real backgroundOpacity: 0.93 diff --git a/Modules/MainScreen/BarExclusionZone.qml b/Modules/MainScreen/BarExclusionZone.qml index 44bab77bc..263be07a8 100644 --- a/Modules/MainScreen/BarExclusionZone.qml +++ b/Modules/MainScreen/BarExclusionZone.qml @@ -23,8 +23,9 @@ PanelWindow { readonly property bool barFloating: Settings.data.bar.floating || false readonly property real barMarginH: (barFloating && edge === Settings.getBarPositionForScreen(screen?.name)) ? Math.ceil(Settings.data.bar.marginHorizontal) : 0 readonly property real barMarginV: (barFloating && edge === Settings.getBarPositionForScreen(screen?.name)) ? Math.ceil(Settings.data.bar.marginVertical) : 0 - // Reduce exclusion zone by 1 physical pixel so app windows blend flush against the bar edge - readonly property real bleedInset: 1.0 / (CompositorService.getDisplayScale(screen?.name) || 1.0) + // Allow users to adjust the exclusion zone if they need window borders to bleed under the bar + readonly property real bleedOffset: Settings.data.bar.exclusionZoneOffset ? 1.0 : 0.0 + readonly property real bleedInset: bleedOffset / (CompositorService.getDisplayScale(screen?.name) || 1.0) // Invisible - just reserves space color: "transparent" diff --git a/Modules/Panels/Settings/Tabs/Bar/AppearanceSubTab.qml b/Modules/Panels/Settings/Tabs/Bar/AppearanceSubTab.qml index 0482dea3c..b717477ae 100644 --- a/Modules/Panels/Settings/Tabs/Bar/AppearanceSubTab.qml +++ b/Modules/Panels/Settings/Tabs/Bar/AppearanceSubTab.qml @@ -226,6 +226,15 @@ ColumnLayout { text: Math.floor(Settings.data.bar.capsuleOpacity * 100) + "%" } + NToggle { + Layout.fillWidth: true + label: I18n.tr("panels.bar.appearance-exclusion-zone-offset-label") + description: I18n.tr("panels.bar.appearance-exclusion-zone-offset-description") + checked: Settings.data.bar.exclusionZoneOffset + defaultValue: Settings.getDefaultValue("bar.exclusionZoneOffset") + onToggled: checked => Settings.data.bar.exclusionZoneOffset = checked + } + NToggle { Layout.fillWidth: true visible: CompositorService.isNiri