mirror of
https://github.com/AvengeMedia/DankMaterialShell.git
synced 2026-06-15 23:55:21 -04:00
Compare commits
5 Commits
820fa07846
...
3701b3d7a3
| Author | SHA1 | Date | |
|---|---|---|---|
| 3701b3d7a3 | |||
| bae98daa5c | |||
| b34a04f723 | |||
| 1c0245f2db | |||
| 7777e87dc8 |
+2
-19
@@ -64,27 +64,15 @@ Item {
|
||||
}
|
||||
}
|
||||
|
||||
property bool wallpaperSurfacesLoaded: true
|
||||
|
||||
Loader {
|
||||
id: blurredWallpaperBackgroundLoader
|
||||
active: root.wallpaperSurfacesLoaded && SettingsData.blurredWallpaperLayer && CompositorService.isNiri
|
||||
active: SettingsData.blurredWallpaperLayer && CompositorService.isNiri
|
||||
asynchronous: false
|
||||
|
||||
sourceComponent: BlurredWallpaperBackground {}
|
||||
}
|
||||
|
||||
DeferredAction {
|
||||
id: wallpaperSurfaceReloadAction
|
||||
onTriggered: root.wallpaperSurfacesLoaded = true
|
||||
}
|
||||
|
||||
Loader {
|
||||
id: wallpaperBackgroundLoader
|
||||
active: root.wallpaperSurfacesLoaded
|
||||
asynchronous: false
|
||||
sourceComponent: WallpaperBackground {}
|
||||
}
|
||||
WallpaperBackground {}
|
||||
|
||||
DesktopWidgetLayer {}
|
||||
|
||||
@@ -398,11 +386,6 @@ Item {
|
||||
frameSurfaceReloadAction.schedule();
|
||||
}
|
||||
|
||||
if (root.wallpaperSurfacesLoaded) {
|
||||
root.wallpaperSurfacesLoaded = false;
|
||||
wallpaperSurfaceReloadAction.schedule();
|
||||
}
|
||||
|
||||
root.dockEnabled = false;
|
||||
Qt.callLater(() => {
|
||||
root.dockEnabled = true;
|
||||
|
||||
@@ -28,7 +28,7 @@ Rectangle {
|
||||
readonly property bool showPinAction: visibleEntryActions.includes("pin")
|
||||
readonly property bool showEditAction: visibleEntryActions.includes("edit")
|
||||
readonly property bool showDeleteAction: visibleEntryActions.includes("delete")
|
||||
readonly property bool showPinnedIndicator: !showPinAction && effectivePinned
|
||||
readonly property bool showPinnedIndicator: hasPinnedDuplicate && !showPinAction
|
||||
readonly property bool showAnyAction: showPinAction || showEditAction || showDeleteAction || showPinnedIndicator
|
||||
|
||||
radius: Theme.cornerRadius
|
||||
@@ -72,20 +72,17 @@ Rectangle {
|
||||
spacing: Theme.spacingXS
|
||||
visible: root.showAnyAction
|
||||
|
||||
DankActionButton {
|
||||
iconName: "push_pin"
|
||||
iconSize: Theme.iconSize - 6
|
||||
iconColor: Theme.primary
|
||||
backgroundColor: Theme.primarySelected
|
||||
Item {
|
||||
width: 40
|
||||
height: 40
|
||||
visible: root.showPinnedIndicator
|
||||
onClicked: {
|
||||
if (entry.pinned) {
|
||||
unpinRequested(entry);
|
||||
return;
|
||||
}
|
||||
if (pinnedDuplicateEntry) {
|
||||
unpinRequested(pinnedDuplicateEntry);
|
||||
}
|
||||
|
||||
// Status indicator only; the Pin action remains hidden.
|
||||
DankIcon {
|
||||
anchors.centerIn: parent
|
||||
name: "push_pin"
|
||||
size: Theme.iconSize - 6
|
||||
color: Theme.primary
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -105,8 +105,8 @@ Rectangle {
|
||||
},
|
||||
{
|
||||
"id": "compositor_layout",
|
||||
"text": CompositorService.isNiri ? "niri" : (CompositorService.isHyprland ? "Hyprland" : "MangoWC"),
|
||||
"icon": "crop_square",
|
||||
"text": CompositorService.isNiri ? "Niri" : (CompositorService.isHyprland ? "Hyprland" : "MangoWC"),
|
||||
"icon": "layers",
|
||||
"tabIndex": 37,
|
||||
"layoutCapable": true
|
||||
}
|
||||
@@ -117,18 +117,18 @@ Rectangle {
|
||||
"text": I18n.tr("Dank Bar"),
|
||||
"icon": "toolbar",
|
||||
"children": [
|
||||
{
|
||||
"id": "dankbar_settings",
|
||||
"text": I18n.tr("Settings"),
|
||||
"icon": "tune",
|
||||
"tabIndex": 3
|
||||
},
|
||||
{
|
||||
"id": "dankbar_appearance",
|
||||
"text": I18n.tr("Appearance"),
|
||||
"icon": "palette",
|
||||
"tabIndex": 6
|
||||
},
|
||||
{
|
||||
"id": "dankbar_settings",
|
||||
"text": I18n.tr("Settings"),
|
||||
"icon": "tune",
|
||||
"tabIndex": 3
|
||||
},
|
||||
{
|
||||
"id": "dankbar_widgets",
|
||||
"text": I18n.tr("Widgets"),
|
||||
|
||||
@@ -7,6 +7,7 @@ import qs.Widgets
|
||||
import qs.Services
|
||||
|
||||
Variants {
|
||||
readonly property var log: Log.scoped("BlurredWallpaperBackground")
|
||||
model: {
|
||||
if (SessionData.isGreeterMode) {
|
||||
return Quickshell.screens;
|
||||
@@ -32,6 +33,8 @@ Variants {
|
||||
|
||||
color: "transparent"
|
||||
|
||||
updatesEnabled: root.renderActive || root._settleFrames > 0
|
||||
|
||||
mask: Region {
|
||||
item: Item {}
|
||||
}
|
||||
@@ -85,7 +88,6 @@ Variants {
|
||||
}
|
||||
|
||||
Component.onCompleted: {
|
||||
blurWallpaperWindow.updatesEnabled = Qt.binding(() => !root.source || root.effectActive || root._renderSettling || currentWallpaper.status === Image.Loading || nextWallpaper.status === Image.Loading);
|
||||
isInitialized = true;
|
||||
}
|
||||
|
||||
@@ -93,51 +95,67 @@ Variants {
|
||||
property real transitionProgress: 0
|
||||
readonly property bool transitioning: transitionAnimation.running
|
||||
property bool effectActive: false
|
||||
property bool _renderSettling: true
|
||||
property bool useNextForEffect: false
|
||||
readonly property var backingWindow: Window.window
|
||||
readonly property bool renderActive: !source || effectActive || currentWallpaper.status === Image.Loading || nextWallpaper.status === Image.Loading
|
||||
property int _settleFrames: 3
|
||||
|
||||
Connections {
|
||||
target: currentWallpaper
|
||||
function onStatusChanged() {
|
||||
if (currentWallpaper.status !== Image.Ready && currentWallpaper.status !== Image.Error)
|
||||
return;
|
||||
root._renderSettling = true;
|
||||
renderSettleTimer.restart();
|
||||
}
|
||||
function invalidate() {
|
||||
_settleFrames = 3;
|
||||
backingWindow?.update();
|
||||
}
|
||||
|
||||
onRenderActiveChanged: invalidate()
|
||||
onBackingWindowChanged: invalidate()
|
||||
|
||||
Connections {
|
||||
target: blurWallpaperWindow
|
||||
target: root.backingWindow
|
||||
function onFrameSwapped() {
|
||||
if (root._settleFrames > 0)
|
||||
root._settleFrames--;
|
||||
}
|
||||
function onVisibleChanged() {
|
||||
root.invalidate();
|
||||
}
|
||||
function onWidthChanged() {
|
||||
root._renderSettling = true;
|
||||
renderSettleTimer.restart();
|
||||
root.invalidate();
|
||||
}
|
||||
function onHeightChanged() {
|
||||
root._renderSettling = true;
|
||||
renderSettleTimer.restart();
|
||||
root.invalidate();
|
||||
}
|
||||
}
|
||||
|
||||
Connections {
|
||||
target: Quickshell
|
||||
function onScreensChanged() {
|
||||
root._renderSettling = true;
|
||||
renderSettleTimer.restart();
|
||||
root.invalidate();
|
||||
}
|
||||
}
|
||||
|
||||
Connections {
|
||||
target: SettingsData
|
||||
function onWallpaperFillModeChanged() {
|
||||
root._renderSettling = true;
|
||||
renderSettleTimer.restart();
|
||||
root.invalidate();
|
||||
}
|
||||
}
|
||||
|
||||
Timer {
|
||||
id: renderSettleTimer
|
||||
interval: 1000
|
||||
onTriggered: root._renderSettling = false
|
||||
Connections {
|
||||
target: IdleService
|
||||
function onIsShellLockedChanged() {
|
||||
if (IdleService.isShellLocked)
|
||||
return;
|
||||
root.invalidate();
|
||||
}
|
||||
}
|
||||
|
||||
function handleTransitionLoadError(failedSource) {
|
||||
log.warn("failed to load candidate wallpaper for", modelData.name + ":", failedSource);
|
||||
transitionDelayTimer.stop();
|
||||
transitionAnimation.stop();
|
||||
root.useNextForEffect = false;
|
||||
root.effectActive = false;
|
||||
root.transitionProgress = 0.0;
|
||||
nextWallpaper.source = "";
|
||||
}
|
||||
|
||||
onSourceChanged: {
|
||||
@@ -164,8 +182,6 @@ Variants {
|
||||
transitionAnimation.stop();
|
||||
root.transitionProgress = 0.0;
|
||||
root.effectActive = false;
|
||||
root._renderSettling = true;
|
||||
renderSettleTimer.restart();
|
||||
currentWallpaper.source = newSource;
|
||||
nextWallpaper.source = "";
|
||||
}
|
||||
@@ -194,8 +210,6 @@ Variants {
|
||||
transitionAnimation.stop();
|
||||
root.transitionProgress = 0;
|
||||
root.effectActive = false;
|
||||
root._renderSettling = true;
|
||||
renderSettleTimer.restart();
|
||||
currentWallpaper.source = nextWallpaper.source;
|
||||
nextWallpaper.source = "";
|
||||
}
|
||||
@@ -204,9 +218,6 @@ Variants {
|
||||
return;
|
||||
}
|
||||
|
||||
root._renderSettling = true;
|
||||
renderSettleTimer.restart();
|
||||
|
||||
nextWallpaper.source = newPath;
|
||||
|
||||
if (nextWallpaper.status === Image.Ready)
|
||||
@@ -215,7 +226,7 @@ Variants {
|
||||
|
||||
Loader {
|
||||
anchors.fill: parent
|
||||
active: !root.source || root.isColorSource
|
||||
active: !root.source || root.isColorSource || currentWallpaper.status === Image.Error
|
||||
asynchronous: true
|
||||
|
||||
sourceComponent: DankBackdrop {
|
||||
@@ -238,6 +249,12 @@ Variants {
|
||||
cache: true
|
||||
sourceSize: Qt.size(root.textureWidth, root.textureHeight)
|
||||
fillMode: root.getFillMode(SessionData.isGreeterMode ? GreetdSettings.wallpaperFillMode : SessionData.getMonitorWallpaperFillMode(modelData.name))
|
||||
|
||||
onStatusChanged: {
|
||||
if (status === Image.Error) {
|
||||
log.warn("failed to load active wallpaper for", modelData.name + ":", source);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Image {
|
||||
@@ -253,6 +270,10 @@ Variants {
|
||||
fillMode: root.getFillMode(SessionData.isGreeterMode ? GreetdSettings.wallpaperFillMode : SessionData.getMonitorWallpaperFillMode(modelData.name))
|
||||
|
||||
onStatusChanged: {
|
||||
if (status === Image.Error) {
|
||||
root.handleTransitionLoadError(source);
|
||||
return;
|
||||
}
|
||||
if (status !== Image.Ready)
|
||||
return;
|
||||
if (!root.transitioning) {
|
||||
@@ -329,8 +350,6 @@ Variants {
|
||||
root.useNextForEffect = false;
|
||||
nextWallpaper.source = "";
|
||||
root.transitionProgress = 0.0;
|
||||
root._renderSettling = true;
|
||||
renderSettleTimer.restart();
|
||||
root.effectActive = false;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -23,9 +23,9 @@ Item {
|
||||
SettingsCard {
|
||||
width: parent.width
|
||||
tags: ["niri", "layout", "gaps", "radius", "window", "border"]
|
||||
title: I18n.tr("Niri Layout Overrides").replace("Niri", "niri")
|
||||
title: I18n.tr("Niri Layout Overrides")
|
||||
settingKey: "niriLayout"
|
||||
iconName: "crop_square"
|
||||
iconName: "layers"
|
||||
visible: CompositorService.isNiri
|
||||
|
||||
SettingsToggleRow {
|
||||
|
||||
@@ -796,18 +796,81 @@ Item {
|
||||
}
|
||||
}
|
||||
|
||||
SettingsCard {
|
||||
tab: "appearance"
|
||||
iconName: "opacity"
|
||||
title: I18n.tr("Opacity")
|
||||
settingKey: "barTransparency"
|
||||
visible: dankBarTab.appearanceOnly && selectedBarConfig?.enabled
|
||||
|
||||
SettingsSliderRow {
|
||||
id: barTransparencySlider
|
||||
visible: !SettingsData.frameEnabled
|
||||
text: I18n.tr("Bar Opacity")
|
||||
description: I18n.tr("Controls opacity of the bar background")
|
||||
value: (selectedBarConfig?.transparency ?? 1.0) * 100
|
||||
minimum: 0
|
||||
maximum: 100
|
||||
unit: "%"
|
||||
defaultValue: 100
|
||||
onSliderDragFinished: finalValue => {
|
||||
SettingsData.updateBarConfig(selectedBarId, {
|
||||
transparency: finalValue / 100
|
||||
});
|
||||
}
|
||||
|
||||
Binding {
|
||||
target: barTransparencySlider
|
||||
property: "value"
|
||||
value: (selectedBarConfig?.transparency ?? 1.0) * 100
|
||||
restoreMode: Binding.RestoreBinding
|
||||
}
|
||||
}
|
||||
|
||||
SettingsSliderRow {
|
||||
id: widgetTransparencySlider
|
||||
text: I18n.tr("Widget Opacity")
|
||||
description: I18n.tr("Controls opacity of widget backgrounds")
|
||||
value: (selectedBarConfig?.widgetTransparency ?? 1.0) * 100
|
||||
minimum: 0
|
||||
maximum: 100
|
||||
unit: "%"
|
||||
defaultValue: 100
|
||||
onSliderDragFinished: finalValue => {
|
||||
SettingsData.updateBarConfig(selectedBarId, {
|
||||
widgetTransparency: finalValue / 100
|
||||
});
|
||||
}
|
||||
|
||||
Binding {
|
||||
target: widgetTransparencySlider
|
||||
property: "value"
|
||||
value: (selectedBarConfig?.widgetTransparency ?? 1.0) * 100
|
||||
restoreMode: Binding.RestoreBinding
|
||||
}
|
||||
}
|
||||
|
||||
SettingsControlledByFrame {
|
||||
visible: SettingsData.frameEnabled
|
||||
parentModal: dankBarTab.parentModal
|
||||
settingLabel: I18n.tr("Bar Opacity")
|
||||
reason: I18n.tr("Managed by Frame")
|
||||
}
|
||||
}
|
||||
|
||||
SettingsControlledByFrame {
|
||||
visible: !dankBarTab.appearanceOnly && SettingsData.frameEnabled
|
||||
visible: dankBarTab.appearanceOnly && SettingsData.frameEnabled
|
||||
parentModal: dankBarTab.parentModal
|
||||
settingLabel: I18n.tr("Bar spacing and size")
|
||||
reason: I18n.tr("Managed by Frame")
|
||||
}
|
||||
|
||||
SettingsCard {
|
||||
tab: "appearance"
|
||||
iconName: "space_bar"
|
||||
title: I18n.tr("Spacing")
|
||||
settingKey: "barSpacing"
|
||||
visible: !dankBarTab.appearanceOnly && (selectedBarConfig?.enabled ?? false) && !SettingsData.frameEnabled
|
||||
visible: dankBarTab.appearanceOnly && (selectedBarConfig?.enabled ?? false) && !SettingsData.frameEnabled
|
||||
|
||||
SettingsSliderRow {
|
||||
id: edgeSpacingSlider
|
||||
@@ -956,68 +1019,6 @@ Item {
|
||||
}
|
||||
}
|
||||
|
||||
SettingsCard {
|
||||
tab: "appearance"
|
||||
iconName: "opacity"
|
||||
title: I18n.tr("Transparency")
|
||||
settingKey: "barTransparency"
|
||||
visible: dankBarTab.appearanceOnly && selectedBarConfig?.enabled
|
||||
|
||||
SettingsSliderRow {
|
||||
id: barTransparencySlider
|
||||
visible: !SettingsData.frameEnabled
|
||||
text: I18n.tr("Bar Transparency")
|
||||
description: I18n.tr("Opacity of the bar background")
|
||||
value: (selectedBarConfig?.transparency ?? 1.0) * 100
|
||||
minimum: 0
|
||||
maximum: 100
|
||||
unit: "%"
|
||||
defaultValue: 100
|
||||
onSliderDragFinished: finalValue => {
|
||||
SettingsData.updateBarConfig(selectedBarId, {
|
||||
transparency: finalValue / 100
|
||||
});
|
||||
}
|
||||
|
||||
Binding {
|
||||
target: barTransparencySlider
|
||||
property: "value"
|
||||
value: (selectedBarConfig?.transparency ?? 1.0) * 100
|
||||
restoreMode: Binding.RestoreBinding
|
||||
}
|
||||
}
|
||||
|
||||
SettingsSliderRow {
|
||||
id: widgetTransparencySlider
|
||||
text: I18n.tr("Widget Transparency")
|
||||
description: I18n.tr("Opacity of widget backgrounds")
|
||||
value: (selectedBarConfig?.widgetTransparency ?? 1.0) * 100
|
||||
minimum: 0
|
||||
maximum: 100
|
||||
unit: "%"
|
||||
defaultValue: 100
|
||||
onSliderDragFinished: finalValue => {
|
||||
SettingsData.updateBarConfig(selectedBarId, {
|
||||
widgetTransparency: finalValue / 100
|
||||
});
|
||||
}
|
||||
|
||||
Binding {
|
||||
target: widgetTransparencySlider
|
||||
property: "value"
|
||||
value: (selectedBarConfig?.widgetTransparency ?? 1.0) * 100
|
||||
restoreMode: Binding.RestoreBinding
|
||||
}
|
||||
}
|
||||
|
||||
SettingsControlledByFrame {
|
||||
visible: SettingsData.frameEnabled
|
||||
parentModal: dankBarTab.parentModal
|
||||
settingLabel: I18n.tr("Bar Transparency")
|
||||
reason: I18n.tr("Managed by Frame")
|
||||
}
|
||||
}
|
||||
|
||||
SettingsSliderCard {
|
||||
id: fontScaleSliderCard
|
||||
tab: "appearance"
|
||||
@@ -1358,7 +1359,7 @@ Item {
|
||||
SettingsSliderRow {
|
||||
id: borderOpacitySlider
|
||||
text: I18n.tr("Opacity")
|
||||
description: I18n.tr("Transparency of the border")
|
||||
description: I18n.tr("Controls opacity of the border")
|
||||
value: (selectedBarConfig?.borderOpacity ?? 1.0) * 100
|
||||
minimum: 0
|
||||
maximum: 100
|
||||
@@ -1453,7 +1454,7 @@ Item {
|
||||
SettingsSliderRow {
|
||||
id: widgetOutlineOpacitySlider
|
||||
text: I18n.tr("Opacity")
|
||||
description: I18n.tr("Transparency of the widget outline")
|
||||
description: I18n.tr("Controls opacity of the widget outline")
|
||||
value: (selectedBarConfig?.widgetOutlineOpacity ?? 1.0) * 100
|
||||
minimum: 0
|
||||
maximum: 100
|
||||
@@ -1562,7 +1563,7 @@ Item {
|
||||
SettingsSliderRow {
|
||||
visible: shadowCard.shadowActive
|
||||
text: I18n.tr("Opacity")
|
||||
description: I18n.tr("Transparency of the shadow layer")
|
||||
description: I18n.tr("Controls opacity of the shadow layer")
|
||||
minimum: 10
|
||||
maximum: 100
|
||||
unit: "%"
|
||||
|
||||
@@ -643,19 +643,19 @@ Item {
|
||||
SettingsControlledByFrame {
|
||||
visible: root.connectedFrameModeActive
|
||||
parentModal: root.parentModal
|
||||
settingLabel: I18n.tr("Dock margin, transparency, and border")
|
||||
settingLabel: I18n.tr("Dock margin, opacity, and border")
|
||||
reason: I18n.tr("Managed by Frame in Connected Mode")
|
||||
}
|
||||
|
||||
SettingsCard {
|
||||
width: parent.width
|
||||
iconName: "opacity"
|
||||
title: I18n.tr("Transparency")
|
||||
title: I18n.tr("Opacity")
|
||||
settingKey: "dockTransparency"
|
||||
visible: !root.connectedFrameModeActive
|
||||
|
||||
SettingsSliderRow {
|
||||
text: I18n.tr("Dock Transparency")
|
||||
text: I18n.tr("Dock Opacity")
|
||||
value: Math.round(SettingsData.dockTransparency * 100)
|
||||
minimum: 0
|
||||
maximum: 100
|
||||
|
||||
@@ -1639,7 +1639,7 @@ Item {
|
||||
SettingsControlledByFrame {
|
||||
visible: themeColorsTab.connectedFrameModeActive
|
||||
parentModal: themeColorsTab.parentModal
|
||||
settingLabel: I18n.tr("Transparency")
|
||||
settingLabel: I18n.tr("Surface Opacity")
|
||||
reason: I18n.tr("Managed by Frame in Connected Mode")
|
||||
}
|
||||
|
||||
@@ -1647,8 +1647,8 @@ Item {
|
||||
tab: "theme"
|
||||
tags: ["surface", "popup", "transparency", "opacity", "modal"]
|
||||
settingKey: "popupTransparency"
|
||||
text: I18n.tr("Transparency")
|
||||
description: I18n.tr("Controls opacity of all popouts, modals, and their content layers")
|
||||
text: I18n.tr("Surface Opacity")
|
||||
description: I18n.tr("Controls opacity of shell surfaces, popouts, and modals")
|
||||
visible: !themeColorsTab.connectedFrameModeActive
|
||||
value: Math.round(SettingsData.popupTransparency * 100)
|
||||
minimum: 0
|
||||
@@ -1671,6 +1671,113 @@ Item {
|
||||
defaultValue: 12
|
||||
onSliderValueChanged: newValue => SettingsData.setCornerRadius(newValue)
|
||||
}
|
||||
}
|
||||
|
||||
SettingsCard {
|
||||
tab: "theme"
|
||||
tags: ["blur", "background", "transparency", "glass", "frosted"]
|
||||
title: I18n.tr("Background Blur")
|
||||
settingKey: "blurEnabled"
|
||||
iconName: "blur_on"
|
||||
|
||||
SettingsToggleRow {
|
||||
tab: "theme"
|
||||
tags: ["blur", "background", "transparency", "glass", "frosted"]
|
||||
settingKey: "blurEnabled"
|
||||
text: I18n.tr("Background Blur")
|
||||
description: !BlurService.available ? I18n.tr("Your compositor does not support background blur (ext-background-effect-v1)") : I18n.tr("Blur the background behind bars, popouts, modals, and notifications. Requires compositor support. Adjust Opacity accordingly.")
|
||||
checked: SettingsData.blurEnabled ?? false
|
||||
enabled: BlurService.available
|
||||
onToggled: checked => SettingsData.set("blurEnabled", checked)
|
||||
}
|
||||
|
||||
SettingsToggleRow {
|
||||
tab: "theme"
|
||||
tags: ["blur", "foreground", "layers", "contrast", "glass", "frosted"]
|
||||
settingKey: "blurForegroundLayers"
|
||||
text: I18n.tr("Foreground Layers")
|
||||
description: I18n.tr("Show foreground surfaces on blurred panels for stronger contrast")
|
||||
checked: SettingsData.blurForegroundLayers ?? true
|
||||
visible: BlurService.available && (SettingsData.blurEnabled ?? false)
|
||||
enabled: BlurService.available
|
||||
onToggled: checked => SettingsData.set("blurForegroundLayers", checked)
|
||||
}
|
||||
|
||||
SettingsSliderRow {
|
||||
tab: "theme"
|
||||
tags: ["blur", "foreground", "layers", "outline", "border", "cards", "widgets", "notifications", "control center"]
|
||||
settingKey: "blurLayerOutlineOpacity"
|
||||
text: I18n.tr("Layer Outline Opacity")
|
||||
description: I18n.tr("Controls outlines around blurred foreground cards, pills, and notification cards")
|
||||
visible: BlurService.available && (SettingsData.blurEnabled ?? false)
|
||||
value: Math.round((SettingsData.blurLayerOutlineOpacity ?? 0.12) * 100)
|
||||
minimum: 0
|
||||
maximum: 40
|
||||
unit: "%"
|
||||
defaultValue: 12
|
||||
onSliderValueChanged: newValue => SettingsData.set("blurLayerOutlineOpacity", newValue / 100)
|
||||
}
|
||||
|
||||
SettingsDropdownRow {
|
||||
tab: "theme"
|
||||
tags: ["blur", "border", "outline", "edge"]
|
||||
settingKey: "blurBorderColor"
|
||||
text: I18n.tr("Blur Border Color")
|
||||
description: I18n.tr("Border color around blurred surfaces")
|
||||
visible: SettingsData.blurEnabled
|
||||
options: [I18n.tr("Outline", "blur border color"), I18n.tr("Primary", "blur border color"), I18n.tr("Secondary", "blur border color"), I18n.tr("Text Color", "blur border color"), I18n.tr("Custom", "blur border color")]
|
||||
currentValue: {
|
||||
switch (SettingsData.blurBorderColor) {
|
||||
case "primary":
|
||||
return I18n.tr("Primary", "blur border color");
|
||||
case "secondary":
|
||||
return I18n.tr("Secondary", "blur border color");
|
||||
case "surfaceText":
|
||||
return I18n.tr("Text Color", "blur border color");
|
||||
case "custom":
|
||||
return I18n.tr("Custom", "blur border color");
|
||||
default:
|
||||
return I18n.tr("Outline", "blur border color");
|
||||
}
|
||||
}
|
||||
onValueChanged: value => {
|
||||
if (value === I18n.tr("Primary", "blur border color")) {
|
||||
SettingsData.set("blurBorderColor", "primary");
|
||||
} else if (value === I18n.tr("Secondary", "blur border color")) {
|
||||
SettingsData.set("blurBorderColor", "secondary");
|
||||
} else if (value === I18n.tr("Text Color", "blur border color")) {
|
||||
SettingsData.set("blurBorderColor", "surfaceText");
|
||||
} else if (value === I18n.tr("Custom", "blur border color")) {
|
||||
SettingsData.set("blurBorderColor", "custom");
|
||||
openBlurBorderColorPicker();
|
||||
} else {
|
||||
SettingsData.set("blurBorderColor", "outline");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
SettingsSliderRow {
|
||||
tab: "theme"
|
||||
tags: ["blur", "border", "opacity"]
|
||||
settingKey: "blurBorderOpacity"
|
||||
text: I18n.tr("Blur Border Opacity")
|
||||
description: I18n.tr("Controls the outer edge of protocol-blurred windows")
|
||||
visible: SettingsData.blurEnabled
|
||||
value: Math.round((SettingsData.blurBorderOpacity ?? 0.35) * 100)
|
||||
minimum: 0
|
||||
maximum: 100
|
||||
unit: "%"
|
||||
defaultValue: 35
|
||||
onSliderValueChanged: newValue => SettingsData.set("blurBorderOpacity", newValue / 100)
|
||||
}
|
||||
}
|
||||
|
||||
SettingsCard {
|
||||
tab: "theme"
|
||||
tags: ["elevation", "shadow", "lift", "m3", "material"]
|
||||
title: I18n.tr("Shadows")
|
||||
settingKey: "m3ElevationEnabled"
|
||||
iconName: "layers"
|
||||
|
||||
SettingsToggleRow {
|
||||
tab: "theme"
|
||||
@@ -1702,7 +1809,7 @@ Item {
|
||||
tags: ["elevation", "shadow", "opacity", "transparency", "m3"]
|
||||
settingKey: "m3ElevationOpacity"
|
||||
text: I18n.tr("Shadow Opacity")
|
||||
description: I18n.tr("Controls the transparency of the shadow")
|
||||
description: I18n.tr("Controls the opacity of the shadow")
|
||||
value: SettingsData.m3ElevationOpacity ?? 30
|
||||
minimum: 0
|
||||
maximum: 100
|
||||
@@ -1856,105 +1963,6 @@ Item {
|
||||
}
|
||||
}
|
||||
|
||||
SettingsCard {
|
||||
tab: "theme"
|
||||
tags: ["blur", "background", "transparency", "glass", "frosted"]
|
||||
title: I18n.tr("Background Blur")
|
||||
settingKey: "blurEnabled"
|
||||
iconName: "blur_on"
|
||||
|
||||
SettingsToggleRow {
|
||||
tab: "theme"
|
||||
tags: ["blur", "background", "transparency", "glass", "frosted"]
|
||||
settingKey: "blurEnabled"
|
||||
text: I18n.tr("Background Blur")
|
||||
description: !BlurService.available ? I18n.tr("Your compositor does not support background blur (ext-background-effect-v1)") : I18n.tr("Blur the background behind bars, popouts, modals, and notifications. Requires compositor support and configuration.")
|
||||
checked: SettingsData.blurEnabled ?? false
|
||||
enabled: BlurService.available
|
||||
onToggled: checked => SettingsData.set("blurEnabled", checked)
|
||||
}
|
||||
|
||||
SettingsToggleRow {
|
||||
tab: "theme"
|
||||
tags: ["blur", "foreground", "layers", "contrast", "glass", "frosted"]
|
||||
settingKey: "blurForegroundLayers"
|
||||
text: I18n.tr("Foreground Layers")
|
||||
description: I18n.tr("Show foreground surfaces on blurred panels for stronger contrast")
|
||||
checked: SettingsData.blurForegroundLayers ?? true
|
||||
visible: BlurService.available && (SettingsData.blurEnabled ?? false)
|
||||
enabled: BlurService.available
|
||||
onToggled: checked => SettingsData.set("blurForegroundLayers", checked)
|
||||
}
|
||||
|
||||
SettingsSliderRow {
|
||||
tab: "theme"
|
||||
tags: ["blur", "foreground", "layers", "outline", "border", "cards", "widgets", "notifications", "control center"]
|
||||
settingKey: "blurLayerOutlineOpacity"
|
||||
text: I18n.tr("Layer Outline Opacity")
|
||||
description: I18n.tr("Controls outlines around blurred foreground cards, pills, and notification cards")
|
||||
visible: BlurService.available && (SettingsData.blurEnabled ?? false)
|
||||
value: Math.round((SettingsData.blurLayerOutlineOpacity ?? 0.12) * 100)
|
||||
minimum: 0
|
||||
maximum: 40
|
||||
unit: "%"
|
||||
defaultValue: 12
|
||||
onSliderValueChanged: newValue => SettingsData.set("blurLayerOutlineOpacity", newValue / 100)
|
||||
}
|
||||
|
||||
SettingsDropdownRow {
|
||||
tab: "theme"
|
||||
tags: ["blur", "border", "outline", "edge"]
|
||||
settingKey: "blurBorderColor"
|
||||
text: I18n.tr("Blur Border Color")
|
||||
description: I18n.tr("Border color around blurred surfaces")
|
||||
visible: SettingsData.blurEnabled
|
||||
options: [I18n.tr("Outline", "blur border color"), I18n.tr("Primary", "blur border color"), I18n.tr("Secondary", "blur border color"), I18n.tr("Text Color", "blur border color"), I18n.tr("Custom", "blur border color")]
|
||||
currentValue: {
|
||||
switch (SettingsData.blurBorderColor) {
|
||||
case "primary":
|
||||
return I18n.tr("Primary", "blur border color");
|
||||
case "secondary":
|
||||
return I18n.tr("Secondary", "blur border color");
|
||||
case "surfaceText":
|
||||
return I18n.tr("Text Color", "blur border color");
|
||||
case "custom":
|
||||
return I18n.tr("Custom", "blur border color");
|
||||
default:
|
||||
return I18n.tr("Outline", "blur border color");
|
||||
}
|
||||
}
|
||||
onValueChanged: value => {
|
||||
if (value === I18n.tr("Primary", "blur border color")) {
|
||||
SettingsData.set("blurBorderColor", "primary");
|
||||
} else if (value === I18n.tr("Secondary", "blur border color")) {
|
||||
SettingsData.set("blurBorderColor", "secondary");
|
||||
} else if (value === I18n.tr("Text Color", "blur border color")) {
|
||||
SettingsData.set("blurBorderColor", "surfaceText");
|
||||
} else if (value === I18n.tr("Custom", "blur border color")) {
|
||||
SettingsData.set("blurBorderColor", "custom");
|
||||
openBlurBorderColorPicker();
|
||||
} else {
|
||||
SettingsData.set("blurBorderColor", "outline");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
SettingsSliderRow {
|
||||
tab: "theme"
|
||||
tags: ["blur", "border", "opacity"]
|
||||
settingKey: "blurBorderOpacity"
|
||||
text: I18n.tr("Blur Border Opacity")
|
||||
description: I18n.tr("Controls the outer edge of protocol-blurred windows")
|
||||
visible: SettingsData.blurEnabled
|
||||
value: Math.round((SettingsData.blurBorderOpacity ?? 0.35) * 100)
|
||||
minimum: 0
|
||||
maximum: 100
|
||||
unit: "%"
|
||||
defaultValue: 35
|
||||
onSliderValueChanged: newValue => SettingsData.set("blurBorderOpacity", newValue / 100)
|
||||
}
|
||||
}
|
||||
|
||||
SettingsCard {
|
||||
tab: "theme"
|
||||
tags: ["modal", "darken", "background", "overlay"]
|
||||
|
||||
@@ -32,6 +32,8 @@ Variants {
|
||||
|
||||
color: "transparent"
|
||||
|
||||
updatesEnabled: root.renderActive || root._settleFrames > 0
|
||||
|
||||
mask: Region {
|
||||
item: Item {}
|
||||
}
|
||||
@@ -84,20 +86,59 @@ Variants {
|
||||
|
||||
readonly property bool transitioning: transitionAnimation.running
|
||||
property bool effectActive: false
|
||||
property bool _renderSettling: true
|
||||
property bool _overviewBlurSettling: false
|
||||
property bool useNextForEffect: false
|
||||
property string pendingWallpaper: ""
|
||||
property string _deferredSource: ""
|
||||
readonly property bool overviewBlurActive: CompositorService.isNiri && SettingsData.blurWallpaperOnOverview && NiriService.inOverview && currentWallpaper.source !== ""
|
||||
readonly property var backingWindow: Window.window
|
||||
readonly property bool renderActive: !source || effectActive || overviewBlurActive || pendingWallpaper !== "" || _deferredSource !== "" || currentWallpaper.status === Image.Loading || nextWallpaper.status === Image.Loading
|
||||
property int _settleFrames: 3
|
||||
|
||||
function invalidate() {
|
||||
_settleFrames = 3;
|
||||
backingWindow?.update();
|
||||
}
|
||||
|
||||
onRenderActiveChanged: invalidate()
|
||||
onBackingWindowChanged: invalidate()
|
||||
|
||||
Connections {
|
||||
target: currentWallpaper
|
||||
function onStatusChanged() {
|
||||
if (currentWallpaper.status !== Image.Ready && currentWallpaper.status !== Image.Error)
|
||||
target: root.backingWindow
|
||||
function onFrameSwapped() {
|
||||
if (root._settleFrames > 0)
|
||||
root._settleFrames--;
|
||||
}
|
||||
function onVisibleChanged() {
|
||||
root.invalidate();
|
||||
}
|
||||
function onWidthChanged() {
|
||||
root.invalidate();
|
||||
}
|
||||
function onHeightChanged() {
|
||||
root.invalidate();
|
||||
}
|
||||
}
|
||||
|
||||
Connections {
|
||||
target: Quickshell
|
||||
function onScreensChanged() {
|
||||
root.invalidate();
|
||||
}
|
||||
}
|
||||
|
||||
Connections {
|
||||
target: SettingsData
|
||||
function onWallpaperFillModeChanged() {
|
||||
root.invalidate();
|
||||
}
|
||||
}
|
||||
|
||||
Connections {
|
||||
target: IdleService
|
||||
function onIsShellLockedChanged() {
|
||||
if (IdleService.isShellLocked)
|
||||
return;
|
||||
root._renderSettling = true;
|
||||
renderSettleTimer.restart();
|
||||
root.invalidate();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -109,32 +150,11 @@ Variants {
|
||||
}
|
||||
}
|
||||
|
||||
Connections {
|
||||
target: wallpaperWindow
|
||||
function onWidthChanged() {
|
||||
root._renderSettling = true;
|
||||
renderSettleTimer.restart();
|
||||
}
|
||||
function onHeightChanged() {
|
||||
root._renderSettling = true;
|
||||
renderSettleTimer.restart();
|
||||
}
|
||||
}
|
||||
|
||||
Connections {
|
||||
target: Quickshell
|
||||
function onScreensChanged() {
|
||||
root._renderSettling = true;
|
||||
renderSettleTimer.restart();
|
||||
}
|
||||
}
|
||||
|
||||
Connections {
|
||||
target: NiriService
|
||||
function onDisplayScalesChanged() {
|
||||
root._recheckScreenScale();
|
||||
root._renderSettling = true;
|
||||
renderSettleTimer.restart();
|
||||
root.invalidate();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -142,29 +162,7 @@ Variants {
|
||||
target: WlrOutputService
|
||||
function onWlrOutputAvailableChanged() {
|
||||
root._recheckScreenScale();
|
||||
root._renderSettling = true;
|
||||
renderSettleTimer.restart();
|
||||
}
|
||||
}
|
||||
|
||||
Connections {
|
||||
target: NiriService
|
||||
function onInOverviewChanged() {
|
||||
root._overviewBlurSettling = true;
|
||||
overviewBlurSettleTimer.restart();
|
||||
}
|
||||
}
|
||||
|
||||
Connections {
|
||||
target: SettingsData
|
||||
function onBlurWallpaperOnOverviewChanged() {
|
||||
root._overviewBlurSettling = true;
|
||||
overviewBlurSettleTimer.restart();
|
||||
}
|
||||
|
||||
function onWallpaperFillModeChanged() {
|
||||
root._renderSettling = true;
|
||||
renderSettleTimer.restart();
|
||||
root.invalidate();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -181,26 +179,22 @@ Variants {
|
||||
}
|
||||
}
|
||||
|
||||
Connections {
|
||||
target: IdleService
|
||||
function onIsShellLockedChanged() {
|
||||
if (!IdleService.isShellLocked) {
|
||||
root._renderSettling = true;
|
||||
renderSettleTimer.restart();
|
||||
}
|
||||
}
|
||||
}
|
||||
function handleTransitionLoadError(failedSource) {
|
||||
log.warn("failed to load candidate wallpaper for", modelData.name + ":", failedSource);
|
||||
transitionDelayTimer.stop();
|
||||
transitionAnimation.stop();
|
||||
root.useNextForEffect = false;
|
||||
root.effectActive = false;
|
||||
root.transitionProgress = 0.0;
|
||||
currentWallpaper.layer.enabled = false;
|
||||
nextWallpaper.layer.enabled = false;
|
||||
nextWallpaper.source = "";
|
||||
|
||||
Timer {
|
||||
id: renderSettleTimer
|
||||
interval: 1000
|
||||
onTriggered: root._renderSettling = false
|
||||
}
|
||||
|
||||
Timer {
|
||||
id: overviewBlurSettleTimer
|
||||
interval: 150
|
||||
onTriggered: root._overviewBlurSettling = false
|
||||
if (!root.pendingWallpaper)
|
||||
return;
|
||||
const pending = root.pendingWallpaper;
|
||||
root.pendingWallpaper = "";
|
||||
Qt.callLater(() => root.changeWallpaper(pending, true));
|
||||
}
|
||||
|
||||
function getFillMode(modeName) {
|
||||
@@ -227,11 +221,6 @@ Variants {
|
||||
}
|
||||
|
||||
Component.onCompleted: {
|
||||
wallpaperWindow.updatesEnabled = Qt.binding(() => !root.source || root.effectActive || root._renderSettling || root.overviewBlurActive || root._overviewBlurSettling || root.pendingWallpaper !== "" || root._deferredSource !== "" || currentWallpaper.status === Image.Loading || nextWallpaper.status === Image.Loading);
|
||||
|
||||
if (!source) {
|
||||
root._renderSettling = false;
|
||||
}
|
||||
isInitialized = true;
|
||||
}
|
||||
|
||||
@@ -262,8 +251,6 @@ Variants {
|
||||
transitionAnimation.stop();
|
||||
root.transitionProgress = 0.0;
|
||||
root.effectActive = false;
|
||||
root._renderSettling = true;
|
||||
renderSettleTimer.restart();
|
||||
root.screenScale = CompositorService.getScreenScale(modelData);
|
||||
currentWallpaper.source = newSource;
|
||||
nextWallpaper.source = "";
|
||||
@@ -328,9 +315,6 @@ Variants {
|
||||
break;
|
||||
}
|
||||
|
||||
root._renderSettling = true;
|
||||
renderSettleTimer.restart();
|
||||
|
||||
nextWallpaper.source = newPath;
|
||||
|
||||
if (nextWallpaper.status === Image.Ready)
|
||||
@@ -339,7 +323,7 @@ Variants {
|
||||
|
||||
Loader {
|
||||
anchors.fill: parent
|
||||
active: !root.source || root.isColorSource
|
||||
active: !root.source || root.isColorSource || currentWallpaper.status === Image.Error
|
||||
asynchronous: true
|
||||
|
||||
sourceComponent: DankBackdrop {
|
||||
@@ -364,6 +348,12 @@ Variants {
|
||||
cache: true
|
||||
sourceSize: Qt.size(root.textureWidth, root.textureHeight)
|
||||
fillMode: root.getFillMode(SessionData.getMonitorWallpaperFillMode(modelData.name))
|
||||
|
||||
onStatusChanged: {
|
||||
if (status === Image.Error) {
|
||||
log.warn("failed to load active wallpaper for", modelData.name + ":", source);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Image {
|
||||
@@ -380,11 +370,13 @@ Variants {
|
||||
fillMode: root.getFillMode(SessionData.getMonitorWallpaperFillMode(modelData.name))
|
||||
|
||||
onStatusChanged: {
|
||||
if (status === Image.Error) {
|
||||
root.handleTransitionLoadError(source);
|
||||
return;
|
||||
}
|
||||
if (status !== Image.Ready)
|
||||
return;
|
||||
if (root.actualTransitionType === "none") {
|
||||
root._renderSettling = true;
|
||||
renderSettleTimer.restart();
|
||||
currentWallpaper.source = source;
|
||||
nextWallpaper.source = "";
|
||||
root.transitionProgress = 0.0;
|
||||
@@ -632,8 +624,6 @@ Variants {
|
||||
root.transitionProgress = 0.0;
|
||||
currentWallpaper.layer.enabled = false;
|
||||
nextWallpaper.layer.enabled = false;
|
||||
root._renderSettling = true;
|
||||
renderSettleTimer.restart();
|
||||
root.effectActive = false;
|
||||
|
||||
if (!root.pendingWallpaper)
|
||||
|
||||
@@ -546,6 +546,7 @@ def main():
|
||||
output_path = script_dir / "settings_search_index.json"
|
||||
with open(output_path, "w", encoding="utf-8") as f:
|
||||
json.dump(all_entries, f, indent=2, ensure_ascii=False)
|
||||
f.write("\n")
|
||||
|
||||
print(f"Found {len(settings_entries)} searchable settings")
|
||||
print(f"Found {len(tab_entries)} tab entries")
|
||||
|
||||
@@ -58,6 +58,7 @@
|
||||
"targetable",
|
||||
"wallpaper"
|
||||
],
|
||||
"icon": "blur_on",
|
||||
"description": "Enable compositor-targetable blur layer (namespace: dms:blurwallpaper). Requires manual niri configuration.",
|
||||
"conditionKey": "isNiri"
|
||||
},
|
||||
@@ -727,21 +728,6 @@
|
||||
],
|
||||
"icon": "dashboard"
|
||||
},
|
||||
{
|
||||
"section": "_tab_3",
|
||||
"label": "Dank Bar",
|
||||
"tabIndex": 3,
|
||||
"category": "Dank Bar",
|
||||
"keywords": [
|
||||
"bar",
|
||||
"dank",
|
||||
"panel",
|
||||
"statusbar",
|
||||
"taskbar",
|
||||
"topbar"
|
||||
],
|
||||
"icon": "toolbar"
|
||||
},
|
||||
{
|
||||
"section": "barDisplay",
|
||||
"label": "Display Assignment",
|
||||
@@ -777,30 +763,19 @@
|
||||
"icon": "vertical_align_center"
|
||||
},
|
||||
{
|
||||
"section": "barSpacing",
|
||||
"label": "Spacing",
|
||||
"section": "_tab_3",
|
||||
"label": "Settings",
|
||||
"tabIndex": 3,
|
||||
"category": "Dank Bar",
|
||||
"keywords": [
|
||||
"bar",
|
||||
"between",
|
||||
"dank",
|
||||
"edges",
|
||||
"gap",
|
||||
"gaps",
|
||||
"margin",
|
||||
"margins",
|
||||
"padding",
|
||||
"panel",
|
||||
"screen",
|
||||
"space",
|
||||
"spacing",
|
||||
"settings",
|
||||
"statusbar",
|
||||
"taskbar",
|
||||
"topbar"
|
||||
],
|
||||
"icon": "space_bar",
|
||||
"description": "Space between the bar and screen edges"
|
||||
"icon": "tune"
|
||||
},
|
||||
{
|
||||
"section": "barUseOverlayLayer",
|
||||
@@ -1528,6 +1503,19 @@
|
||||
"windows"
|
||||
]
|
||||
},
|
||||
{
|
||||
"section": "dockTransparency",
|
||||
"label": "Opacity",
|
||||
"tabIndex": 5,
|
||||
"category": "Dock",
|
||||
"keywords": [
|
||||
"dock",
|
||||
"launcher bar",
|
||||
"opacity",
|
||||
"taskbar"
|
||||
],
|
||||
"icon": "opacity"
|
||||
},
|
||||
{
|
||||
"section": "dockTrashFileManager",
|
||||
"label": "Open Trash With",
|
||||
@@ -1745,23 +1733,6 @@
|
||||
],
|
||||
"icon": "space_bar"
|
||||
},
|
||||
{
|
||||
"section": "dockTransparency",
|
||||
"label": "Transparency",
|
||||
"tabIndex": 5,
|
||||
"category": "Dock",
|
||||
"keywords": [
|
||||
"alpha",
|
||||
"dock",
|
||||
"launcher bar",
|
||||
"opacity",
|
||||
"taskbar",
|
||||
"translucent",
|
||||
"transparency",
|
||||
"transparent"
|
||||
],
|
||||
"icon": "opacity"
|
||||
},
|
||||
{
|
||||
"section": "dockTrash",
|
||||
"label": "Trash",
|
||||
@@ -1798,21 +1769,6 @@
|
||||
],
|
||||
"description": "Place the dock on the Wayland overlay layer"
|
||||
},
|
||||
{
|
||||
"section": "_tab_6",
|
||||
"label": "Appearance",
|
||||
"tabIndex": 6,
|
||||
"category": "Dank Bar",
|
||||
"keywords": [
|
||||
"appearance",
|
||||
"bar",
|
||||
"dank",
|
||||
"panel",
|
||||
"statusbar",
|
||||
"topbar"
|
||||
],
|
||||
"icon": "palette"
|
||||
},
|
||||
{
|
||||
"section": "barBorder",
|
||||
"label": "Border",
|
||||
@@ -1862,6 +1818,21 @@
|
||||
"icon": "rounded_corner",
|
||||
"description": "Remove corner rounding from the bar"
|
||||
},
|
||||
{
|
||||
"section": "_tab_6",
|
||||
"label": "Dank Bar",
|
||||
"tabIndex": 6,
|
||||
"category": "Dank Bar",
|
||||
"keywords": [
|
||||
"bar",
|
||||
"dank",
|
||||
"panel",
|
||||
"statusbar",
|
||||
"taskbar",
|
||||
"topbar"
|
||||
],
|
||||
"icon": "toolbar"
|
||||
},
|
||||
{
|
||||
"section": "barAppearance",
|
||||
"label": "Dank Bar",
|
||||
@@ -1982,6 +1953,25 @@
|
||||
],
|
||||
"description": "Use a fixed shadow direction for this bar"
|
||||
},
|
||||
{
|
||||
"section": "barTransparency",
|
||||
"label": "Opacity",
|
||||
"tabIndex": 6,
|
||||
"category": "Dank Bar",
|
||||
"keywords": [
|
||||
"background",
|
||||
"bar",
|
||||
"controls",
|
||||
"dank",
|
||||
"opacity",
|
||||
"panel",
|
||||
"statusbar",
|
||||
"taskbar",
|
||||
"topbar"
|
||||
],
|
||||
"icon": "opacity",
|
||||
"description": "Controls opacity of the bar background"
|
||||
},
|
||||
{
|
||||
"section": "barShadow",
|
||||
"label": "Shadow Override",
|
||||
@@ -2002,6 +1992,32 @@
|
||||
"icon": "layers",
|
||||
"description": "Override the global shadow with per-bar settings"
|
||||
},
|
||||
{
|
||||
"section": "barSpacing",
|
||||
"label": "Spacing",
|
||||
"tabIndex": 6,
|
||||
"category": "Dank Bar",
|
||||
"keywords": [
|
||||
"bar",
|
||||
"between",
|
||||
"dank",
|
||||
"edges",
|
||||
"gap",
|
||||
"gaps",
|
||||
"margin",
|
||||
"margins",
|
||||
"padding",
|
||||
"panel",
|
||||
"screen",
|
||||
"space",
|
||||
"spacing",
|
||||
"statusbar",
|
||||
"taskbar",
|
||||
"topbar"
|
||||
],
|
||||
"icon": "space_bar",
|
||||
"description": "Space between the bar and screen edges"
|
||||
},
|
||||
{
|
||||
"section": "trayIconTint",
|
||||
"label": "System Tray Icon Tint",
|
||||
@@ -2030,28 +2046,6 @@
|
||||
"icon": "filter_b_and_w",
|
||||
"description": "Controls how much original icon color is removed before applying tint"
|
||||
},
|
||||
{
|
||||
"section": "barTransparency",
|
||||
"label": "Transparency",
|
||||
"tabIndex": 6,
|
||||
"category": "Dank Bar",
|
||||
"keywords": [
|
||||
"alpha",
|
||||
"background",
|
||||
"bar",
|
||||
"dank",
|
||||
"opacity",
|
||||
"panel",
|
||||
"statusbar",
|
||||
"taskbar",
|
||||
"topbar",
|
||||
"translucent",
|
||||
"transparency",
|
||||
"transparent"
|
||||
],
|
||||
"icon": "opacity",
|
||||
"description": "Opacity of the bar background"
|
||||
},
|
||||
{
|
||||
"section": "barWidgetOutline",
|
||||
"label": "Widget Outline",
|
||||
@@ -3792,7 +3786,6 @@
|
||||
"tabIndex": 10,
|
||||
"category": "Theme & Colors",
|
||||
"keywords": [
|
||||
"alpha",
|
||||
"appearance",
|
||||
"colors",
|
||||
"controls",
|
||||
@@ -3804,11 +3797,9 @@
|
||||
"shadow",
|
||||
"style",
|
||||
"theme",
|
||||
"translucent",
|
||||
"transparency",
|
||||
"transparent"
|
||||
"transparency"
|
||||
],
|
||||
"description": "Controls the transparency of the shadow"
|
||||
"description": "Controls the opacity of the shadow"
|
||||
},
|
||||
{
|
||||
"section": "m3ElevationEnabled",
|
||||
@@ -3833,8 +3824,34 @@
|
||||
"style",
|
||||
"theme"
|
||||
],
|
||||
"icon": "layers",
|
||||
"description": "Material inspired shadows and elevation on modals, popouts, and dialogs"
|
||||
},
|
||||
{
|
||||
"section": "popupTransparency",
|
||||
"label": "Surface Opacity",
|
||||
"tabIndex": 10,
|
||||
"category": "Theme & Colors",
|
||||
"keywords": [
|
||||
"appearance",
|
||||
"colors",
|
||||
"controls",
|
||||
"look",
|
||||
"modal",
|
||||
"modals",
|
||||
"opacity",
|
||||
"popouts",
|
||||
"popup",
|
||||
"scheme",
|
||||
"shell",
|
||||
"style",
|
||||
"surface",
|
||||
"surfaces",
|
||||
"theme",
|
||||
"transparency"
|
||||
],
|
||||
"description": "Controls opacity of shell surfaces, popouts, and modals"
|
||||
},
|
||||
{
|
||||
"section": "syncModeWithPortal",
|
||||
"label": "Sync Mode with Portal",
|
||||
@@ -3966,35 +3983,6 @@
|
||||
"icon": "palette",
|
||||
"description": "Select the palette algorithm used for wallpaper-based colors"
|
||||
},
|
||||
{
|
||||
"section": "popupTransparency",
|
||||
"label": "Transparency",
|
||||
"tabIndex": 10,
|
||||
"category": "Theme & Colors",
|
||||
"keywords": [
|
||||
"alpha",
|
||||
"appearance",
|
||||
"colors",
|
||||
"content",
|
||||
"controls",
|
||||
"layers",
|
||||
"look",
|
||||
"modal",
|
||||
"modals",
|
||||
"opacity",
|
||||
"popouts",
|
||||
"popup",
|
||||
"scheme",
|
||||
"style",
|
||||
"surface",
|
||||
"their",
|
||||
"theme",
|
||||
"translucent",
|
||||
"transparency",
|
||||
"transparent"
|
||||
],
|
||||
"description": "Controls opacity of all popouts, modals, and their content layers"
|
||||
},
|
||||
{
|
||||
"section": "matugenTemplateVscode",
|
||||
"label": "VS Code",
|
||||
@@ -4563,6 +4551,27 @@
|
||||
],
|
||||
"description": "Automatically lock the screen when DMS starts"
|
||||
},
|
||||
{
|
||||
"section": "lockBeforeSuspend",
|
||||
"label": "Lock before suspend",
|
||||
"tabIndex": 11,
|
||||
"category": "Lock Screen",
|
||||
"keywords": [
|
||||
"automatic",
|
||||
"automatically",
|
||||
"before",
|
||||
"lock",
|
||||
"login",
|
||||
"password",
|
||||
"prepares",
|
||||
"screen",
|
||||
"security",
|
||||
"sleep",
|
||||
"suspend",
|
||||
"system"
|
||||
],
|
||||
"description": "Automatically lock the screen when the system prepares to suspend"
|
||||
},
|
||||
{
|
||||
"section": "lockScreenNotificationMode",
|
||||
"label": "Notification Display",
|
||||
@@ -5470,6 +5479,26 @@
|
||||
],
|
||||
"icon": "dashboard"
|
||||
},
|
||||
{
|
||||
"section": "notificationBodyFontSize",
|
||||
"label": "Body Font Size",
|
||||
"tabIndex": 17,
|
||||
"category": "Notifications",
|
||||
"keywords": [
|
||||
"alert",
|
||||
"alerts",
|
||||
"body",
|
||||
"font",
|
||||
"messages",
|
||||
"notif",
|
||||
"notification",
|
||||
"notifications",
|
||||
"size",
|
||||
"text",
|
||||
"toast"
|
||||
],
|
||||
"description": "Set the font size for notification body text (htmlBody)"
|
||||
},
|
||||
{
|
||||
"section": "notificationCompactMode",
|
||||
"label": "Compact",
|
||||
@@ -5867,22 +5896,19 @@
|
||||
"keywords": [
|
||||
"alert",
|
||||
"alerts",
|
||||
"appear",
|
||||
"choose",
|
||||
"location",
|
||||
"font",
|
||||
"messages",
|
||||
"notif",
|
||||
"notification",
|
||||
"notifications",
|
||||
"popup",
|
||||
"popups",
|
||||
"position",
|
||||
"screen",
|
||||
"toast",
|
||||
"where"
|
||||
"size",
|
||||
"summary",
|
||||
"text",
|
||||
"toast"
|
||||
],
|
||||
"icon": "notifications",
|
||||
"description": "Choose where notification popups appear on screen"
|
||||
"description": "Set the font size for notification summary text"
|
||||
},
|
||||
{
|
||||
"section": "notificationRules",
|
||||
@@ -6032,6 +6058,26 @@
|
||||
],
|
||||
"description": "Hide notification content until expanded; popups show collapsed by default"
|
||||
},
|
||||
{
|
||||
"section": "notificationSummaryFontSize",
|
||||
"label": "Summary Font Size",
|
||||
"tabIndex": 17,
|
||||
"category": "Notifications",
|
||||
"keywords": [
|
||||
"alert",
|
||||
"alerts",
|
||||
"font",
|
||||
"messages",
|
||||
"notif",
|
||||
"notification",
|
||||
"notifications",
|
||||
"size",
|
||||
"summary",
|
||||
"text",
|
||||
"toast"
|
||||
],
|
||||
"description": "Set the font size for notification summary text"
|
||||
},
|
||||
{
|
||||
"section": "notificationDedupeEnabled",
|
||||
"label": "Suppress Duplicate Notifications",
|
||||
@@ -6054,6 +6100,32 @@
|
||||
"toast"
|
||||
]
|
||||
},
|
||||
{
|
||||
"section": "notificationShowTimeoutBar",
|
||||
"label": "Timeout Progress Bar",
|
||||
"tabIndex": 17,
|
||||
"category": "Notifications",
|
||||
"keywords": [
|
||||
"alerts",
|
||||
"bar",
|
||||
"countdown",
|
||||
"drains",
|
||||
"messages",
|
||||
"notification",
|
||||
"notifications",
|
||||
"panel",
|
||||
"popup",
|
||||
"progress",
|
||||
"show",
|
||||
"statusbar",
|
||||
"taskbar",
|
||||
"timeout",
|
||||
"timer",
|
||||
"toast",
|
||||
"topbar"
|
||||
],
|
||||
"description": "Show a bar that drains as the popup"
|
||||
},
|
||||
{
|
||||
"section": "osdAlwaysShowValue",
|
||||
"label": "Always Show Percentage",
|
||||
@@ -6697,27 +6769,6 @@
|
||||
"icon": "schedule",
|
||||
"description": "Gradually fade the screen before locking with a configurable grace period"
|
||||
},
|
||||
{
|
||||
"section": "lockBeforeSuspend",
|
||||
"label": "Lock before suspend",
|
||||
"tabIndex": 21,
|
||||
"category": "Power & Sleep",
|
||||
"keywords": [
|
||||
"automatically",
|
||||
"before",
|
||||
"energy",
|
||||
"lock",
|
||||
"power",
|
||||
"prepares",
|
||||
"screen",
|
||||
"security",
|
||||
"shutdown",
|
||||
"sleep",
|
||||
"suspend",
|
||||
"system"
|
||||
],
|
||||
"description": "Automatically lock the screen when the system prepares to suspend"
|
||||
},
|
||||
{
|
||||
"section": "fadeToLockGracePeriod",
|
||||
"label": "Lock fade grace period",
|
||||
@@ -7119,6 +7170,36 @@
|
||||
],
|
||||
"description": "Maximum number of entries that can be saved"
|
||||
},
|
||||
{
|
||||
"section": "clipboardVisibleEntryActions",
|
||||
"label": "Visible Entry Actions",
|
||||
"tabIndex": 23,
|
||||
"category": "System",
|
||||
"keywords": [
|
||||
"action",
|
||||
"actions",
|
||||
"appear",
|
||||
"buttons",
|
||||
"choose",
|
||||
"clipboard",
|
||||
"cliphist",
|
||||
"copy",
|
||||
"delete",
|
||||
"density",
|
||||
"edit",
|
||||
"entries",
|
||||
"entry",
|
||||
"hide",
|
||||
"history",
|
||||
"linux",
|
||||
"os",
|
||||
"paste",
|
||||
"pin",
|
||||
"system",
|
||||
"visible"
|
||||
],
|
||||
"description": "Choose which action buttons appear on clipboard entries"
|
||||
},
|
||||
{
|
||||
"section": "_tab_24",
|
||||
"label": "Displays",
|
||||
@@ -8399,7 +8480,7 @@
|
||||
"topbar",
|
||||
"window"
|
||||
],
|
||||
"icon": "crop_square",
|
||||
"icon": "layers",
|
||||
"description": "Use custom gaps instead of bar spacing",
|
||||
"conditionKey": "isNiri"
|
||||
},
|
||||
|
||||
Reference in New Issue
Block a user