diff --git a/Assets/Translations/en.json b/Assets/Translations/en.json index c98a1ed94..1711ec068 100644 --- a/Assets/Translations/en.json +++ b/Assets/Translations/en.json @@ -827,6 +827,8 @@ "appearance-density-label": "Bar density", "appearance-desc": "Customize the bar's appearance and position.", "appearance-display-mode-description": "Choose when the bar is visible.", + "appearance-enable-exclusion-zone-inset-description": "Reduce the exclusion zone by 1 physical pixel so flush windows bleed perfectly under the bar edge.", + "appearance-enable-exclusion-zone-inset-label": "Inset exclusion zone", "appearance-floating-description": "Display the bar as a floating 'pill'.", "appearance-floating-label": "Floating bar", "appearance-font-scale-description": "Adjust the font size scale for text displayed in the bar.", diff --git a/Assets/settings-default.json b/Assets/settings-default.json index de2d6c2a3..abff74737 100644 --- a/Assets/settings-default.json +++ b/Assets/settings-default.json @@ -15,6 +15,7 @@ "backgroundOpacity": 0.93, "useSeparateOpacity": false, "floating": false, + "enableExclusionZoneInset": true, "marginVertical": 4, "marginHorizontal": 4, "frameThickness": 8, diff --git a/Assets/settings-search-index.json b/Assets/settings-search-index.json index d9fd811d8..057cfcda9 100644 --- a/Assets/settings-search-index.json +++ b/Assets/settings-search-index.json @@ -260,6 +260,15 @@ "subTab": 0, "subTabLabel": "common.appearance" }, + { + "labelKey": "panels.bar.appearance-enable-exclusion-zone-inset-label", + "descriptionKey": "panels.bar.appearance-enable-exclusion-zone-inset-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 ae409a8f5..64e50a5c1 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 enableExclusionZoneInset: true // Bar background opacity settings property real backgroundOpacity: 0.93 diff --git a/Modules/MainScreen/BarExclusionZone.qml b/Modules/MainScreen/BarExclusionZone.qml index a8a44afb6..e9696e62e 100644 --- a/Modules/MainScreen/BarExclusionZone.qml +++ b/Modules/MainScreen/BarExclusionZone.qml @@ -23,11 +23,12 @@ 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 + // Allow users to enable a 1-physical-pixel inset for the exclusion zone so window borders can bleed under the bar + readonly property real bleedOffset: Settings.data.bar.enableExclusionZoneInset ? 1.0 : 0.0 readonly property real bleedInset: { const info = CompositorService.displayScales[screen?.name]; const scale = (info && info.scale) ? info.scale : 1.0; - return 1.0 / scale; + return bleedOffset / scale; } // Invisible - just reserves space diff --git a/Modules/Panels/Settings/Tabs/Bar/AppearanceSubTab.qml b/Modules/Panels/Settings/Tabs/Bar/AppearanceSubTab.qml index 5bc0ee8cc..1586f6935 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-enable-exclusion-zone-inset-label") + description: I18n.tr("panels.bar.appearance-enable-exclusion-zone-inset-description") + checked: Settings.data.bar.enableExclusionZoneInset + defaultValue: Settings.getDefaultValue("bar.enableExclusionZoneInset") + onToggled: checked => Settings.data.bar.enableExclusionZoneInset = checked + } + NToggle { Layout.fillWidth: true visible: CompositorService.isNiri