mirror of
https://github.com/zoriya/noctalia-shell.git
synced 2026-08-15 18:43:59 +00:00
Dock: behave the same as bar (shows on all displays if no display is selected)
DockTab: add Enable toggle (default true) SetupDockStep: add Dock settings to setup wizard SetupWizard: add SetupDockStep i18n: add dock translations
This commit is contained in:
@@ -257,6 +257,10 @@
|
||||
},
|
||||
"dock": {
|
||||
"title": "Dock",
|
||||
"enabled": {
|
||||
"label": "Dock aktivieren",
|
||||
"description": "Dock vollständig anzeigen oder ausblenden"
|
||||
},
|
||||
"appearance": {
|
||||
"section": {
|
||||
"label": "Erscheinungsbild",
|
||||
|
||||
@@ -257,6 +257,10 @@
|
||||
},
|
||||
"dock": {
|
||||
"title": "Dock",
|
||||
"enabled": {
|
||||
"label": "Enable dock",
|
||||
"description": "Show or hide the dock entirely"
|
||||
},
|
||||
"appearance": {
|
||||
"section": {
|
||||
"label": "Appearance",
|
||||
|
||||
@@ -257,6 +257,10 @@
|
||||
},
|
||||
"dock": {
|
||||
"title": "Dock",
|
||||
"enabled": {
|
||||
"label": "Habilitar dock",
|
||||
"description": "Mostrar u ocultar el dock por completo"
|
||||
},
|
||||
"appearance": {
|
||||
"section": {
|
||||
"label": "Apariencia",
|
||||
|
||||
@@ -257,6 +257,10 @@
|
||||
},
|
||||
"dock": {
|
||||
"title": "Dock",
|
||||
"enabled": {
|
||||
"label": "Activer le dock",
|
||||
"description": "Afficher ou masquer complètement le dock"
|
||||
},
|
||||
"appearance": {
|
||||
"section": {
|
||||
"label": "Apparence",
|
||||
|
||||
@@ -257,6 +257,10 @@
|
||||
},
|
||||
"dock": {
|
||||
"title": "Dock",
|
||||
"enabled": {
|
||||
"label": "Ativar dock",
|
||||
"description": "Mostrar ou ocultar o dock completamente"
|
||||
},
|
||||
"appearance": {
|
||||
"section": {
|
||||
"label": "Aparência",
|
||||
|
||||
@@ -257,6 +257,10 @@
|
||||
},
|
||||
"dock": {
|
||||
"title": "Dock",
|
||||
"enabled": {
|
||||
"label": "启用 Dock",
|
||||
"description": "完全显示或隐藏 Dock"
|
||||
},
|
||||
"appearance": {
|
||||
"section": {
|
||||
"label": "外观",
|
||||
|
||||
@@ -172,6 +172,7 @@
|
||||
]
|
||||
},
|
||||
"dock": {
|
||||
"enabled": true,
|
||||
"displayMode": "always_visible",
|
||||
"backgroundOpacity": 1,
|
||||
"floatingRatio": 1,
|
||||
|
||||
@@ -296,6 +296,7 @@ Singleton {
|
||||
|
||||
// dock
|
||||
property JsonObject dock: JsonObject {
|
||||
property bool enabled: true
|
||||
property string displayMode: "always_visible" // "always_visible", "auto_hide", "exclusive"
|
||||
property real backgroundOpacity: 1.0
|
||||
property real floatingRatio: 1.0
|
||||
|
||||
@@ -186,7 +186,7 @@ Variants {
|
||||
|
||||
// PEEK WINDOW - Always visible when auto-hide is enabled
|
||||
Loader {
|
||||
active: (barIsReady || !hasBar) && modelData && Settings.data.dock.monitors.includes(modelData.name) && autoHide
|
||||
active: Settings.data.dock.enabled && (barIsReady || !hasBar) && modelData && (Settings.data.dock.monitors.length === 0 || Settings.data.dock.monitors.includes(modelData.name)) && autoHide
|
||||
|
||||
sourceComponent: PanelWindow {
|
||||
id: peekWindow
|
||||
@@ -226,7 +226,7 @@ Variants {
|
||||
|
||||
// DOCK WINDOW
|
||||
Loader {
|
||||
active: (barIsReady || !hasBar) && modelData && Settings.data.dock.monitors.includes(modelData.name) && dockLoaded && ToplevelManager && (dockApps.length > 0)
|
||||
active: Settings.data.dock.enabled && (barIsReady || !hasBar) && modelData && (Settings.data.dock.monitors.length === 0 || Settings.data.dock.monitors.includes(modelData.name)) && dockLoaded && ToplevelManager && (dockApps.length > 0)
|
||||
|
||||
sourceComponent: PanelWindow {
|
||||
id: dockWindow
|
||||
|
||||
@@ -29,7 +29,16 @@ ColumnLayout {
|
||||
description: I18n.tr("settings.dock.appearance.section.description")
|
||||
}
|
||||
|
||||
NToggle {
|
||||
Layout.fillWidth: true
|
||||
label: I18n.tr("settings.dock.enabled.label")
|
||||
description: I18n.tr("settings.dock.enabled.description")
|
||||
checked: Settings.data.dock.enabled
|
||||
onToggled: checked => Settings.data.dock.enabled = checked
|
||||
}
|
||||
|
||||
NComboBox {
|
||||
visible: Settings.data.dock.enabled
|
||||
Layout.fillWidth: true
|
||||
label: I18n.tr("settings.dock.appearance.display.label")
|
||||
description: I18n.tr("settings.dock.appearance.display.description")
|
||||
@@ -50,6 +59,7 @@ ColumnLayout {
|
||||
}
|
||||
|
||||
ColumnLayout {
|
||||
visible: Settings.data.dock.enabled
|
||||
spacing: Style.marginXXS
|
||||
Layout.fillWidth: true
|
||||
NLabel {
|
||||
@@ -68,6 +78,7 @@ ColumnLayout {
|
||||
}
|
||||
|
||||
ColumnLayout {
|
||||
visible: Settings.data.dock.enabled
|
||||
spacing: Style.marginXXS
|
||||
Layout.fillWidth: true
|
||||
|
||||
@@ -88,6 +99,7 @@ ColumnLayout {
|
||||
}
|
||||
|
||||
ColumnLayout {
|
||||
visible: Settings.data.dock.enabled
|
||||
spacing: Style.marginXXS
|
||||
Layout.fillWidth: true
|
||||
NLabel {
|
||||
@@ -106,6 +118,7 @@ ColumnLayout {
|
||||
}
|
||||
|
||||
NToggle {
|
||||
visible: Settings.data.dock.enabled
|
||||
label: I18n.tr("settings.dock.monitors.only-same-output.label")
|
||||
description: I18n.tr("settings.dock.monitors.only-same-output.description")
|
||||
checked: Settings.data.dock.onlySameOutput
|
||||
@@ -113,6 +126,7 @@ ColumnLayout {
|
||||
}
|
||||
|
||||
NToggle {
|
||||
visible: Settings.data.dock.enabled
|
||||
Layout.fillWidth: true
|
||||
label: I18n.tr("settings.dock.appearance.colorize-icons.label")
|
||||
description: I18n.tr("settings.dock.appearance.colorize-icons.description")
|
||||
@@ -121,6 +135,7 @@ ColumnLayout {
|
||||
}
|
||||
|
||||
NDivider {
|
||||
visible: Settings.data.dock.enabled
|
||||
Layout.fillWidth: true
|
||||
Layout.topMargin: Style.marginXL
|
||||
Layout.bottomMargin: Style.marginXL
|
||||
@@ -128,6 +143,7 @@ ColumnLayout {
|
||||
|
||||
// Monitor Configuration
|
||||
ColumnLayout {
|
||||
visible: Settings.data.dock.enabled
|
||||
spacing: Style.marginM
|
||||
Layout.fillWidth: true
|
||||
|
||||
@@ -163,6 +179,7 @@ ColumnLayout {
|
||||
}
|
||||
|
||||
NDivider {
|
||||
visible: Settings.data.dock.enabled
|
||||
Layout.fillWidth: true
|
||||
Layout.topMargin: Style.marginXL
|
||||
Layout.bottomMargin: Style.marginXL
|
||||
|
||||
@@ -0,0 +1,202 @@
|
||||
import QtQuick
|
||||
import QtQuick.Layouts
|
||||
import QtQuick.Controls
|
||||
import Quickshell
|
||||
import qs.Commons
|
||||
import qs.Services
|
||||
import qs.Widgets
|
||||
|
||||
ColumnLayout {
|
||||
id: root
|
||||
|
||||
spacing: Style.marginM
|
||||
|
||||
// Header
|
||||
RowLayout {
|
||||
Layout.fillWidth: true
|
||||
Layout.bottomMargin: Style.marginL
|
||||
spacing: Style.marginM
|
||||
|
||||
Rectangle {
|
||||
width: 40
|
||||
height: 40
|
||||
radius: Style.radiusL
|
||||
color: Color.mSurfaceVariant
|
||||
opacity: 0.6
|
||||
|
||||
NIcon {
|
||||
icon: "device-desktop"
|
||||
pointSize: Style.fontSizeL
|
||||
color: Color.mPrimary
|
||||
anchors.centerIn: parent
|
||||
}
|
||||
}
|
||||
|
||||
ColumnLayout {
|
||||
Layout.fillWidth: true
|
||||
spacing: Style.marginXS
|
||||
|
||||
NText {
|
||||
text: I18n.tr("settings.dock.title") || "Dock"
|
||||
pointSize: Style.fontSizeXL
|
||||
font.weight: Style.fontWeightBold
|
||||
color: Color.mPrimary
|
||||
}
|
||||
|
||||
NText {
|
||||
text: I18n.tr("settings.dock.monitors.section.description")
|
||||
pointSize: Style.fontSizeM
|
||||
color: Color.mOnSurfaceVariant
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Options
|
||||
ColumnLayout {
|
||||
Layout.fillWidth: true
|
||||
spacing: Style.marginL
|
||||
|
||||
NToggle {
|
||||
Layout.fillWidth: true
|
||||
label: I18n.tr("settings.dock.enabled.label")
|
||||
description: I18n.tr("settings.dock.enabled.description")
|
||||
checked: Settings.data.dock.enabled
|
||||
onToggled: checked => Settings.data.dock.enabled = checked
|
||||
}
|
||||
|
||||
// Display behavior
|
||||
NComboBox {
|
||||
visible: Settings.data.dock.enabled
|
||||
Layout.fillWidth: true
|
||||
label: I18n.tr("settings.dock.appearance.display.label")
|
||||
description: I18n.tr("settings.dock.appearance.display.description")
|
||||
model: [{
|
||||
"key": "always_visible",
|
||||
"name": I18n.tr("settings.dock.appearance.display.always-visible")
|
||||
}, {
|
||||
"key": "auto_hide",
|
||||
"name": I18n.tr("settings.dock.appearance.display.auto-hide")
|
||||
}, {
|
||||
"key": "exclusive",
|
||||
"name": I18n.tr("settings.dock.appearance.display.exclusive")
|
||||
}]
|
||||
currentKey: Settings.data.dock.displayMode
|
||||
onSelected: key => Settings.data.dock.displayMode = key
|
||||
}
|
||||
|
||||
// Background opacity
|
||||
ColumnLayout {
|
||||
visible: Settings.data.dock.enabled
|
||||
spacing: Style.marginXXS
|
||||
Layout.fillWidth: true
|
||||
NLabel {
|
||||
label: I18n.tr("settings.dock.appearance.background-opacity.label")
|
||||
description: I18n.tr("settings.dock.appearance.background-opacity.description")
|
||||
}
|
||||
NValueSlider {
|
||||
Layout.fillWidth: true
|
||||
from: 0
|
||||
to: 1
|
||||
stepSize: 0.01
|
||||
value: Settings.data.dock.backgroundOpacity
|
||||
onMoved: value => Settings.data.dock.backgroundOpacity = value
|
||||
text: Math.floor(Settings.data.dock.backgroundOpacity * 100) + "%"
|
||||
}
|
||||
}
|
||||
|
||||
// Floating distance
|
||||
ColumnLayout {
|
||||
visible: Settings.data.dock.enabled
|
||||
spacing: Style.marginXXS
|
||||
Layout.fillWidth: true
|
||||
NLabel {
|
||||
label: I18n.tr("settings.dock.appearance.floating-distance.label")
|
||||
description: I18n.tr("settings.dock.appearance.floating-distance.description")
|
||||
}
|
||||
NValueSlider {
|
||||
Layout.fillWidth: true
|
||||
from: 0
|
||||
to: 4
|
||||
stepSize: 0.01
|
||||
value: Settings.data.dock.floatingRatio
|
||||
onMoved: value => Settings.data.dock.floatingRatio = value
|
||||
text: Math.floor(Settings.data.dock.floatingRatio * 100) + "%"
|
||||
}
|
||||
}
|
||||
|
||||
// Icon size
|
||||
ColumnLayout {
|
||||
visible: Settings.data.dock.enabled
|
||||
spacing: Style.marginXXS
|
||||
Layout.fillWidth: true
|
||||
NLabel {
|
||||
label: I18n.tr("settings.dock.appearance.icon-size.label")
|
||||
description: I18n.tr("settings.dock.appearance.icon-size.description")
|
||||
}
|
||||
NValueSlider {
|
||||
Layout.fillWidth: true
|
||||
from: 0
|
||||
to: 2
|
||||
stepSize: 0.01
|
||||
value: Settings.data.dock.size
|
||||
onMoved: value => Settings.data.dock.size = value
|
||||
text: Math.floor(Settings.data.dock.size * 100) + "%"
|
||||
}
|
||||
}
|
||||
|
||||
NToggle {
|
||||
visible: Settings.data.dock.enabled
|
||||
Layout.fillWidth: true
|
||||
label: I18n.tr("settings.dock.monitors.only-same-output.label")
|
||||
description: I18n.tr("settings.dock.monitors.only-same-output.description")
|
||||
checked: Settings.data.dock.onlySameOutput
|
||||
onToggled: checked => Settings.data.dock.onlySameOutput = checked
|
||||
}
|
||||
|
||||
NToggle {
|
||||
visible: Settings.data.dock.enabled
|
||||
Layout.fillWidth: true
|
||||
label: I18n.tr("settings.dock.appearance.colorize-icons.label")
|
||||
description: I18n.tr("settings.dock.appearance.colorize-icons.description")
|
||||
checked: Settings.data.dock.colorizeIcons
|
||||
onToggled: checked => Settings.data.dock.colorizeIcons = checked
|
||||
}
|
||||
|
||||
NHeader {
|
||||
visible: Settings.data.dock.enabled
|
||||
label: I18n.tr("settings.dock.monitors.section.label")
|
||||
description: I18n.tr("settings.dock.monitors.section.description")
|
||||
}
|
||||
|
||||
Repeater {
|
||||
visible: Settings.data.dock.enabled
|
||||
model: Quickshell.screens || []
|
||||
delegate: NCheckbox {
|
||||
Layout.fillWidth: true
|
||||
label: modelData.name || "Unknown"
|
||||
description: {
|
||||
const compositorScale = CompositorService.getDisplayScale(modelData.name)
|
||||
I18n.tr("system.monitor-description", {
|
||||
"model": modelData.model,
|
||||
"width": modelData.width * compositorScale,
|
||||
"height": modelData.height * compositorScale,
|
||||
"scale": compositorScale
|
||||
})
|
||||
}
|
||||
checked: (Settings.data.dock.monitors || []).indexOf(modelData.name) !== -1
|
||||
onToggled: checked => {
|
||||
if (checked) {
|
||||
const arr = (Settings.data.dock.monitors || []).slice()
|
||||
if (arr.indexOf(modelData.name) === -1)
|
||||
arr.push(modelData.name)
|
||||
Settings.data.dock.monitors = arr
|
||||
} else {
|
||||
Settings.data.dock.monitors = (Settings.data.dock.monitors || []).filter(function (n) {
|
||||
return n !== modelData.name
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -23,7 +23,7 @@ NPanel {
|
||||
draggable: false
|
||||
|
||||
property int currentStep: 0
|
||||
property int totalSteps: 4
|
||||
property int totalSteps: 5
|
||||
|
||||
// Setup wizard data
|
||||
property string selectedWallpaperDirectory: Settings.defaultWallpapersDirectory
|
||||
@@ -214,7 +214,12 @@ NPanel {
|
||||
}
|
||||
}
|
||||
|
||||
// Step 3: Appearance - Dark mode and color source
|
||||
// Step 3: Dock Setup
|
||||
SetupDockStep {
|
||||
id: stepDock
|
||||
}
|
||||
|
||||
// Step 4: Appearance - Dark mode and color source
|
||||
SetupAppearanceStep {
|
||||
id: step3
|
||||
}
|
||||
@@ -248,6 +253,9 @@ NPanel {
|
||||
}, {
|
||||
"icon": "settings",
|
||||
"label": "Customize"
|
||||
}, {
|
||||
"icon": "device-desktop",
|
||||
"label": "Dock"
|
||||
}, {
|
||||
"icon": "palette",
|
||||
"label": "Appearance"
|
||||
|
||||
Reference in New Issue
Block a user