mirror of
https://github.com/AvengeMedia/DankMaterialShell.git
synced 2026-08-01 19:18:28 -04:00
@@ -29,6 +29,8 @@ Item {
|
||||
property var centerWidgets: []
|
||||
property int totalWidgets: 0
|
||||
property real totalSize: 0
|
||||
property real contentStart: 0
|
||||
property real contentSize: 0
|
||||
|
||||
function updateLayout() {
|
||||
if (SettingsData.centeringMode === "geometric") {
|
||||
@@ -36,6 +38,25 @@ Item {
|
||||
} else {
|
||||
applyIndexLayout();
|
||||
}
|
||||
updateContentExtent();
|
||||
}
|
||||
|
||||
function updateContentExtent() {
|
||||
if (centerWidgets.length === 0) {
|
||||
contentStart = 0;
|
||||
contentSize = 0;
|
||||
return;
|
||||
}
|
||||
let start = Infinity;
|
||||
let end = -Infinity;
|
||||
for (const widget of centerWidgets) {
|
||||
const pos = isVertical ? widget.y : widget.x;
|
||||
const size = isVertical ? widget.height : widget.width;
|
||||
start = Math.min(start, pos);
|
||||
end = Math.max(end, pos + size);
|
||||
}
|
||||
contentStart = start;
|
||||
contentSize = end - start;
|
||||
}
|
||||
|
||||
function applyGeometricLayout() {
|
||||
|
||||
@@ -832,16 +832,30 @@ Item {
|
||||
const pos = section.mapToItem(barWindow.hostWindow.contentItem, 0, 0);
|
||||
const implW = section.implicitWidth || 0;
|
||||
const implH = section.implicitHeight || 0;
|
||||
const contentSize = isCenter ? (section.contentSize || 0) : 0;
|
||||
|
||||
const offsetX = isCenter && !barWindow.isVertical ? (section.width - implW) / 2 : 0;
|
||||
const offsetY = !barWindow.isVertical ? (section.height - implH) / 2 : (isCenter ? (section.height - implH) / 2 : 0);
|
||||
let offsetX = isCenter && !barWindow.isVertical ? (section.width - implW) / 2 : 0;
|
||||
let offsetY = !barWindow.isVertical ? (section.height - implH) / 2 : (isCenter ? (section.height - implH) / 2 : 0);
|
||||
let w = implW;
|
||||
let h = implH;
|
||||
|
||||
// index centering lays content out asymmetrically; use the real extent
|
||||
if (contentSize > 0) {
|
||||
if (barWindow.isVertical) {
|
||||
offsetY = section.contentStart;
|
||||
h = contentSize;
|
||||
} else {
|
||||
offsetX = section.contentStart;
|
||||
w = contentSize;
|
||||
}
|
||||
}
|
||||
|
||||
const edgePad = 2;
|
||||
return {
|
||||
"x": pos.x + offsetX - edgePad,
|
||||
"y": pos.y + offsetY - edgePad,
|
||||
"w": implW + edgePad * 2,
|
||||
"h": implH + edgePad * 2
|
||||
"w": w + edgePad * 2,
|
||||
"h": h + edgePad * 2
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
@@ -375,6 +375,8 @@ Item {
|
||||
visible: DesktopService.autostartAvailable
|
||||
|
||||
SettingsCard {
|
||||
settingKey: "autostartAddEntry"
|
||||
tags: ["autostart", "add", "entry", "command", "startup"]
|
||||
width: parent.width
|
||||
iconName: "add_circle"
|
||||
title: I18n.tr("Add Entry")
|
||||
@@ -764,6 +766,8 @@ Item {
|
||||
}
|
||||
|
||||
SettingsCard {
|
||||
settingKey: "autostartTrayIconFix"
|
||||
tags: ["tray", "icons", "fix", "systemd"]
|
||||
width: parent.width
|
||||
iconName: "handyman"
|
||||
title: I18n.tr("Tray Icon Fix")
|
||||
|
||||
@@ -463,6 +463,7 @@ Item {
|
||||
}
|
||||
|
||||
SettingsCard {
|
||||
settingKey: "barEnable"
|
||||
iconName: selectedBarConfig?.enabled ? "visibility" : "visibility_off"
|
||||
title: I18n.tr("Enable Bar")
|
||||
visible: !dankBarTab.appearanceOnly && selectedBarId !== "default"
|
||||
@@ -651,6 +652,8 @@ Item {
|
||||
visible: !dankBarTab.appearanceOnly && selectedBarConfig?.enabled
|
||||
|
||||
SettingsToggleRow {
|
||||
settingKey: "barAutoHide"
|
||||
tags: ["autohide", "auto-hide", "reveal", "intellihide"]
|
||||
text: I18n.tr("Auto-hide")
|
||||
description: I18n.tr("Automatically hide the bar when the pointer moves away")
|
||||
checked: selectedBarConfig?.autoHide ?? false
|
||||
@@ -700,6 +703,8 @@ Item {
|
||||
}
|
||||
|
||||
SettingsToggleRow {
|
||||
settingKey: "barAutoHideStrict"
|
||||
tags: ["autohide", "strict", "popout"]
|
||||
width: parent.width - parent.leftPadding
|
||||
text: I18n.tr("Strict auto-hide", "Dank bar setting: hide the bar when the pointer leaves even if a menu or bar popover is still open")
|
||||
description: I18n.tr("Hide the bar when the pointer leaves even if a popout is still open")
|
||||
@@ -713,6 +718,8 @@ Item {
|
||||
}
|
||||
|
||||
SettingsToggleRow {
|
||||
settingKey: "barHideWhenWindowsOpen"
|
||||
tags: ["hide", "windows", "empty", "workspace"]
|
||||
width: parent.width - parent.leftPadding
|
||||
visible: CompositorService.isNiri || CompositorService.isHyprland || CompositorService.isMango
|
||||
text: I18n.tr("Hide When Windows Open")
|
||||
@@ -734,6 +741,8 @@ Item {
|
||||
}
|
||||
|
||||
SettingsToggleRow {
|
||||
settingKey: "barManualVisibility"
|
||||
tags: ["manual", "show", "hide", "ipc", "toggle"]
|
||||
text: I18n.tr("Manual Show/Hide")
|
||||
description: I18n.tr("Toggle bar visibility manually via IPC")
|
||||
checked: selectedBarConfig?.visible ?? true
|
||||
@@ -753,6 +762,8 @@ Item {
|
||||
}
|
||||
|
||||
SettingsToggleRow {
|
||||
settingKey: "barClickThrough"
|
||||
tags: ["clickthrough", "click", "through", "mouse", "input", "mask", "passthrough"]
|
||||
text: I18n.tr("Click Through")
|
||||
description: I18n.tr("Mouse clicks pass through the bar to windows behind it")
|
||||
checked: selectedBarConfig?.clickThrough ?? false
|
||||
@@ -908,6 +919,8 @@ Item {
|
||||
|
||||
SettingsSliderRow {
|
||||
id: exclusiveZoneSlider
|
||||
settingKey: "barExclusiveZone"
|
||||
tags: ["exclusive", "zone", "reserved", "offset"]
|
||||
visible: !SettingsData.frameEnabled
|
||||
text: I18n.tr("Exclusive Zone Offset")
|
||||
description: I18n.tr("Fine-tune the space reserved for the bar from the screen edge")
|
||||
@@ -931,6 +944,8 @@ Item {
|
||||
|
||||
SettingsSliderRow {
|
||||
id: sizeSlider
|
||||
settingKey: "barSize"
|
||||
tags: ["size", "thickness", "height", "inner"]
|
||||
visible: !SettingsData.frameEnabled
|
||||
text: I18n.tr("Size")
|
||||
description: I18n.tr("Adjust the bar height via inner padding")
|
||||
@@ -1152,6 +1167,8 @@ Item {
|
||||
}
|
||||
|
||||
SettingsToggleRow {
|
||||
settingKey: "barSquareCorners"
|
||||
tags: ["square", "corners", "rounding"]
|
||||
text: I18n.tr("Square Corners")
|
||||
description: I18n.tr("Remove corner rounding from the bar")
|
||||
visible: !SettingsData.frameEnabled
|
||||
@@ -1162,6 +1179,8 @@ Item {
|
||||
}
|
||||
|
||||
SettingsToggleRow {
|
||||
settingKey: "barNoBackground"
|
||||
tags: ["transparent", "background", "invisible"]
|
||||
text: I18n.tr("No Background")
|
||||
description: I18n.tr("Make the bar background fully transparent")
|
||||
visible: !SettingsData.frameEnabled
|
||||
@@ -1172,6 +1191,8 @@ Item {
|
||||
}
|
||||
|
||||
SettingsToggleRow {
|
||||
settingKey: "barMaximizeWidgetIcons"
|
||||
tags: ["maximize", "icons", "stretch"]
|
||||
text: I18n.tr("Maximize Widget Icons")
|
||||
description: I18n.tr("Stretch widget icons to fill the available bar height")
|
||||
checked: selectedBarConfig?.maximizeWidgetIcons ?? false
|
||||
@@ -1181,6 +1202,8 @@ Item {
|
||||
}
|
||||
|
||||
SettingsToggleRow {
|
||||
settingKey: "barMaximizeWidgetText"
|
||||
tags: ["maximize", "text", "stretch"]
|
||||
text: I18n.tr("Maximize Widget Text")
|
||||
description: I18n.tr("Stretch widget text to fill the available bar height")
|
||||
checked: selectedBarConfig?.maximizeWidgetText ?? false
|
||||
@@ -1190,6 +1213,8 @@ Item {
|
||||
}
|
||||
|
||||
SettingsToggleRow {
|
||||
settingKey: "barRemoveWidgetPadding"
|
||||
tags: ["padding", "compact", "widgets"]
|
||||
text: I18n.tr("Remove Widget Padding")
|
||||
description: I18n.tr("Remove inner padding from all widgets")
|
||||
checked: selectedBarConfig?.removeWidgetPadding ?? false
|
||||
@@ -1206,6 +1231,8 @@ Item {
|
||||
}
|
||||
|
||||
SettingsToggleRow {
|
||||
settingKey: "barGothCorners"
|
||||
tags: ["goth", "corners", "concave", "cutout"]
|
||||
text: I18n.tr("Goth Corners")
|
||||
description: I18n.tr("Apply inverse concave corner cutouts to the bar")
|
||||
visible: !SettingsData.frameEnabled
|
||||
@@ -1302,6 +1329,8 @@ Item {
|
||||
}
|
||||
|
||||
SettingsToggleCard {
|
||||
settingKey: "barMaximizeDetection"
|
||||
tags: ["maximize", "gaps", "border", "fullscreen"]
|
||||
iconName: "fit_screen"
|
||||
title: I18n.tr("Maximize Detection")
|
||||
description: I18n.tr("Remove gaps and border when windows are maximized")
|
||||
@@ -1844,6 +1873,8 @@ Item {
|
||||
|
||||
SettingsToggleCard {
|
||||
iconName: "mouse"
|
||||
settingKey: "barScrollWheel"
|
||||
tags: ["scroll", "wheel", "workspace", "axis"]
|
||||
title: I18n.tr("Scroll Wheel")
|
||||
description: I18n.tr("Control workspaces and columns by scrolling on the bar")
|
||||
visible: !dankBarTab.appearanceOnly && selectedBarConfig?.enabled
|
||||
|
||||
@@ -267,6 +267,8 @@ Item {
|
||||
spacing: Theme.spacingXL
|
||||
|
||||
SettingsCard {
|
||||
settingKey: "defaultAppsInternet"
|
||||
tags: ["browser", "mail", "email", "web"]
|
||||
title: I18n.tr("Internet", "Internet")
|
||||
iconName: "public"
|
||||
|
||||
@@ -293,6 +295,8 @@ Item {
|
||||
}
|
||||
|
||||
SettingsCard {
|
||||
settingKey: "defaultAppsUtilities"
|
||||
tags: ["file", "manager", "terminal", "editor"]
|
||||
title: I18n.tr("Utilities", "Utilities")
|
||||
iconName: "terminal"
|
||||
|
||||
@@ -316,6 +320,8 @@ Item {
|
||||
}
|
||||
|
||||
SettingsCard {
|
||||
settingKey: "defaultAppsDocuments"
|
||||
tags: ["pdf", "text", "reader", "office"]
|
||||
title: I18n.tr("Documents", "Documents")
|
||||
iconName: "edit_document"
|
||||
|
||||
@@ -333,6 +339,8 @@ Item {
|
||||
}
|
||||
|
||||
SettingsCard {
|
||||
settingKey: "defaultAppsMultimedia"
|
||||
tags: ["image", "video", "music", "viewer", "player"]
|
||||
title: I18n.tr("Multimedia", "Multimedia")
|
||||
iconName: "movie"
|
||||
AppSelector {
|
||||
|
||||
@@ -166,6 +166,8 @@ Item {
|
||||
spacing: Theme.spacingXL
|
||||
|
||||
SettingsCard {
|
||||
settingKey: "desktopWidgetsManage"
|
||||
tags: ["desktop", "widgets", "clock", "conky"]
|
||||
width: parent.width
|
||||
iconName: "widgets"
|
||||
title: I18n.tr("Desktop Widgets")
|
||||
@@ -203,6 +205,8 @@ Item {
|
||||
}
|
||||
|
||||
SettingsCard {
|
||||
settingKey: "desktopWidgetGroups"
|
||||
tags: ["groups", "profiles", "layouts"]
|
||||
width: parent.width
|
||||
iconName: "folder"
|
||||
title: I18n.tr("Groups")
|
||||
|
||||
@@ -617,6 +617,8 @@ Item {
|
||||
}
|
||||
|
||||
SettingsSliderRow {
|
||||
settingKey: "dockExclusiveZone"
|
||||
tags: ["exclusive", "zone", "reserved", "offset"]
|
||||
text: I18n.tr("Exclusive Zone Offset")
|
||||
visible: !root.connectedFrameModeActive || root.connectedPersistentDockActive
|
||||
value: SettingsData.dockBottomGap
|
||||
|
||||
@@ -38,6 +38,8 @@ Item {
|
||||
settingKey: "mediaPlayer"
|
||||
|
||||
SettingsToggleRow {
|
||||
settingKey: "mediaWaveProgress"
|
||||
tags: ["wave", "progress", "animated"]
|
||||
text: I18n.tr("Wave Progress Bars")
|
||||
description: I18n.tr("Use animated wave progress bars for media playback")
|
||||
checked: SettingsData.waveProgressEnabled
|
||||
@@ -45,6 +47,8 @@ Item {
|
||||
}
|
||||
|
||||
SettingsToggleRow {
|
||||
settingKey: "mediaScrollTitle"
|
||||
tags: ["scroll", "title", "marquee"]
|
||||
text: I18n.tr("Scroll song title")
|
||||
description: I18n.tr("Scroll title if it doesn't fit in widget")
|
||||
checked: SettingsData.scrollTitleEnabled
|
||||
@@ -52,6 +56,8 @@ Item {
|
||||
}
|
||||
|
||||
SettingsToggleRow {
|
||||
settingKey: "mediaVisualizer"
|
||||
tags: ["visualizer", "cava", "spectrum"]
|
||||
text: I18n.tr("Audio Visualizer")
|
||||
description: I18n.tr("Show cava audio visualizer in media widget")
|
||||
checked: SettingsData.audioVisualizerEnabled
|
||||
@@ -59,6 +65,8 @@ Item {
|
||||
}
|
||||
|
||||
SettingsToggleRow {
|
||||
settingKey: "mediaAdaptiveWidth"
|
||||
tags: ["adaptive", "width", "shrink"]
|
||||
text: I18n.tr("Adaptive Media Width")
|
||||
description: I18n.tr("Shrink the media widget to fit shorter song titles while still respecting the configured maximum size")
|
||||
checked: SettingsData.mediaAdaptiveWidthEnabled
|
||||
@@ -66,6 +74,8 @@ Item {
|
||||
}
|
||||
|
||||
SettingsToggleRow {
|
||||
settingKey: "mediaAlbumArtAccent"
|
||||
tags: ["album", "art", "accent", "colors"]
|
||||
text: I18n.tr("Use album art accent")
|
||||
description: I18n.tr("Use colors extracted from album art instead of system theme colors")
|
||||
checked: SettingsData.mediaUseAlbumArtAccent
|
||||
@@ -136,6 +146,8 @@ Item {
|
||||
}
|
||||
|
||||
SettingsToggleRow {
|
||||
settingKey: "mediaDeviceScrollVolume"
|
||||
tags: ["device", "scroll", "volume"]
|
||||
text: I18n.tr("Device list scroll volume")
|
||||
description: I18n.tr("Allow adjusting device volume by scrolling on the right half of items in the device list")
|
||||
checked: SettingsData.audioDeviceScrollVolumeEnabled
|
||||
|
||||
@@ -80,6 +80,7 @@ Item {
|
||||
SettingsCard {
|
||||
tab: "mux"
|
||||
tags: ["mux", "session", "filter", "exclude", "hide"]
|
||||
settingKey: "muxSessionFilter"
|
||||
title: I18n.tr("Session Filter")
|
||||
iconName: "filter_list"
|
||||
|
||||
|
||||
@@ -89,6 +89,8 @@ Item {
|
||||
}
|
||||
|
||||
SettingsDropdownRow {
|
||||
settingKey: "systemUpdaterCheckInterval"
|
||||
tags: ["interval", "poll", "frequency"]
|
||||
text: I18n.tr("Check interval")
|
||||
description: I18n.tr("How often the server polls for new updates.")
|
||||
options: root.intervalOptions.map(o => o.label).concat([root.customIntervalLabel])
|
||||
@@ -157,6 +159,8 @@ Item {
|
||||
}
|
||||
|
||||
SettingsToggleRow {
|
||||
settingKey: "systemUpdaterCheckOnStart"
|
||||
tags: ["startup", "check", "boot"]
|
||||
text: I18n.tr("Check on startup")
|
||||
description: I18n.tr("When enabled, checks updates on startup. When disabled, only the interval above or a manual refresh runs a check.")
|
||||
checked: SettingsData.updaterCheckOnStart
|
||||
@@ -164,6 +168,8 @@ Item {
|
||||
}
|
||||
|
||||
SettingsToggleRow {
|
||||
settingKey: "systemUpdaterFlatpak"
|
||||
tags: ["flatpak", "include"]
|
||||
text: I18n.tr("Include Flatpak updates")
|
||||
description: I18n.tr("Apply Flatpak updates alongside system updates when running 'Update All'.")
|
||||
visible: (SystemUpdateService.backends || []).some(b => b.repo === "flatpak")
|
||||
@@ -172,6 +178,8 @@ Item {
|
||||
}
|
||||
|
||||
SettingsToggleRow {
|
||||
settingKey: "systemUpdaterAUR"
|
||||
tags: ["aur", "paru", "yay"]
|
||||
text: I18n.tr("Include AUR updates")
|
||||
description: I18n.tr("Run paru/yay with AUR enabled when 'Update All' is clicked.")
|
||||
visible: (SystemUpdateService.backends || []).some(b => b.id === "paru" || b.id === "yay")
|
||||
@@ -328,6 +336,8 @@ Item {
|
||||
settingKey: "systemUpdaterAdvanced"
|
||||
|
||||
SettingsToggleRow {
|
||||
settingKey: "systemUpdaterCustomCommand"
|
||||
tags: ["custom", "command", "terminal"]
|
||||
text: I18n.tr("Use Custom Command")
|
||||
description: I18n.tr("Open a terminal and run a custom command instead of the in-shell upgrade flow.")
|
||||
checked: SettingsData.updaterUseCustomCommand
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user