mirror of
https://github.com/zoriya/noctalia-shell.git
synced 2026-08-15 18:43:59 +00:00
Merge pull request #480 from Sighthesia/main
feat(taskbar): add auto hide mode functionality for taskbar widget
This commit is contained in:
@@ -1107,6 +1107,10 @@
|
||||
}
|
||||
},
|
||||
"taskbar": {
|
||||
"hide-mode": {
|
||||
"label": "Ausblendmodus",
|
||||
"description": "Steuert das Verhalten des Widgets, wenn keine übereinstimmenden Fenster vorhanden sind."
|
||||
},
|
||||
"only-active-workspaces": {
|
||||
"label": "Nur von aktiven Arbeitsbereichen",
|
||||
"description": "Zeige nur Apps von aktiven Arbeitsbereichen an."
|
||||
@@ -1619,4 +1623,4 @@
|
||||
"description": "Das Control-Center-Widget wurde aus der Leiste entfernt. Um es erneut über die Leiste zu öffnen, fügen Sie das Widget wieder hinzu. Sie können es auch durch Rechtsklick auf die Leiste öffnen."
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
+26
-23
@@ -59,7 +59,6 @@
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
},
|
||||
"audio": {
|
||||
"title": "Audio",
|
||||
@@ -722,29 +721,29 @@
|
||||
}
|
||||
},
|
||||
"control-center": {
|
||||
"title": "Control Center",
|
||||
"title": "Control Center",
|
||||
"section": {
|
||||
"label": "Appearance",
|
||||
"description": "Configure the Control Center panel positioning and behavior."
|
||||
},
|
||||
"position": {
|
||||
"label": "Position",
|
||||
"description": "Choose where the Control Center panel appears when opened."
|
||||
},
|
||||
"cards": {
|
||||
"section": {
|
||||
"label": "Appearance",
|
||||
"description": "Configure the Control Center panel positioning and behavior."
|
||||
},
|
||||
"position": {
|
||||
"label": "Position",
|
||||
"description": "Choose where the Control Center panel appears when opened."
|
||||
},
|
||||
"cards": {
|
||||
"section": {
|
||||
"label": "Cards",
|
||||
"description": "Customize which controls appear in the Control Center and in what order."
|
||||
}
|
||||
},
|
||||
"shortcuts": {
|
||||
"section": {
|
||||
"label": "Shortcuts widgets",
|
||||
"description": "Configure and manage the shortcuts widgets."
|
||||
},
|
||||
"sectionLeft": "Left",
|
||||
"sectionRight": "Right"
|
||||
"label": "Cards",
|
||||
"description": "Customize which controls appear in the Control Center and in what order."
|
||||
}
|
||||
},
|
||||
"shortcuts": {
|
||||
"section": {
|
||||
"label": "Shortcuts widgets",
|
||||
"description": "Configure and manage the shortcuts widgets."
|
||||
},
|
||||
"sectionLeft": "Left",
|
||||
"sectionRight": "Right"
|
||||
}
|
||||
},
|
||||
"user-interface": {
|
||||
"title": "User interface",
|
||||
@@ -1091,6 +1090,10 @@
|
||||
"preview": "Preview"
|
||||
},
|
||||
"taskbar": {
|
||||
"hide-mode": {
|
||||
"label": "Hiding mode",
|
||||
"description": "Controls how the widget behaves when there are no matching windows."
|
||||
},
|
||||
"only-active-workspaces": {
|
||||
"label": "Only from active workspaces",
|
||||
"description": "Show only apps from active workspaces."
|
||||
@@ -1620,4 +1623,4 @@
|
||||
"disabled": "Battery manager disabled"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1090,6 +1090,10 @@
|
||||
}
|
||||
},
|
||||
"taskbar": {
|
||||
"hide-mode": {
|
||||
"label": "Modo de ocultación",
|
||||
"description": "Controla cómo se comporta el widget cuando no hay ventanas coincidentes."
|
||||
},
|
||||
"only-active-workspaces": {
|
||||
"description": "Mostrar solo las aplicaciones de los espacios de trabajo activos.",
|
||||
"label": "Solo desde espacios de trabajo activos"
|
||||
@@ -1619,4 +1623,4 @@
|
||||
"disabled": "Administrador de batería deshabilitado"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1090,6 +1090,10 @@
|
||||
}
|
||||
},
|
||||
"taskbar": {
|
||||
"hide-mode": {
|
||||
"label": "Mode de masquage",
|
||||
"description": "Contrôle le comportement du widget lorsqu'il n'y a pas de fenêtres correspondantes."
|
||||
},
|
||||
"only-active-workspaces": {
|
||||
"description": "Afficher uniquement les applications des espaces de travail actifs.",
|
||||
"label": "Seulement depuis les espaces de travail actifs."
|
||||
@@ -1619,4 +1623,4 @@
|
||||
"disabled": "Gestionnaire de batterie désactivé"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1101,6 +1101,10 @@
|
||||
"colorize-icons": {
|
||||
"label": "Colorir ícones",
|
||||
"description": "Aplicar cores do tema aos ícones da barra de tarefas."
|
||||
},
|
||||
"hide-mode": {
|
||||
"label": "Modo de ocultação",
|
||||
"description": "Controla como o widget se comporta quando não há janelas correspondentes."
|
||||
}
|
||||
},
|
||||
"tray": {
|
||||
@@ -1625,4 +1629,4 @@
|
||||
"uninstall-failed": "Falha na desinstalação"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1090,6 +1090,10 @@
|
||||
}
|
||||
},
|
||||
"taskbar": {
|
||||
"hide-mode": {
|
||||
"label": "隐藏模式",
|
||||
"description": "当没有匹配的窗口时控制小部件的行为。"
|
||||
},
|
||||
"only-active-workspaces": {
|
||||
"label": "仅显示活动工作区",
|
||||
"description": "仅显示来自活动工作区的应用程序"
|
||||
@@ -1619,4 +1623,4 @@
|
||||
"disabled": "电池管理器已禁用"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -20,7 +20,7 @@ Rectangle {
|
||||
property int sectionWidgetsCount: 0
|
||||
|
||||
readonly property bool isVerticalBar: Settings.data.bar.position === "left" || Settings.data.bar.position === "right"
|
||||
readonly property bool density: Settings.data.bar.density
|
||||
readonly property string density: Settings.data.bar.density
|
||||
readonly property real itemSize: (density === "compact") ? Style.capsuleHeight * 0.9 : Style.capsuleHeight * 0.8
|
||||
|
||||
property var widgetMetadata: BarWidgetRegistry.widgetMetadata[widgetId]
|
||||
@@ -34,9 +34,49 @@ Rectangle {
|
||||
return {}
|
||||
}
|
||||
|
||||
// Always visible when there are toplevels
|
||||
implicitWidth: isVerticalBar ? Style.capsuleHeight : Math.round(taskbarLayout.implicitWidth + Style.marginM * 2)
|
||||
implicitHeight: isVerticalBar ? Math.round(taskbarLayout.implicitHeight + Style.marginM * 2) : Style.capsuleHeight
|
||||
readonly property string hideMode: (widgetSettings.hideMode !== undefined) ? widgetSettings.hideMode : widgetMetadata.hideMode
|
||||
|
||||
property bool hasWindow: false
|
||||
readonly property bool onlySameOutput: (widgetSettings.onlySameOutput !== undefined) ? widgetSettings.onlySameOutput : (widgetMetadata.onlySameOutput !== undefined ? widgetMetadata.onlySameOutput : false)
|
||||
readonly property bool onlyActiveWorkspaces: (widgetSettings.onlyActiveWorkspaces !== undefined) ? widgetSettings.onlyActiveWorkspaces : (widgetMetadata.onlyActiveWorkspaces !== undefined ? widgetMetadata.onlyActiveWorkspaces : false)
|
||||
|
||||
function updateHasWindow() {
|
||||
try {
|
||||
var total = CompositorService.windows.count || 0
|
||||
var activeIds = CompositorService.getActiveWorkspaces().map(function(ws) { return ws.id })
|
||||
var found = false
|
||||
for (var i = 0; i < total; i++) {
|
||||
var w = CompositorService.windows.get(i)
|
||||
if (!w)
|
||||
continue
|
||||
var passOutput = (!onlySameOutput) || (w.output == screen.name)
|
||||
var passWorkspace = (!onlyActiveWorkspaces) || (activeIds.includes(w.workspaceId))
|
||||
if (passOutput && passWorkspace) {
|
||||
found = true
|
||||
break
|
||||
}
|
||||
}
|
||||
hasWindow = found
|
||||
} catch (e) {
|
||||
hasWindow = false
|
||||
}
|
||||
}
|
||||
|
||||
Component.onCompleted: updateHasWindow()
|
||||
Connections {
|
||||
target: CompositorService
|
||||
function onWindowListChanged() { updateHasWindow() }
|
||||
function onWorkspaceChanged() { updateHasWindow() }
|
||||
}
|
||||
onScreenChanged: updateHasWindow()
|
||||
|
||||
// "visible": Always Visible, "hidden": Hide When Empty, "transparent": Transparent When Empty
|
||||
visible: hideMode !== "hidden" || hasWindow
|
||||
opacity: (hideMode !== "transparent" || hasWindow) ? 1.0 : 0
|
||||
Behavior on opacity { NumberAnimation { duration: Style.animationNormal; easing.type: Easing.OutCubic } }
|
||||
|
||||
implicitWidth: visible ? (isVerticalBar ? Style.capsuleHeight : Math.round(taskbarLayout.implicitWidth + Style.marginM * 2)) : 0
|
||||
implicitHeight: visible ? (isVerticalBar ? Math.round(taskbarLayout.implicitHeight + Style.marginM * 2) : Style.capsuleHeight) : 0
|
||||
radius: Style.radiusM
|
||||
color: Settings.data.bar.showCapsule ? Color.mSurfaceVariant : Color.transparent
|
||||
|
||||
@@ -64,7 +104,7 @@ Rectangle {
|
||||
required property var modelData
|
||||
property ShellScreen screen: root.screen
|
||||
|
||||
visible: (!widgetSettings.onlySameOutput || modelData.output == screen.name) && (!widgetSettings.onlyActiveWorkspaces || CompositorService.getActiveWorkspaces().map(ws => ws.id).includes(modelData.workspaceId))
|
||||
visible: (!onlySameOutput || modelData.output == screen.name) && (!onlyActiveWorkspaces || CompositorService.getActiveWorkspaces().map(function(ws){ return ws.id }).includes(modelData.workspaceId))
|
||||
|
||||
Layout.preferredWidth: root.itemSize
|
||||
Layout.preferredHeight: root.itemSize
|
||||
|
||||
@@ -14,18 +14,46 @@ ColumnLayout {
|
||||
property var widgetMetadata: null
|
||||
|
||||
// Local state
|
||||
property string valueHideMode: "hidden"
|
||||
property bool valueOnlyActiveWorkspaces: widgetData.onlyActiveWorkspaces !== undefined ? widgetData.onlyActiveWorkspaces : widgetMetadata.onlyActiveWorkspaces
|
||||
property bool valueOnlySameOutput: widgetData.onlySameOutput !== undefined ? widgetData.onlySameOutput : widgetMetadata.onlySameOutput
|
||||
property bool valueColorizeIcons: widgetData.colorizeIcons !== undefined ? widgetData.colorizeIcons : widgetMetadata.colorizeIcons
|
||||
|
||||
Component.onCompleted: {
|
||||
if (widgetData && widgetData.hideMode !== undefined) {
|
||||
valueHideMode = widgetData.hideMode
|
||||
} else if (widgetMetadata && widgetMetadata.hideMode !== undefined) {
|
||||
valueHideMode = widgetMetadata.hideMode
|
||||
}
|
||||
}
|
||||
|
||||
function saveSettings() {
|
||||
var settings = Object.assign({}, widgetData || {})
|
||||
settings.hideMode = valueHideMode
|
||||
settings.onlySameOutput = valueOnlySameOutput
|
||||
settings.onlyActiveWorkspaces = valueOnlyActiveWorkspaces
|
||||
settings.colorizeIcons = valueColorizeIcons
|
||||
return settings
|
||||
}
|
||||
|
||||
NComboBox {
|
||||
Layout.fillWidth: true
|
||||
label: I18n.tr("bar.widget-settings.taskbar.hide-mode.label")
|
||||
description: I18n.tr("bar.widget-settings.taskbar.hide-mode.description")
|
||||
model: [{
|
||||
"key": "visible",
|
||||
"name": I18n.tr("options.hide-modes.visible")
|
||||
}, {
|
||||
"key": "hidden",
|
||||
"name": I18n.tr("options.hide-modes.hidden")
|
||||
}, {
|
||||
"key": "transparent",
|
||||
"name": I18n.tr("options.hide-modes.transparent")
|
||||
}]
|
||||
currentKey: root.valueHideMode
|
||||
onSelected: key => root.valueHideMode = key
|
||||
}
|
||||
|
||||
NToggle {
|
||||
Layout.fillWidth: true
|
||||
label: I18n.tr("bar.widget-settings.taskbar.only-same-output.label")
|
||||
|
||||
@@ -118,6 +118,7 @@ Singleton {
|
||||
"allowUserSettings": true,
|
||||
"onlySameOutput": true,
|
||||
"onlyActiveWorkspaces": true,
|
||||
"hideMode": "hidden",
|
||||
"colorizeIcons": false
|
||||
},
|
||||
"Tray": {
|
||||
|
||||
Reference in New Issue
Block a user