diff --git a/quickshell/Common/SettingsData.qml b/quickshell/Common/SettingsData.qml index 080a1249d..3bc78977f 100644 --- a/quickshell/Common/SettingsData.qml +++ b/quickshell/Common/SettingsData.qml @@ -423,19 +423,9 @@ Singleton { _reconcileConnectedFrameBarStyles(); } - function _frameBarConfig() { - return barConfigs.find(bc => bc.enabled !== false && !isIslandBarConfig(bc)); - } - - readonly property real frameSurfaceOpacity: { - barConfigs; - return barTransparency(_frameBarConfig()); - } - - readonly property color frameSurfaceBase: { - barConfigs; - return barSurfaceColor(_frameBarConfig()); - } + readonly property var frameBarConfig: barConfigs.find(bc => bc.enabled !== false && !isIslandBarConfig(bc)) ?? null + readonly property real frameSurfaceOpacity: barTransparency(frameBarConfig) + readonly property color frameSurfaceBase: barSurfaceColor(frameBarConfig) property string systemTrayIconTintMode: Spec.SPEC.systemTrayIconTintMode.def property int systemTrayIconTintSaturation: Spec.SPEC.systemTrayIconTintSaturation.def diff --git a/quickshell/Modules/Frame/FrameWindow.qml b/quickshell/Modules/Frame/FrameWindow.qml index c4548c624..f59becbaa 100644 --- a/quickshell/Modules/Frame/FrameWindow.qml +++ b/quickshell/Modules/Frame/FrameWindow.qml @@ -1036,9 +1036,6 @@ PanelWindow { function onFrameBarSizeChanged() { win._scheduleBlurRebuild(); } - function onFrameOpacityChanged() { - win._scheduleBlurRebuild(); - } function onFrameRoundingChanged() { win._scheduleBlurRebuild(); } diff --git a/quickshell/Modules/Settings/ColorDropdownRow.qml b/quickshell/Modules/Settings/ColorDropdownRow.qml index a3d92fa6b..64a541b81 100644 --- a/quickshell/Modules/Settings/ColorDropdownRow.qml +++ b/quickshell/Modules/Settings/ColorDropdownRow.qml @@ -48,7 +48,10 @@ Column { property alias resetStore: modeRow.resetStore property alias resetKeys: modeRow.resetKeys + property alias modified: modeRow.modified + property alias resetByKeys: modeRow.resetByKeys + signal resetRequested signal modeSelected(string mode) signal customColorSelected(color selectedColor) @@ -88,6 +91,7 @@ Column { SettingsDropdownRow { id: modeRow groupItem: root + onResetRequested: root.resetRequested() text: root.text description: root.description tab: root.tab diff --git a/quickshell/Modules/Settings/DBarAppearanceTab.qml b/quickshell/Modules/Settings/DBarAppearanceTab.qml index 6d0efd6bf..d3aa0dc66 100644 --- a/quickshell/Modules/Settings/DBarAppearanceTab.qml +++ b/quickshell/Modules/Settings/DBarAppearanceTab.qml @@ -22,6 +22,14 @@ Item { readonly property bool selectedIslandFree: bar.selectedBarIsIsland && SettingsData.islandFreePlacement(bar.selectedBarConfig) readonly property bool selectedIslandNotch: bar.selectedBarIsIsland && !root.selectedIslandFree && bar.islandSetting("islandNotch") readonly property int frameInsetPaddingDisplay: Math.round(SettingsData.frameBarContentGap) + readonly property var frameBar: SettingsData.frameBarConfig + readonly property bool frameBarOverridden: frameBar?.followInterfaceStyle === false + + function updateFrameBar(updates) { + if (!frameBar) + return; + SettingsData.updateBarConfig(frameBar.id, updates); + } BarSelectionState { id: bar @@ -52,7 +60,7 @@ Item { SettingsSliderRow { settingKey: "frameThickness" tags: ["frame", "border", "thickness", "size", "width"] - text: I18n.tr("Width") + text: I18n.tr("Thickness") unit: "px" minimum: 2 maximum: 100 @@ -77,10 +85,11 @@ Item { settingKey: "frameBarInsetPadding" tags: ["frame", "bar", "edge", "inset", "padding", "corner", "end"] text: I18n.tr("Bar inset padding") + description: I18n.tr("Gap between the bar ends and the outermost widgets", "bar inset padding slider description") minimumLabel: I18n.tr("Edge to edge", "slider minimum label, bar touches the screen edges") unit: "px" minimum: 0 - maximum: 48 + maximum: 100 step: 1 value: root.frameInsetPaddingDisplay onSliderDragFinished: v => SettingsData.set("frameBarInsetPadding", v) @@ -97,35 +106,62 @@ Item { visible: BlurService.available } - SettingsRow { + SettingsControlledBy { visible: BlurService.available && !SettingsData.blurEnabled - body: Item { - width: parent.width - height: blurToggleNote.height + Theme.spacingM * 2 + target: "surfaces" + parentModal: root.parentModal + section: "blurEnabled" + settingLabel: I18n.tr("Background blur") + } - Row { - id: blurToggleNote - x: Theme.spacingM - width: parent.width - Theme.spacingM * 2 - anchors.verticalCenter: parent.verticalCenter - spacing: Theme.spacingS + SurfaceColorRow { + settingKey: "frameSurfaceColor" + tags: ["frame", "background", "color", "surface"] + visible: !!root.frameBar + text: I18n.tr("Background") + defaultColor: Theme.hostSurface + currentMode: root.frameBar?.surfaceColor ?? "default" + customColor: root.frameBar?.surfaceCustomColor ?? SettingsData.barConfigDefault("surfaceCustomColor") + pickerTitle: I18n.tr("Background") + modified: (root.frameBar?.surfaceColor ?? "default") !== "default" + resetByKeys: false + onResetRequested: root.updateFrameBar({ + surfaceColor: "default", + surfaceCustomColor: SettingsData.barConfigDefault("surfaceCustomColor") + }) + onModeSelected: mode => root.updateFrameBar({ + surfaceColor: mode + }) + onCustomColorSelected: selectedColor => root.updateFrameBar({ + surfaceCustomColor: selectedColor.toString() + }) + } - DIcon { - name: "blur_on" - size: Theme.fontSizeMedium - color: Theme.primary - anchors.verticalCenter: parent.verticalCenter - } - - StyledText { - text: I18n.tr("Frame Blur follows Background Blur in Theme & Colors") - font.pixelSize: Theme.fontSizeSmall - color: Theme.surfaceVariantText - wrapMode: Text.WordWrap - width: parent.width - Theme.fontSizeMedium - Theme.spacingS - } - } - } + SettingsToggleSliderRow { + settingKey: "frameSurfaceOpacity" + tags: ["frame", "opacity", "transparency", "override", "interface", "style"] + visible: !!root.frameBar + text: I18n.tr("Opacity") + description: I18n.tr("Override") + checked: root.frameBarOverridden + value: Math.round((root.frameBar?.transparency ?? 1) * 100) + minimum: 0 + maximum: 100 + modified: root.frameBarOverridden + valueModified: (root.frameBar?.transparency ?? 1) !== 1 + onResetRequested: root.updateFrameBar({ + followInterfaceStyle: true, + transparency: 1 + }) + onValueResetRequested: root.updateFrameBar({ + transparency: 1 + }) + onToggled: checked => root.updateFrameBar({ + followInterfaceStyle: !checked + }) + onSliderDragFinished: finalValue => root.updateFrameBar({ + transparency: finalValue / 100 + }) } } @@ -244,6 +280,14 @@ Item { section: "barShadow" settingLabel: I18n.tr("Shadow", "bar shadow settings card") } + + SettingsControlledBy { + visible: bar.selectedBarFrameSanitized && !bar.selectedBarFrameStyled && !bar.islandOwnsSelectedBarTop + parentModal: root.parentModal + section: "frameBorder" + settingLabel: [I18n.tr("Corner style"), I18n.tr("Border", "noun, settings toggle card title for an outline around a surface"), I18n.tr("Shadow", "bar shadow settings card")].join(" · ") + reason: I18n.tr("Disabled by Frame Mode") + } } SettingsToggleCard { @@ -322,7 +366,6 @@ Item { SettingsSliderRow { settingKey: "barSize" tags: ["size", "thickness", "height", "inner"] - visible: !bar.selectedBarFrameStyled text: I18n.tr("Size") resetStore: bar resetKeys: ["innerPadding"] diff --git a/quickshell/Modules/Settings/DBarTab.qml b/quickshell/Modules/Settings/DBarTab.qml index 09bc5db24..eaaf6c480 100644 --- a/quickshell/Modules/Settings/DBarTab.qml +++ b/quickshell/Modules/Settings/DBarTab.qml @@ -604,7 +604,7 @@ Item { SettingsToggleRow { settingKey: "barUseOverlayLayer" tags: ["bar", "fullscreen", "overlay", "layer"] - visible: !bar.islandOwnsSelectedBarTop + visible: !bar.islandOwnsSelectedBarTop && !(bar.selectedBarFrameStyled && !SettingsData.connectedFrameModeActive) text: I18n.tr("Use overlay layer") checked: bar.selectedBarConfig?.useOverlayLayer ?? false onToggled: toggled => { @@ -618,16 +618,24 @@ Item { SettingsToggleRow { settingKey: "islandUseOverlayLayer" tags: ["island", "fullscreen", "overlay", "layer"] - visible: bar.selectedBarIsIsland + visible: bar.selectedBarIsIsland && !bar.selectedBarFrameStyled text: I18n.tr("Use overlay layer") checked: bar.islandSetting("islandUseOverlayLayer") onToggled: checked => bar.apply("islandUseOverlayLayer", checked) } + SettingsControlledBy { + visible: bar.selectedBarFrameStyled && (bar.selectedBarIsIsland || (!bar.islandOwnsSelectedBarTop && !SettingsData.connectedFrameModeActive)) + parentModal: dankBarTab.parentModal + section: "frameBorder" + settingLabel: I18n.tr("Use overlay layer") + reason: I18n.tr("Disabled by Frame Mode") + } + SettingsToggleRow { settingKey: "barMaximizeDetection" tags: ["maximize", "gaps", "border", "fullscreen"] - visible: CompositorService.supportsBarAutoHideReveal + visible: CompositorService.supportsBarAutoHideReveal && !bar.selectedBarFrameStyled text: I18n.tr("Maximize detection") description: I18n.tr("Drops bar gaps and rounding while a window is maximized", "bar maximize detection toggle description") checked: bar.selectedBarConfig?.maximizeDetection ?? true @@ -636,6 +644,14 @@ Item { }) } + SettingsControlledBy { + visible: CompositorService.supportsBarAutoHideReveal && bar.selectedBarFrameStyled + parentModal: dankBarTab.parentModal + section: "frameBorder" + settingLabel: I18n.tr("Maximize detection") + reason: I18n.tr("Disabled by Frame Mode") + } + SettingsSliderRow { settingKey: "barExclusiveZone" tags: ["exclusive", "zone", "reserved", "offset"] @@ -657,7 +673,7 @@ Item { text: I18n.tr("Auto popup gaps") description: I18n.tr("Gap between the bar and its popouts follows edge spacing", "bar auto popup gaps toggle description") tags: ["popup", "gaps", "auto"] - visible: !bar.popupGapsZeroed + visible: !dankBarTab.popupGapsZeroed checked: bar.selectedBarConfig?.popupGapsAuto ?? true onToggled: checked => SettingsData.updateBarConfig(bar.selectedBarId, { popupGapsAuto: checked @@ -665,7 +681,7 @@ Item { } SettingsSliderRow { - visible: !bar.popupGapsZeroed && !(bar.selectedBarConfig?.popupGapsAuto ?? true) + visible: !dankBarTab.popupGapsZeroed && !(bar.selectedBarConfig?.popupGapsAuto ?? true) text: I18n.tr("Gap size") tags: ["popup", "gaps", "size"] resetStore: bar diff --git a/quickshell/Modules/Settings/DockAdvancedTab.qml b/quickshell/Modules/Settings/DockAdvancedTab.qml index de4071501..4a5923f57 100644 --- a/quickshell/Modules/Settings/DockAdvancedTab.qml +++ b/quickshell/Modules/Settings/DockAdvancedTab.qml @@ -1,4 +1,5 @@ import QtQuick +import Quickshell import qs.Common import qs.Services import qs.Modules.Settings.Widgets @@ -34,7 +35,7 @@ Item { tags: ["dock", "fullscreen", "overlay", "show", "visibility"] text: I18n.tr("Over fullscreen") description: I18n.tr("Keeps the dock showing over fullscreen windows", "dock over fullscreen toggle description") - enabled: dock.config?.useOverlayLayer ?? false + enabled: (dock.config?.useOverlayLayer ?? false) || Quickshell.screens.some(screen => CompositorService.framePeerSurfacesUseOverlayForScreen(screen) && SettingsData.dockConfigsForScreen(screen).some(config => config.id === dock.config?.id)) checked: dock.config?.showOnFullscreen ?? false onToggled: checked => dock.setOption("showOnFullscreen", checked) } diff --git a/quickshell/Modules/Settings/LauncherTab.qml b/quickshell/Modules/Settings/LauncherTab.qml index 0ff3733b7..734009b15 100644 --- a/quickshell/Modules/Settings/LauncherTab.qml +++ b/quickshell/Modules/Settings/LauncherTab.qml @@ -14,6 +14,9 @@ Item { readonly property bool keybindsAvailable: KeybindsService.available readonly property string defaultLauncherKeybindSearch: "spotlight toggle" readonly property string spotlightBarKeybindSearch: "spotlight-bar" + readonly property bool spotlightIgnoresRows: SettingsData.launcherStyle === "spotlight" && !SettingsData.connectedFrameModeActive + // The niri overview launcher still uses size and footer when it is set to the full style. + readonly property bool spotlightIgnoresSize: spotlightIgnoresRows && !(CompositorService.isNiri && SettingsData.niriOverviewOverlayEnabled && SettingsData.niriOverviewLauncherStyle !== "spotlight") readonly property var builtInPluginIds: ["dms_settings", "dms_notepad", "dms_sysmon", "dms_colorpicker", "dms_settings_search", "dms_clipboard_search", "dms_power", "dms_vpn", "dms_qr_generator"] function openKeybindsSearch(query) { @@ -141,6 +144,7 @@ Item { SettingsButtonGroupRow { readonly property var sizes: ["micro", "compact", "medium", "large"] + enabled: !root.spotlightIgnoresSize settingKey: "dankLauncherV2Size" tags: ["launcher", "size", "micro", "compact", "medium", "large"] text: I18n.tr("Size") @@ -172,7 +176,7 @@ Item { tags: ["launcher", "footer", "hints", "shortcuts", "modes", "filters"] text: I18n.tr("Show footer") checked: SettingsData.dankLauncherV2ShowFooter - enabled: SettingsData.dankLauncherV2Size !== "micro" + enabled: SettingsData.dankLauncherV2Size !== "micro" && !root.spotlightIgnoresSize onToggled: checked => SettingsData.set("dankLauncherV2ShowFooter", checked) } @@ -202,8 +206,18 @@ Item { } } + SettingsControlledBy { + visible: SettingsData.connectedFrameModeActive && !SettingsData.launcherUseOverlayLayer + parentModal: root.parentModal + section: "frameBorder" + settingLabel: I18n.tr("Border") + reason: I18n.tr("Managed by Frame in Connected Mode") + } + SettingsToggleCard { width: parent.width + visible: !SettingsData.connectedFrameModeActive || SettingsData.launcherUseOverlayLayer + enabled: !root.spotlightIgnoresRows iconName: "border_style" title: I18n.tr("Border") settingKey: "dankLauncherV2BorderEnabled" @@ -841,6 +855,7 @@ Item { } SettingsToggleRow { + enabled: !root.spotlightIgnoresRows settingKey: "dankLauncherV2UnloadOnClose" tags: ["launcher", "unload", "close", "memory", "vram"] text: I18n.tr("Unload on close") diff --git a/quickshell/Modules/Settings/NotificationsTab.qml b/quickshell/Modules/Settings/NotificationsTab.qml index 672e577b9..9aba6fae9 100644 --- a/quickshell/Modules/Settings/NotificationsTab.qml +++ b/quickshell/Modules/Settings/NotificationsTab.qml @@ -1,4 +1,5 @@ import QtQuick +import Quickshell import qs.Common import qs.Services import qs.DCommon.Widgets @@ -9,6 +10,8 @@ Column { property var parentModal: null + readonly property bool frameForcesOverlay: Quickshell.screens.length > 0 && Quickshell.screens.every(screen => CompositorService.frameWindowVisibleForScreen(screen)) + width: parent?.width ?? 0 spacing: Theme.spacingL @@ -161,7 +164,8 @@ Column { settingKey: "notificationOverlayEnabled" tags: ["notification", "overlay", "fullscreen", "priority"] text: I18n.tr("Over fullscreen") - checked: SettingsData.notificationOverlayEnabled + enabled: !root.frameForcesOverlay + checked: root.frameForcesOverlay || SettingsData.notificationOverlayEnabled onToggled: checked => SettingsData.set("notificationOverlayEnabled", checked) } diff --git a/quickshell/Modules/Settings/ShadowsTab.qml b/quickshell/Modules/Settings/ShadowsTab.qml index bd3e6bef8..a9458992e 100644 --- a/quickshell/Modules/Settings/ShadowsTab.qml +++ b/quickshell/Modules/Settings/ShadowsTab.qml @@ -225,6 +225,7 @@ Item { readonly property var bars: SettingsData.barConfigs.filter(config => !SettingsData.isIslandBarConfig(config)) readonly property bool shadowActive: (bar.selectedBarConfig?.shadowIntensity ?? 0) > 0 + readonly property bool editable: shadowActive && !bar.selectedBarFrameSanitized readonly property bool isCustomColor: (bar.selectedBarConfig?.shadowColorMode ?? "default") === "custom" readonly property string directionSource: bar.selectedBarConfig?.shadowDirectionMode ?? "inherit" @@ -236,9 +237,18 @@ Item { onValueChanged: value => bar.select(shadowCard.bars.find(config => (config.name || config.id) === value)?.id ?? bar.selectedBarId) } + SettingsControlledBy { + visible: bar.selectedBarFrameSanitized + parentModal: root.parentModal + section: "frameBorder" + settingLabel: I18n.tr("Bar") + reason: I18n.tr("Disabled by Frame Mode") + } + SettingsToggleRow { tags: ["shadow", "override", "custom"] text: I18n.tr("Override") + enabled: !bar.selectedBarFrameSanitized checked: shadowCard.shadowActive onToggled: checked => { if (checked) { @@ -255,7 +265,7 @@ Item { } SettingsSliderRow { - enabled: shadowCard.shadowActive + enabled: shadowCard.editable tags: ["shadow", "blur", "radius"] text: I18n.tr("Intensity", "shadow intensity slider") minimum: 0 @@ -268,7 +278,7 @@ Item { } SettingsSliderRow { - enabled: shadowCard.shadowActive + enabled: shadowCard.editable text: I18n.tr("Opacity") resetStore: bar resetKeys: ["shadowOpacity"] @@ -281,7 +291,7 @@ Item { } SettingsDropdownRow { - enabled: shadowCard.shadowActive + enabled: shadowCard.editable text: I18n.tr("Direction source", "bar shadow direction source") settingKey: "barShadowDirectionSource" resetStore: bar @@ -314,7 +324,7 @@ Item { } SettingsDropdownRow { - enabled: shadowCard.shadowActive + enabled: shadowCard.editable visible: shadowCard.directionSource === "manual" text: I18n.tr("Direction", "bar manual shadow direction") settingKey: "barShadowDirectionManual" @@ -353,7 +363,7 @@ Item { } ColorDropdownRow { - enabled: shadowCard.shadowActive + enabled: shadowCard.editable tags: ["shadow", "color", "custom"] settingKey: "barShadowColor" resetStore: bar diff --git a/quickshell/Modules/Settings/ThemeSurfacesTab.qml b/quickshell/Modules/Settings/ThemeSurfacesTab.qml index ded0d824f..529c27b25 100644 --- a/quickshell/Modules/Settings/ThemeSurfacesTab.qml +++ b/quickshell/Modules/Settings/ThemeSurfacesTab.qml @@ -35,6 +35,7 @@ Column { readonly property var opacityTargets: { SettingsData.barConfigs; SettingsData.dockConfigs; + const frameBarId = SettingsData.frameEnabled ? SettingsData.frameBarConfig?.id : undefined; const bars = SettingsData.barConfigs.filter(config => !SettingsData.isDotBarConfig(config)).map(config => ({ key: "bar:" + config.id, kind: "bar", @@ -42,7 +43,8 @@ Column { name: config.name || config.id, enabled: config.enabled !== false, override: config.followInterfaceStyle === false, - transparency: config.transparency ?? 1 + transparency: config.transparency ?? 1, + frame: config.id === frameBarId })); const docks = SettingsData.dockConfigs.map(config => ({ key: "dock:" + config.id, @@ -51,7 +53,8 @@ Column { name: config.name, enabled: config.enabled !== false, override: config.followInterfaceStyle === false, - transparency: config.transparency ?? 1 + transparency: config.transparency ?? 1, + overlay: config.useOverlayLayer ?? false })); return bars.concat(docks); } @@ -185,6 +188,14 @@ Column { } } + SettingsControlledBy { + visible: SettingsData.connectedFrameModeActive && root.borderEnabled + parentModal: root.parentModal + section: "frameBorder" + settingLabel: I18n.tr("Border") + reason: I18n.tr("Managed by Frame in Connected Mode") + } + SettingsToggleSliderRow { tab: "theme" tags: ["blur", "background", "transparency", "glass", "frosted", "strength", "radius", "size", "passes", "reach"] @@ -334,6 +345,14 @@ Column { settingKey: modelData.settingKey visible: targets.length > 0 + SettingsControlledBy { + visible: targetCard.modelData.kind === "dock" && SettingsData.connectedFrameModeActive && targetCard.activeTargets.some(target => !target.overlay) + parentModal: root.parentModal + section: "frameSurfaceOpacity" + settingLabel: I18n.tr("Opacity") + reason: I18n.tr("Managed by Frame in Connected Mode") + } + Repeater { model: targetCard.activeKeys ? targetCard.activeKeys.split("\n") : [] delegate: opacityTargetRow @@ -448,7 +467,7 @@ Column { tags: ["surface", "opacity", "transparency", "bar", "dock", "override"] settingKey: "surfaceOpacity_" + modelData.replace(":", "_") text: target?.name ?? "" - description: I18n.tr("Override") + description: target?.frame ? I18n.tr("Frame") + " · " + I18n.tr("Override") : I18n.tr("Override") checked: target?.override ?? false value: Math.round((target?.transparency ?? 1) * 100) minimum: 0 diff --git a/quickshell/Modules/Settings/Widgets/DockSelectionState.qml b/quickshell/Modules/Settings/Widgets/DockSelectionState.qml index a58144005..88da873db 100644 --- a/quickshell/Modules/Settings/Widgets/DockSelectionState.qml +++ b/quickshell/Modules/Settings/Widgets/DockSelectionState.qml @@ -90,7 +90,7 @@ Item { return I18n.tr("Top", "screen edge position"); } - readonly property bool connectedFrameModeActive: SettingsData.connectedFrameModeActive + readonly property bool connectedFrameModeActive: SettingsData.connectedFrameModeActive && !(config?.useOverlayLayer ?? false) readonly property bool connectedPersistentDock: connectedFrameModeActive && (config?.enabled ?? false) && !(config?.autoHide ?? false) && !(config?.smartAutoHide ?? false) // An auto-hiding dock never reserves screen space, so its exclusive zone has nothing to offset. readonly property bool reservesSpace: !!config && !config.autoHide && !config.smartAutoHide && (!connectedFrameModeActive || connectedPersistentDock) diff --git a/quickshell/translations/settings_search_index.json b/quickshell/translations/settings_search_index.json index 3769807c4..ad4626156 100644 --- a/quickshell/translations/settings_search_index.json +++ b/quickshell/translations/settings_search_index.json @@ -4814,6 +4814,26 @@ ], "parentLabel": "Bar" }, + { + "section": "frameSurfaceColor", + "label": "Background", + "tabIndex": 6, + "category": "Appearance", + "keywords": [ + "appearance", + "background", + "bar", + "color", + "frame", + "panel", + "statusbar", + "surface", + "taskbar", + "topbar" + ], + "parentLabel": "Bar", + "conditionKey": "frameEnabled" + }, { "section": "islandSatelliteBackground", "label": "Background", @@ -4888,18 +4908,25 @@ "keywords": [ "appearance", "bar", + "between", + "components", "corner", "edge", "end", + "ends", "frame", "inset", + "modules", + "outermost", "padding", "panel", "statusbar", "taskbar", - "topbar" + "topbar", + "widgets" ], "parentLabel": "Bar", + "description": "Gap between the bar ends and the outermost widgets", "conditionKey": "frameEnabled" }, { @@ -5192,18 +5219,25 @@ "keywords": [ "appearance", "bar", + "between", "border", + "components", "corner", + "ends", "frame", + "modules", + "outermost", "panel", "radius", "rounding", "statusbar", "taskbar", - "topbar" + "topbar", + "widgets" ], "parentLabel": "Bar", "icon": "border_outer", + "description": "Gap between the bar ends and the outermost widgets", "conditionKey": "frameEnabled" }, { @@ -5440,6 +5474,29 @@ ], "parentLabel": "Bar" }, + { + "section": "frameSurfaceOpacity", + "label": "Opacity", + "tabIndex": 6, + "category": "Appearance", + "keywords": [ + "appearance", + "bar", + "frame", + "interface", + "opacity", + "override", + "panel", + "statusbar", + "style", + "taskbar", + "topbar", + "transparency" + ], + "parentLabel": "Bar", + "description": "Override", + "conditionKey": "frameEnabled" + }, { "section": "islandSatelliteTransparency", "label": "Override", @@ -5760,6 +5817,27 @@ ], "parentLabel": "Bar" }, + { + "section": "frameThickness", + "label": "Thickness", + "tabIndex": 6, + "category": "Appearance", + "keywords": [ + "appearance", + "bar", + "border", + "frame", + "panel", + "size", + "statusbar", + "taskbar", + "thickness", + "topbar", + "width" + ], + "parentLabel": "Bar", + "conditionKey": "frameEnabled" + }, { "section": "islandHomeVolumeDisplay", "label": "Volume style", @@ -5883,27 +5961,6 @@ "icon": "widgets", "description": "Opacity" }, - { - "section": "frameThickness", - "label": "Width", - "tabIndex": 6, - "category": "Appearance", - "keywords": [ - "appearance", - "bar", - "border", - "frame", - "panel", - "size", - "statusbar", - "taskbar", - "thickness", - "topbar", - "width" - ], - "parentLabel": "Bar", - "conditionKey": "frameEnabled" - }, { "section": "networkStatus", "label": "Status",