From c82414047191351d6b859cc7276c7bda7a8c46a2 Mon Sep 17 00:00:00 2001 From: Corey Woodworth <8398380+MrDowntempo@users.noreply.github.com> Date: Tue, 31 Mar 2026 13:12:22 -0400 Subject: [PATCH] fix: Add showText to BarWidgetRegistry and settings-widgets-default --- Assets/settings-widgets-default.json | 5 +- Services/UI/BarWidgetRegistry.qml | 959 ++++++++++++++------------- 2 files changed, 483 insertions(+), 481 deletions(-) diff --git a/Assets/settings-widgets-default.json b/Assets/settings-widgets-default.json index d810117ff..eeb2c07a7 100644 --- a/Assets/settings-widgets-default.json +++ b/Assets/settings-widgets-default.json @@ -2,6 +2,7 @@ "bar": { "ActiveWindow": { "showIcon": true, + "showText": true, "hideMode": "hidden", "scrollingMode": "hover", "maxWidth": 145, @@ -77,7 +78,7 @@ "maxTextLength": { "horizontal": 10, "vertical": 10 - }, + },"showIcon": true, "enableColorization": false, "colorizeSystemIcon": "none", "ipcIdentifier": "" @@ -291,4 +292,4 @@ "colorName": "primary" } } -} \ No newline at end of file +} diff --git a/Services/UI/BarWidgetRegistry.qml b/Services/UI/BarWidgetRegistry.qml index 2c0461da0..ba40372ed 100644 --- a/Services/UI/BarWidgetRegistry.qml +++ b/Services/UI/BarWidgetRegistry.qml @@ -6,497 +6,498 @@ import qs.Commons import qs.Modules.Bar.Widgets Singleton { - id: root + id: root - signal pluginWidgetRegistryUpdated + signal pluginWidgetRegistryUpdated - // Widget registry object mapping widget names to components - property var widgets: ({ - "ActiveWindow": activeWindowComponent, - "AudioVisualizer": audioVisualizerComponent, - "Battery": batteryComponent, - "Bluetooth": bluetoothComponent, - "Brightness": brightnessComponent, - "Clock": clockComponent, - "ControlCenter": controlCenterComponent, - "CustomButton": customButtonComponent, - "DarkMode": darkModeComponent, - "KeepAwake": keepAwakeComponent, - "KeyboardLayout": keyboardLayoutComponent, - "LockKeys": lockKeysComponent, - "Launcher": launcherComponent, - "MediaMini": mediaMiniComponent, - "Microphone": microphoneComponent, - "Network": networkComponent, - "NightLight": nightLightComponent, - "NoctaliaPerformance": noctaliaPerformanceComponent, - "NotificationHistory": notificationHistoryComponent, - "PowerProfile": powerProfileComponent, - "SessionMenu": sessionMenuComponent, - "Settings": settingsComponent, - "Spacer": spacerComponent, - "SystemMonitor": systemMonitorComponent, - "Taskbar": taskbarComponent, - "Tray": trayComponent, - "Volume": volumeComponent, - "VPN": vpnComponent, - "WallpaperSelector": wallpaperSelectorComponent, - "Workspace": workspaceComponent - }) + // Widget registry object mapping widget names to components + property var widgets: ({ + "ActiveWindow": activeWindowComponent, + "AudioVisualizer": audioVisualizerComponent, + "Battery": batteryComponent, + "Bluetooth": bluetoothComponent, + "Brightness": brightnessComponent, + "Clock": clockComponent, + "ControlCenter": controlCenterComponent, + "CustomButton": customButtonComponent, + "DarkMode": darkModeComponent, + "KeepAwake": keepAwakeComponent, + "KeyboardLayout": keyboardLayoutComponent, + "LockKeys": lockKeysComponent, + "Launcher": launcherComponent, + "MediaMini": mediaMiniComponent, + "Microphone": microphoneComponent, + "Network": networkComponent, + "NightLight": nightLightComponent, + "NoctaliaPerformance": noctaliaPerformanceComponent, + "NotificationHistory": notificationHistoryComponent, + "PowerProfile": powerProfileComponent, + "SessionMenu": sessionMenuComponent, + "Settings": settingsComponent, + "Spacer": spacerComponent, + "SystemMonitor": systemMonitorComponent, + "Taskbar": taskbarComponent, + "Tray": trayComponent, + "Volume": volumeComponent, + "VPN": vpnComponent, + "WallpaperSelector": wallpaperSelectorComponent, + "Workspace": workspaceComponent + }) - property var widgetSettingsMap: ({ - "ActiveWindow": "WidgetSettings/ActiveWindowSettings.qml", - "AudioVisualizer": "WidgetSettings/AudioVisualizerSettings.qml", - "Battery": "WidgetSettings/BatterySettings.qml", - "Bluetooth": "WidgetSettings/BluetoothSettings.qml", - "Brightness": "WidgetSettings/BrightnessSettings.qml", - "Clock": "WidgetSettings/ClockSettings.qml", - "ControlCenter": "WidgetSettings/ControlCenterSettings.qml", - "CustomButton": "WidgetSettings/CustomButtonSettings.qml", - "DarkMode": "WidgetSettings/DarkModeSettings.qml", - "KeepAwake": "WidgetSettings/KeepAwakeSettings.qml", - "KeyboardLayout": "WidgetSettings/KeyboardLayoutSettings.qml", - "Launcher": "WidgetSettings/LauncherSettings.qml", - "LockKeys": "WidgetSettings/LockKeysSettings.qml", - "MediaMini": "WidgetSettings/MediaMiniSettings.qml", - "Microphone": "WidgetSettings/MicrophoneSettings.qml", - "Network": "WidgetSettings/NetworkSettings.qml", - "NightLight": "WidgetSettings/NightLightSettings.qml", - "NoctaliaPerformance": "WidgetSettings/NoctaliaPerformanceSettings.qml", - "NotificationHistory": "WidgetSettings/NotificationHistorySettings.qml", - "PowerProfile": "WidgetSettings/PowerProfileSettings.qml", - "SessionMenu": "WidgetSettings/SessionMenuSettings.qml", - "Settings": "WidgetSettings/SettingsSettings.qml", - "Spacer": "WidgetSettings/SpacerSettings.qml", - "SystemMonitor": "WidgetSettings/SystemMonitorSettings.qml", - "Taskbar": "WidgetSettings/TaskbarSettings.qml", - "Tray": "WidgetSettings/TraySettings.qml", - "Volume": "WidgetSettings/VolumeSettings.qml", - "VPN": "WidgetSettings/VPNSettings.qml", - "WallpaperSelector": "WidgetSettings/WallpaperSelectorSettings.qml", - "Workspace": "WidgetSettings/WorkspaceSettings.qml" - }) + property var widgetSettingsMap: ({ + "ActiveWindow": "WidgetSettings/ActiveWindowSettings.qml", + "AudioVisualizer": "WidgetSettings/AudioVisualizerSettings.qml", + "Battery": "WidgetSettings/BatterySettings.qml", + "Bluetooth": "WidgetSettings/BluetoothSettings.qml", + "Brightness": "WidgetSettings/BrightnessSettings.qml", + "Clock": "WidgetSettings/ClockSettings.qml", + "ControlCenter": "WidgetSettings/ControlCenterSettings.qml", + "CustomButton": "WidgetSettings/CustomButtonSettings.qml", + "DarkMode": "WidgetSettings/DarkModeSettings.qml", + "KeepAwake": "WidgetSettings/KeepAwakeSettings.qml", + "KeyboardLayout": "WidgetSettings/KeyboardLayoutSettings.qml", + "Launcher": "WidgetSettings/LauncherSettings.qml", + "LockKeys": "WidgetSettings/LockKeysSettings.qml", + "MediaMini": "WidgetSettings/MediaMiniSettings.qml", + "Microphone": "WidgetSettings/MicrophoneSettings.qml", + "Network": "WidgetSettings/NetworkSettings.qml", + "NightLight": "WidgetSettings/NightLightSettings.qml", + "NoctaliaPerformance": "WidgetSettings/NoctaliaPerformanceSettings.qml", + "NotificationHistory": "WidgetSettings/NotificationHistorySettings.qml", + "PowerProfile": "WidgetSettings/PowerProfileSettings.qml", + "SessionMenu": "WidgetSettings/SessionMenuSettings.qml", + "Settings": "WidgetSettings/SettingsSettings.qml", + "Spacer": "WidgetSettings/SpacerSettings.qml", + "SystemMonitor": "WidgetSettings/SystemMonitorSettings.qml", + "Taskbar": "WidgetSettings/TaskbarSettings.qml", + "Tray": "WidgetSettings/TraySettings.qml", + "Volume": "WidgetSettings/VolumeSettings.qml", + "VPN": "WidgetSettings/VPNSettings.qml", + "WallpaperSelector": "WidgetSettings/WallpaperSelectorSettings.qml", + "Workspace": "WidgetSettings/WorkspaceSettings.qml" + }) - property var widgetMetadata: ({ - "ActiveWindow": { - "showIcon": true, - "hideMode": "hidden", - "scrollingMode": "hover", - "maxWidth": 145, - "useFixedWidth": false, - "colorizeIcons": false, - "textColor": "none" - }, - "AudioVisualizer": { - "width": 200, - "colorName": "primary", - "hideWhenIdle": false - }, - "Battery": { - "displayMode": "graphic-clean", - "deviceNativePath": "__default__", - "showPowerProfiles": false, - "showNoctaliaPerformance": false, - "hideIfNotDetected": true, - "hideIfIdle": false - }, - "Bluetooth": { - "displayMode": "onhover", - "iconColor": "none", - "textColor": "none" - }, - "Brightness": { - "displayMode": "onhover", - "iconColor": "none", - "textColor": "none", - "applyToAllMonitors": false - }, - "Clock": { - "clockColor": "none", - "useCustomFont": false, - "customFont": "", - "formatHorizontal": "HH:mm ddd, MMM dd", - "formatVertical": "HH mm - dd MM", - "tooltipFormat": "HH:mm ddd, MMM dd" - }, - "ControlCenter": { - "useDistroLogo": false, - "icon": "noctalia", - "customIconPath": "", - "colorizeDistroLogo": false, - "colorizeSystemIcon": "none", - "enableColorization": false - }, - "CustomButton": { - "icon": "heart", - "showIcon": true, - "showExecTooltip": true, - "showTextTooltip": true, - "generalTooltipText": "", - "hideMode": "alwaysExpanded", - "leftClickExec": "", - "leftClickUpdateText": false, - "rightClickExec": "", - "rightClickUpdateText": false, - "middleClickExec": "", - "middleClickUpdateText": false, - "textCommand": "", - "textStream": false, - "textIntervalMs": 3000, - "textCollapse": "", - "parseJson": false, - "wheelExec": "", - "wheelUpExec": "", - "wheelDownExec": "", - "wheelMode": "unified", - "wheelUpdateText": false, - "wheelUpUpdateText": false, - "wheelDownUpdateText": false, - "maxTextLength": { - "horizontal": 10, - "vertical": 10 - }, - "enableColorization": false, - "colorizeSystemIcon": "none", - "ipcIdentifier": "" - }, - "DarkMode": { - "iconColor": "none" - }, - "KeepAwake": { - "iconColor": "none", - "textColor": "none" - }, - "KeyboardLayout": { - "displayMode": "onhover", - "showIcon": true, - "iconColor": "none", - "textColor": "none" - }, - "LockKeys": { - "showCapsLock": true, - "showNumLock": true, - "showScrollLock": true, - "capsLockIcon": "letter-c", - "numLockIcon": "letter-n", - "scrollLockIcon": "letter-s", - "hideWhenOff": false - }, - "Launcher": { - "useDistroLogo": false, - "icon": "rocket", - "customIconPath": "", - "colorizeSystemIcon": "none", - "enableColorization": false, - "iconColor": "none" - }, - "MediaMini": { - "hideMode": "hidden", - "scrollingMode": "hover", - "maxWidth": 145, - "useFixedWidth": false, - "hideWhenIdle": false, - "showAlbumArt": true, - "showArtistFirst": true, - "showVisualizer": false, - "showProgressRing": true, - "visualizerType": "linear", - "textColor": "none", - "compactMode": false, - "panelShowAlbumArt": true - }, - "Microphone": { - "displayMode": "onhover", - "middleClickCommand": "pwvucontrol || pavucontrol", - "iconColor": "none", - "textColor": "none" - }, - "NotificationHistory": { - "showUnreadBadge": true, - "hideWhenZero": false, - "hideWhenZeroUnread": false, - "unreadBadgeColor": "primary", - "iconColor": "none" - }, - "SessionMenu": { - "iconColor": "error" - }, - "Settings": { - "iconColor": "none" - }, - "Spacer": { - "width": 20 - }, - "SystemMonitor": { - "compactMode": true, - "iconColor": "none", - "textColor": "none", - "useMonospaceFont": true, - "usePadding": false, - "showCpuUsage": true, - "showCpuCores": false, - "showCpuFreq": false, - "showCpuTemp": true, - "showGpuTemp": false, - "showLoadAverage": false, - "showMemoryUsage": true, - "showMemoryAsPercent": false, - "showSwapUsage": false, - "showNetworkStats": false, - "showDiskUsage": false, - "showDiskUsageAsPercent": false, - "showDiskAvailable": false, - "diskPath": "/" - }, - "Taskbar": { - "onlySameOutput": true, - "onlyActiveWorkspaces": true, - "hideMode": "hidden", - "colorizeIcons": false, - "showTitle": false, - "titleWidth": 120, - "showPinnedApps": true, - "smartWidth": true, - "maxTaskbarWidth": 40, - "iconScale": 0.8 - }, - "Tray": { - "blacklist": [], - "colorizeIcons": false, - "chevronColor": "none", - "pinned": [], - "drawerEnabled": true, - "hidePassive": false - }, - "VPN": { - "displayMode": "onhover", - "iconColor": "none", - "textColor": "none" - }, - "Network": { - "displayMode": "onhover", - "iconColor": "none", - "textColor": "none" - }, - "NightLight": { - "iconColor": "none" - }, - "NoctaliaPerformance": { - "iconColor": "none" - }, - "PowerProfile": { - "iconColor": "none" - }, - "Workspace": { - "labelMode": "index", - "followFocusedScreen": false, - "hideUnoccupied": false, - "characterCount": 2, - "showApplications": false, - "showApplicationsHover": false, - "showLabelsOnlyWhenOccupied": true, - "colorizeIcons": false, - "unfocusedIconsOpacity": 1.0, - "groupedBorderOpacity": 1.0, - "enableScrollWheel": true, - "iconScale": 0.8, - "focusedColor": "primary", - "occupiedColor": "secondary", - "emptyColor": "secondary", - "showBadge": true, - "pillSize": 0.6, - "fontWeight": "bold" - }, - "Volume": { - "displayMode": "onhover", - "middleClickCommand": "pwvucontrol || pavucontrol", - "iconColor": "none", - "textColor": "none" - }, - "WallpaperSelector": { - "iconColor": "none" - } - }) + property var widgetMetadata: ({ + "ActiveWindow": { + "showText": true, + "showIcon": true, + "hideMode": "hidden", + "scrollingMode": "hover", + "maxWidth": 145, + "useFixedWidth": false, + "colorizeIcons": false, + "textColor": "none" + }, + "AudioVisualizer": { + "width": 200, + "colorName": "primary", + "hideWhenIdle": false + }, + "Battery": { + "displayMode": "graphic-clean", + "deviceNativePath": "__default__", + "showPowerProfiles": false, + "showNoctaliaPerformance": false, + "hideIfNotDetected": true, + "hideIfIdle": false + }, + "Bluetooth": { + "displayMode": "onhover", + "iconColor": "none", + "textColor": "none" + }, + "Brightness": { + "displayMode": "onhover", + "iconColor": "none", + "textColor": "none", + "applyToAllMonitors": false + }, + "Clock": { + "clockColor": "none", + "useCustomFont": false, + "customFont": "", + "formatHorizontal": "HH:mm ddd, MMM dd", + "formatVertical": "HH mm - dd MM", + "tooltipFormat": "HH:mm ddd, MMM dd" + }, + "ControlCenter": { + "useDistroLogo": false, + "icon": "noctalia", + "customIconPath": "", + "colorizeDistroLogo": false, + "colorizeSystemIcon": "none", + "enableColorization": false + }, + "CustomButton": { + "icon": "heart", + "showIcon": true, + "showExecTooltip": true, + "showTextTooltip": true, + "generalTooltipText": "", + "hideMode": "alwaysExpanded", + "leftClickExec": "", + "leftClickUpdateText": false, + "rightClickExec": "", + "rightClickUpdateText": false, + "middleClickExec": "", + "middleClickUpdateText": false, + "textCommand": "", + "textStream": false, + "textIntervalMs": 3000, + "textCollapse": "", + "parseJson": false, + "wheelExec": "", + "wheelUpExec": "", + "wheelDownExec": "", + "wheelMode": "unified", + "wheelUpdateText": false, + "wheelUpUpdateText": false, + "wheelDownUpdateText": false, + "maxTextLength": { + "horizontal": 10, + "vertical": 10 + }, + "enableColorization": false, + "colorizeSystemIcon": "none", + "ipcIdentifier": "" + }, + "DarkMode": { + "iconColor": "none" + }, + "KeepAwake": { + "iconColor": "none", + "textColor": "none" + }, + "KeyboardLayout": { + "displayMode": "onhover", + "showIcon": true, + "iconColor": "none", + "textColor": "none" + }, + "LockKeys": { + "showCapsLock": true, + "showNumLock": true, + "showScrollLock": true, + "capsLockIcon": "letter-c", + "numLockIcon": "letter-n", + "scrollLockIcon": "letter-s", + "hideWhenOff": false + }, + "Launcher": { + "useDistroLogo": false, + "icon": "rocket", + "customIconPath": "", + "colorizeSystemIcon": "none", + "enableColorization": false, + "iconColor": "none" + }, + "MediaMini": { + "hideMode": "hidden", + "scrollingMode": "hover", + "maxWidth": 145, + "useFixedWidth": false, + "hideWhenIdle": false, + "showAlbumArt": true, + "showArtistFirst": true, + "showVisualizer": false, + "showProgressRing": true, + "visualizerType": "linear", + "textColor": "none", + "compactMode": false, + "panelShowAlbumArt": true + }, + "Microphone": { + "displayMode": "onhover", + "middleClickCommand": "pwvucontrol || pavucontrol", + "iconColor": "none", + "textColor": "none" + }, + "NotificationHistory": { + "showUnreadBadge": true, + "hideWhenZero": false, + "hideWhenZeroUnread": false, + "unreadBadgeColor": "primary", + "iconColor": "none" + }, + "SessionMenu": { + "iconColor": "error" + }, + "Settings": { + "iconColor": "none" + }, + "Spacer": { + "width": 20 + }, + "SystemMonitor": { + "compactMode": true, + "iconColor": "none", + "textColor": "none", + "useMonospaceFont": true, + "usePadding": false, + "showCpuUsage": true, + "showCpuCores": false, + "showCpuFreq": false, + "showCpuTemp": true, + "showGpuTemp": false, + "showLoadAverage": false, + "showMemoryUsage": true, + "showMemoryAsPercent": false, + "showSwapUsage": false, + "showNetworkStats": false, + "showDiskUsage": false, + "showDiskUsageAsPercent": false, + "showDiskAvailable": false, + "diskPath": "/" + }, + "Taskbar": { + "onlySameOutput": true, + "onlyActiveWorkspaces": true, + "hideMode": "hidden", + "colorizeIcons": false, + "showTitle": false, + "titleWidth": 120, + "showPinnedApps": true, + "smartWidth": true, + "maxTaskbarWidth": 40, + "iconScale": 0.8 + }, + "Tray": { + "blacklist": [], + "colorizeIcons": false, + "chevronColor": "none", + "pinned": [], + "drawerEnabled": true, + "hidePassive": false + }, + "VPN": { + "displayMode": "onhover", + "iconColor": "none", + "textColor": "none" + }, + "Network": { + "displayMode": "onhover", + "iconColor": "none", + "textColor": "none" + }, + "NightLight": { + "iconColor": "none" + }, + "NoctaliaPerformance": { + "iconColor": "none" + }, + "PowerProfile": { + "iconColor": "none" + }, + "Workspace": { + "labelMode": "index", + "followFocusedScreen": false, + "hideUnoccupied": false, + "characterCount": 2, + "showApplications": false, + "showApplicationsHover": false, + "showLabelsOnlyWhenOccupied": true, + "colorizeIcons": false, + "unfocusedIconsOpacity": 1.0, + "groupedBorderOpacity": 1.0, + "enableScrollWheel": true, + "iconScale": 0.8, + "focusedColor": "primary", + "occupiedColor": "secondary", + "emptyColor": "secondary", + "showBadge": true, + "pillSize": 0.6, + "fontWeight": "bold" + }, + "Volume": { + "displayMode": "onhover", + "middleClickCommand": "pwvucontrol || pavucontrol", + "iconColor": "none", + "textColor": "none" + }, + "WallpaperSelector": { + "iconColor": "none" + } + }) - // Component definitions - these are loaded once at startup - property Component activeWindowComponent: Component { - ActiveWindow {} - } - property Component audioVisualizerComponent: Component { - AudioVisualizer {} - } - property Component batteryComponent: Component { - Battery {} - } - property Component bluetoothComponent: Component { - Bluetooth {} - } - property Component brightnessComponent: Component { - Brightness {} - } - property Component clockComponent: Component { - Clock {} - } - property Component customButtonComponent: Component { - CustomButton {} - } - property Component darkModeComponent: Component { - DarkMode {} - } - property Component keyboardLayoutComponent: Component { - KeyboardLayout {} - } - property Component keepAwakeComponent: Component { - KeepAwake {} - } - property Component lockKeysComponent: Component { - LockKeys {} - } - property Component launcherComponent: Component { - Launcher {} - } - property Component mediaMiniComponent: Component { - MediaMini {} - } - property Component microphoneComponent: Component { - Microphone {} - } - property Component nightLightComponent: Component { - NightLight {} - } - property Component noctaliaPerformanceComponent: Component { - NoctaliaPerformance {} - } - property Component notificationHistoryComponent: Component { - NotificationHistory {} - } - property Component powerProfileComponent: Component { - PowerProfile {} - } - property Component sessionMenuComponent: Component { - SessionMenu {} - } - property Component settingsComponent: Component { - Settings {} - } - property Component controlCenterComponent: Component { - ControlCenter {} - } - property Component spacerComponent: Component { - Spacer {} - } - property Component systemMonitorComponent: Component { - SystemMonitor {} - } - property Component trayComponent: Component { - Tray {} - } - property Component volumeComponent: Component { - Volume {} - } - property Component vpnComponent: Component { - VPN {} - } - property Component networkComponent: Component { - Network {} - } - property Component wallpaperSelectorComponent: Component { - WallpaperSelector {} - } - property Component workspaceComponent: Component { - Workspace {} - } - property Component taskbarComponent: Component { - Taskbar {} - } - function init() { - Logger.i("BarWidgetRegistry", "Service started"); - } - - // ------------------------------ - // Helper function to get widget component by name - function getWidget(id) { - return widgets[id] || null; - } - - // Helper function to check if widget exists - function hasWidget(id) { - return id in widgets; - } - - // Get list of available widget id - function getAvailableWidgets() { - return Object.keys(widgets); - } - - // Helper function to check if widget has user settings - function widgetHasUserSettings(id) { - return widgetMetadata[id] !== undefined; - } - - // ------------------------------ - // Plugin widget registration - - // Track plugin widgets separately - property var pluginWidgets: ({}) - property var pluginWidgetMetadata: ({}) - - // Register a plugin widget - function registerPluginWidget(pluginId, component, metadata) { - if (!pluginId || !component) { - Logger.e("BarWidgetRegistry", "Cannot register plugin widget: invalid parameters"); - return false; + // Component definitions - these are loaded once at startup + property Component activeWindowComponent: Component { + ActiveWindow {} + } + property Component audioVisualizerComponent: Component { + AudioVisualizer {} + } + property Component batteryComponent: Component { + Battery {} + } + property Component bluetoothComponent: Component { + Bluetooth {} + } + property Component brightnessComponent: Component { + Brightness {} + } + property Component clockComponent: Component { + Clock {} + } + property Component customButtonComponent: Component { + CustomButton {} + } + property Component darkModeComponent: Component { + DarkMode {} + } + property Component keyboardLayoutComponent: Component { + KeyboardLayout {} + } + property Component keepAwakeComponent: Component { + KeepAwake {} + } + property Component lockKeysComponent: Component { + LockKeys {} + } + property Component launcherComponent: Component { + Launcher {} + } + property Component mediaMiniComponent: Component { + MediaMini {} + } + property Component microphoneComponent: Component { + Microphone {} + } + property Component nightLightComponent: Component { + NightLight {} + } + property Component noctaliaPerformanceComponent: Component { + NoctaliaPerformance {} + } + property Component notificationHistoryComponent: Component { + NotificationHistory {} + } + property Component powerProfileComponent: Component { + PowerProfile {} + } + property Component sessionMenuComponent: Component { + SessionMenu {} + } + property Component settingsComponent: Component { + Settings {} + } + property Component controlCenterComponent: Component { + ControlCenter {} + } + property Component spacerComponent: Component { + Spacer {} + } + property Component systemMonitorComponent: Component { + SystemMonitor {} + } + property Component trayComponent: Component { + Tray {} + } + property Component volumeComponent: Component { + Volume {} + } + property Component vpnComponent: Component { + VPN {} + } + property Component networkComponent: Component { + Network {} + } + property Component wallpaperSelectorComponent: Component { + WallpaperSelector {} + } + property Component workspaceComponent: Component { + Workspace {} + } + property Component taskbarComponent: Component { + Taskbar {} + } + function init() { + Logger.i("BarWidgetRegistry", "Service started"); } - // Add plugin: prefix to avoid conflicts with core widgets - var widgetId = "plugin:" + pluginId; - - pluginWidgets[widgetId] = component; - pluginWidgetMetadata[widgetId] = metadata || {}; - - // Also add to main widgets object for unified access - widgets[widgetId] = component; - widgetMetadata[widgetId] = metadata || {}; - - Logger.i("BarWidgetRegistry", "Registered plugin widget:", widgetId); - root.pluginWidgetRegistryUpdated(); - return true; - } - - // Unregister a plugin widget - function unregisterPluginWidget(pluginId) { - var widgetId = "plugin:" + pluginId; - - if (!pluginWidgets[widgetId]) { - Logger.w("BarWidgetRegistry", "Plugin widget not registered:", widgetId); - return false; + // ------------------------------ + // Helper function to get widget component by name + function getWidget(id) { + return widgets[id] || null; } - delete pluginWidgets[widgetId]; - delete pluginWidgetMetadata[widgetId]; - delete widgets[widgetId]; - delete widgetMetadata[widgetId]; + // Helper function to check if widget exists + function hasWidget(id) { + return id in widgets; + } - Logger.i("BarWidgetRegistry", "Unregistered plugin widget:", widgetId); - root.pluginWidgetRegistryUpdated(); - return true; - } + // Get list of available widget id + function getAvailableWidgets() { + return Object.keys(widgets); + } - // Check if a widget is a plugin widget - function isPluginWidget(id) { - return id.startsWith("plugin:"); - } + // Helper function to check if widget has user settings + function widgetHasUserSettings(id) { + return widgetMetadata[id] !== undefined; + } - property var cpuIntensiveWidgets: ["AudioVisualizer"] + // ------------------------------ + // Plugin widget registration - function isCpuIntensive(id) { - if (pluginWidgetMetadata[id]?.cpuIntensive) - return true; - return cpuIntensiveWidgets.indexOf(id) >= 0; - } + // Track plugin widgets separately + property var pluginWidgets: ({}) + property var pluginWidgetMetadata: ({}) - // Get list of plugin widget IDs - function getPluginWidgets() { - return Object.keys(pluginWidgets); - } + // Register a plugin widget + function registerPluginWidget(pluginId, component, metadata) { + if (!pluginId || !component) { + Logger.e("BarWidgetRegistry", "Cannot register plugin widget: invalid parameters"); + return false; + } + + // Add plugin: prefix to avoid conflicts with core widgets + var widgetId = "plugin:" + pluginId; + + pluginWidgets[widgetId] = component; + pluginWidgetMetadata[widgetId] = metadata || {}; + + // Also add to main widgets object for unified access + widgets[widgetId] = component; + widgetMetadata[widgetId] = metadata || {}; + + Logger.i("BarWidgetRegistry", "Registered plugin widget:", widgetId); + root.pluginWidgetRegistryUpdated(); + return true; + } + + // Unregister a plugin widget + function unregisterPluginWidget(pluginId) { + var widgetId = "plugin:" + pluginId; + + if (!pluginWidgets[widgetId]) { + Logger.w("BarWidgetRegistry", "Plugin widget not registered:", widgetId); + return false; + } + + delete pluginWidgets[widgetId]; + delete pluginWidgetMetadata[widgetId]; + delete widgets[widgetId]; + delete widgetMetadata[widgetId]; + + Logger.i("BarWidgetRegistry", "Unregistered plugin widget:", widgetId); + root.pluginWidgetRegistryUpdated(); + return true; + } + + // Check if a widget is a plugin widget + function isPluginWidget(id) { + return id.startsWith("plugin:"); + } + + property var cpuIntensiveWidgets: ["AudioVisualizer"] + + function isCpuIntensive(id) { + if (pluginWidgetMetadata[id]?.cpuIntensive) + return true; + return cpuIntensiveWidgets.indexOf(id) >= 0; + } + + // Get list of plugin widget IDs + function getPluginWidgets() { + return Object.keys(pluginWidgets); + } }