feat(bar): add workspace numbers to TaskbarGrouped widget

Add workspace number badges to TaskbarGrouped widget that display in the
top-left corner of task groups, similar to existing Workspace widget
styling.

Features:
- Circular workspace number badges with negative margins for border overlap
- Color states: focused (primary), urgent (error), occupied (secondary), empty (outline)
- Burst animation effects when workspace becomes focused
- User-configurable settings: showWorkspaceNumbers, showNumbersOnlyWhenOccupied
- Comprehensive internationalization support for all supported locales

Implementation:
- Enhanced TaskbarGrouped.qml with workspace number display and animation system
- Created TaskbarGroupedSettings.qml for user configuration
- Updated BarWidgetRegistry.qml with default settings metadata
- Added settings dialog mapping in BarWidgetSettingsDialog.qml
- Added translations for all supported locales (en, de, es, fr, pt, zh-CN, uk-UA)

The workspace numbers provide quick visual identification of workspace
assignment while maintaining the clean aesthetic of the taskbar.
This commit is contained in:
Ahmet Çetinkaya
2025-11-03 15:54:24 +03:00
parent 5ca5aa602f
commit 9c1bce0fe4
11 changed files with 281 additions and 1 deletions
@@ -134,6 +134,7 @@ Popup {
"NotificationHistory": "WidgetSettings/NotificationHistorySettings.qml",
"Spacer": "WidgetSettings/SpacerSettings.qml",
"SystemMonitor": "WidgetSettings/SystemMonitorSettings.qml",
"TaskbarGrouped": "WidgetSettings/TaskbarGroupedSettings.qml",
"Volume": "WidgetSettings/VolumeSettings.qml",
"WiFi": "WidgetSettings/WiFiSettings.qml",
"Workspace": "WidgetSettings/WorkspaceSettings.qml",
@@ -0,0 +1,42 @@
import QtQuick
import QtQuick.Controls
import QtQuick.Layouts
import qs.Commons
import qs.Widgets
import qs.Services
ColumnLayout {
id: root
spacing: Style.marginM
// Properties to receive data from parent
property var widgetData: null
property var widgetMetadata: null
property bool valueShowWorkspaceNumbers: widgetData.showWorkspaceNumbers !== undefined ? widgetData.showWorkspaceNumbers : widgetMetadata.showWorkspaceNumbers
property bool valueShowNumbersOnlyWhenOccupied: widgetData.showNumbersOnlyWhenOccupied !== undefined ? widgetData.showNumbersOnlyWhenOccupied : widgetMetadata.showNumbersOnlyWhenOccupied
function saveSettings() {
var settings = Object.assign({}, widgetData || {})
settings.showWorkspaceNumbers = valueShowWorkspaceNumbers
settings.showNumbersOnlyWhenOccupied = valueShowNumbersOnlyWhenOccupied
return settings
}
NToggle {
Layout.fillWidth: true
label: I18n.tr("bar.widget-settings.taskbar-grouped.show-workspace-numbers.label")
description: I18n.tr("bar.widget-settings.taskbar-grouped.show-workspace-numbers.description")
checked: root.valueShowWorkspaceNumbers
onToggled: checked => root.valueShowWorkspaceNumbers = checked
}
NToggle {
Layout.fillWidth: true
label: I18n.tr("bar.widget-settings.taskbar-grouped.show-numbers-only-when-occupied.label")
description: I18n.tr("bar.widget-settings.taskbar-grouped.show-numbers-only-when-occupied.description")
checked: root.valueShowNumbersOnlyWhenOccupied
onToggled: checked => root.valueShowNumbersOnlyWhenOccupied = checked
visible: root.valueShowWorkspaceNumbers
}
}