diff --git a/quickshell/Common/SettingsData.qml b/quickshell/Common/SettingsData.qml index b8cbcbb7..788c20d8 100644 --- a/quickshell/Common/SettingsData.qml +++ b/quickshell/Common/SettingsData.qml @@ -1591,8 +1591,8 @@ Singleton { const spacing = barSpacing !== undefined ? barSpacing : (defaultBar?.spacing ?? 4); const position = barPosition !== undefined ? barPosition : (defaultBar?.position ?? SettingsData.Position.Top); const rawBottomGap = barConfig ? (barConfig.bottomGap !== undefined ? barConfig.bottomGap : (defaultBar?.bottomGap ?? 0)) : (defaultBar?.bottomGap ?? 0); - const bottomGap = Math.max(0, rawBottomGap); const isConnected = frameEnabled && motionEffect === 1 && directionalAnimationMode === 3; + const bottomGap = isConnected ? 0 : Math.max(0, rawBottomGap); const useAutoGaps = (barConfig && barConfig.popupGapsAuto !== undefined) ? barConfig.popupGapsAuto : (defaultBar?.popupGapsAuto ?? true); const manualGapValue = (barConfig && barConfig.popupGapsManual !== undefined) ? barConfig.popupGapsManual : (defaultBar?.popupGapsManual ?? 4); @@ -1715,7 +1715,9 @@ Singleton { const screenWidth = screen.width; const screenHeight = screen.height; const position = barPosition !== undefined ? barPosition : (defaultBar?.position ?? SettingsData.Position.Top); - const bottomGap = barConfig ? (barConfig.bottomGap !== undefined ? barConfig.bottomGap : (defaultBar?.bottomGap ?? 0)) : (defaultBar?.bottomGap ?? 0); + const isConnected = frameEnabled && motionEffect === 1 && directionalAnimationMode === 3; + const rawBottomGap = barConfig ? (barConfig.bottomGap !== undefined ? barConfig.bottomGap : (defaultBar?.bottomGap ?? 0)) : (defaultBar?.bottomGap ?? 0); + const bottomGap = isConnected ? 0 : rawBottomGap; let topOffset = 0; let bottomOffset = 0; @@ -1737,7 +1739,7 @@ Singleton { const otherSpacing = other.spacing !== undefined ? other.spacing : (defaultBar?.spacing ?? 4); const otherPadding = other.innerPadding !== undefined ? other.innerPadding : (defaultBar?.innerPadding ?? 4); const otherThickness = Math.max(26 + otherPadding * 0.6, Theme.barHeight - 4 - (8 - otherPadding)) + otherSpacing + wingSize; - const otherBottomGap = other.bottomGap !== undefined ? other.bottomGap : (defaultBar?.bottomGap ?? 0); + const otherBottomGap = isConnected ? 0 : (other.bottomGap !== undefined ? other.bottomGap : (defaultBar?.bottomGap ?? 0)); switch (other.position) { case SettingsData.Position.Top: diff --git a/quickshell/Common/Theme.qml b/quickshell/Common/Theme.qml index 32fcd7ac..cbbacc85 100644 --- a/quickshell/Common/Theme.qml +++ b/quickshell/Common/Theme.qml @@ -1162,6 +1162,8 @@ Singleton { property real popupTransparency: { if (typeof SettingsData === "undefined") return 1.0; + if (isConnectedEffect) + return SettingsData.frameOpacity !== undefined ? SettingsData.frameOpacity : 1.0; return SettingsData.popupTransparency !== undefined ? SettingsData.popupTransparency : 1.0; } diff --git a/quickshell/Modules/DankBar/DankBarWindow.qml b/quickshell/Modules/DankBar/DankBarWindow.qml index a835e9f2..a7f5b621 100644 --- a/quickshell/Modules/DankBar/DankBarWindow.qml +++ b/quickshell/Modules/DankBar/DankBarWindow.qml @@ -661,7 +661,7 @@ PanelWindow { anchors.left: !isVertical ? true : (barPos === SettingsData.Position.Left) anchors.right: !isVertical ? true : (barPos === SettingsData.Position.Right) - exclusiveZone: (!(barConfig?.visible ?? true) || topBarCore.autoHide) ? -1 : (barWindow.effectiveBarThickness + effectiveSpacing + (barConfig?.bottomGap ?? 0)) + exclusiveZone: (!(barConfig?.visible ?? true) || topBarCore.autoHide) ? -1 : (barWindow.effectiveBarThickness + effectiveSpacing + (Theme.isConnectedEffect ? 0 : (barConfig?.bottomGap ?? 0))) Item { id: inputMask diff --git a/quickshell/Modules/Settings/FrameTab.qml b/quickshell/Modules/Settings/FrameTab.qml index 597ad6be..4fcb7e74 100644 --- a/quickshell/Modules/Settings/FrameTab.qml +++ b/quickshell/Modules/Settings/FrameTab.qml @@ -115,8 +115,9 @@ Item { SettingsSliderRow { id: opacitySlider settingKey: "frameOpacity" - tags: ["frame", "border", "opacity", "transparency"] - text: I18n.tr("Frame Opacity") + tags: ["frame", "border", "surface", "popup", "opacity", "transparency"] + text: I18n.tr("Surface Opacity") + description: I18n.tr("Frame border opacity. Controls all surface opacity globally when Connected Mode is active") unit: "%" minimum: 0 maximum: 100 diff --git a/quickshell/Modules/Settings/ThemeColorsTab.qml b/quickshell/Modules/Settings/ThemeColorsTab.qml index 2b9a5c5f..1aac93bf 100644 --- a/quickshell/Modules/Settings/ThemeColorsTab.qml +++ b/quickshell/Modules/Settings/ThemeColorsTab.qml @@ -1618,11 +1618,11 @@ Item { SettingsSliderRow { tab: "theme" - tags: ["popup", "transparency", "opacity", "modal"] + tags: ["surface", "popup", "transparency", "opacity", "modal"] settingKey: "popupTransparency" - text: I18n.tr("Popup Transparency") + text: I18n.tr("Surface Opacity") description: themeColorsTab.connectedFrameModeActive - ? I18n.tr("Connected Frame mode follows Frame Opacity for connected popouts, docks, and modal surfaces") + ? I18n.tr("Connected Frame mode follows Surface Opacity from the Frame tab for connected popouts, docks, and modal surfaces") : I18n.tr("Controls opacity of all popouts, modals, and their content layers") enabled: !themeColorsTab.connectedFrameModeActive opacity: themeColorsTab.connectedFrameModeActive ? 0.5 : 1.0 diff --git a/quickshell/translations/settings_search_index.json b/quickshell/translations/settings_search_index.json index 50dbdb41..14d872bc 100644 --- a/quickshell/translations/settings_search_index.json +++ b/quickshell/translations/settings_search_index.json @@ -3400,7 +3400,7 @@ }, { "section": "popupTransparency", - "label": "Popup Transparency", + "label": "Surface Opacity", "tabIndex": 10, "category": "Theme & Colors", "keywords": [ @@ -3418,6 +3418,7 @@ "popup", "scheme", "style", + "surface", "their", "theme", "translucent",