From 5d94c0a7d44a2255b81815a52a7056a94a39842d Mon Sep 17 00:00:00 2001 From: nippy Date: Sat, 18 Apr 2026 13:49:56 +0200 Subject: update Raveos themes --- .../quickshell/Modules/DesktopWidgetLayer.qml | 110 +++++++++++++++++++++ 1 file changed, 110 insertions(+) create mode 100644 raveos-theme/hyprland/theme-data/DankMaterialShell/quickshell/Modules/DesktopWidgetLayer.qml (limited to 'raveos-theme/hyprland/theme-data/DankMaterialShell/quickshell/Modules/DesktopWidgetLayer.qml') diff --git a/raveos-theme/hyprland/theme-data/DankMaterialShell/quickshell/Modules/DesktopWidgetLayer.qml b/raveos-theme/hyprland/theme-data/DankMaterialShell/quickshell/Modules/DesktopWidgetLayer.qml new file mode 100644 index 0000000..384025f --- /dev/null +++ b/raveos-theme/hyprland/theme-data/DankMaterialShell/quickshell/Modules/DesktopWidgetLayer.qml @@ -0,0 +1,110 @@ +import QtQuick +import Quickshell +import qs.Common +import qs.Services +import qs.Modules.Plugins +import qs.Modules.BuiltinDesktopPlugins + +Variants { + id: root + model: Quickshell.screens + + Component.onCompleted: Qt.callLater(autoEnablePluginsForInstances) + + function autoEnablePluginsForInstances() { + const instances = SettingsData.desktopWidgetInstances || []; + const pluginTypes = new Set(); + + for (const inst of instances) { + if (!inst.enabled) + continue; + if (inst.widgetType === "desktopClock" || inst.widgetType === "systemMonitor") + continue; + pluginTypes.add(inst.widgetType); + } + + for (const pluginId of pluginTypes) { + if (PluginService.isPluginLoaded(pluginId)) + continue; + if (!PluginService.availablePlugins[pluginId]) + continue; + PluginService.enablePlugin(pluginId); + } + } + + Connections { + target: PluginService + function onPluginListUpdated() { + Qt.callLater(root.autoEnablePluginsForInstances); + } + } + + QtObject { + id: screenDelegate + + required property var modelData + + readonly property var screen: modelData + readonly property string screenKey: SettingsData.getScreenDisplayName(screen) + + function shouldShowOnScreen(prefs) { + if (!Array.isArray(prefs) || prefs.length === 0 || prefs.includes("all")) + return true; + return prefs.some(p => { + if (typeof p === "string") + return p === screenKey || p === modelData.name; + return p?.name === modelData.name || p === screenKey; + }); + } + + property Component clockComponent: Component { + DesktopClockWidget {} + } + + property Component systemMonitorComponent: Component { + SystemMonitorWidget {} + } + + property Instantiator widgetInstantiator: Instantiator { + model: ScriptModel { + objectProp: "id" + values: SettingsData.desktopWidgetInstances + } + + DesktopPluginWrapper { + required property var modelData + required property int index + + readonly property string instanceIdRef: modelData.id + readonly property var liveInstanceData: { + const instances = SettingsData.desktopWidgetInstances || []; + return instances.find(inst => inst.id === instanceIdRef) ?? modelData; + } + + readonly property bool shouldBeVisible: { + if (!liveInstanceData.enabled) + return false; + const prefs = liveInstanceData.config?.displayPreferences ?? ["all"]; + return screenDelegate.shouldShowOnScreen(prefs); + } + + pluginId: liveInstanceData.widgetType + instanceId: instanceIdRef + instanceData: liveInstanceData + builtinComponent: { + switch (liveInstanceData.widgetType) { + case "desktopClock": + return screenDelegate.clockComponent; + case "systemMonitor": + return screenDelegate.systemMonitorComponent; + default: + return null; + } + } + pluginService: (liveInstanceData.widgetType !== "desktopClock" && liveInstanceData.widgetType !== "systemMonitor") ? PluginService : null + screen: screenDelegate.screen + widgetEnabled: shouldBeVisible + } + } + } +} -- cgit v1.3