From 83ff5f5589e9c98cb5c32d737bac845933c3cf4b Mon Sep 17 00:00:00 2001 From: quadbyte Date: Fri, 15 Aug 2025 21:45:58 -0400 Subject: [PATCH] Renamed all services to xxxService. Moved a couple things in Commons --- {Services => Commons}/Colors.qml | 1 + {Services => Commons}/IPCManager.qml | 3 - {Services => Commons}/Settings.qml | 9 +-- {Services => Commons}/Style.qml | 0 {Services => Commons}/Time.qml | 1 + Modules/AppLauncher/AppLauncher.qml | 11 ++-- Modules/Audio/CircularSpectrum.qml | 1 + Modules/Audio/LinearSpectrum.qml | 1 + Modules/Background/Background.qml | 5 +- Modules/Background/Overview.qml | 9 +-- Modules/Background/ScreenCorners.qml | 3 +- Modules/Background/WallpaperPicker.qml | 1 + Modules/Bar/ActiveWindow.qml | 9 +-- Modules/Bar/Bar.qml | 9 +-- Modules/Bar/Battery.qml | 1 + Modules/Bar/Brightness.qml | 1 + Modules/Bar/Clock.qml | 1 + Modules/Bar/MediaMini.qml | 15 +++-- Modules/Bar/NotificationHistory.qml | 1 + Modules/Bar/SystemMonitor.qml | 7 ++- Modules/Bar/Tray.qml | 1 + Modules/Bar/TrayMenu.qml | 1 + Modules/Bar/Volume.qml | 17 ++--- Modules/Bar/WiFi.qml | 15 ++--- Modules/Bar/WiFiMenu.qml | 43 ++++++------- Modules/Bar/Workspace.qml | 13 ++-- Modules/Calendar/Calendar.qml | 1 + Modules/Demo/DemoPanel.qml | 13 ++-- Modules/Dock/Dock.qml | 3 +- Modules/LockScreen/LockScreen.qml | 5 +- Modules/Notification/Notification.qml | 3 +- .../Notification/NotificationHistoryPanel.qml | 1 + Modules/Settings/SettingsPanel.qml | 7 ++- Modules/Settings/Tabs/AboutTab.qml | 5 +- Modules/Settings/Tabs/AudioTab.qml | 45 ++++++------- Modules/Settings/Tabs/BarTab.qml | 1 + Modules/Settings/Tabs/ColorSchemeTab.qml | 12 ++-- Modules/Settings/Tabs/DisplayTab.qml | 1 + Modules/Settings/Tabs/GeneralTab.qml | 1 + Modules/Settings/Tabs/NetworkTab.qml | 1 + Modules/Settings/Tabs/ScreenRecorderTab.qml | 15 ++--- Modules/Settings/Tabs/TimeWeatherTab.qml | 1 + .../Settings/Tabs/WallpaperSelectorTab.qml | 15 ++--- Modules/Settings/Tabs/WallpaperTab.qml | 1 + Modules/SidePanel/Cards/MediaCard.qml | 63 ++++++++++--------- Modules/SidePanel/Cards/PowerProfilesCard.qml | 1 + Modules/SidePanel/Cards/ProfileCard.qml | 1 + Modules/SidePanel/Cards/SystemMonitorCard.qml | 9 +-- Modules/SidePanel/Cards/UtilitiesCard.qml | 7 ++- Modules/SidePanel/Cards/WeatherCard.qml | 27 ++++---- Modules/SidePanel/PowerMenu.qml | 5 +- Modules/SidePanel/SidePanel.qml | 1 + Services/{Audio.qml => AudioService.qml} | 8 +-- Services/{Cava.qml => CavaService.qml} | 2 +- .../{Clipboard.qml => ClipboardService.qml} | 1 + ...lorSchemes.qml => ColorSchemesService.qml} | 2 +- Services/{GitHub.qml => GitHubService.qml} | 3 +- .../{Location.qml => LocationService.qml} | 3 +- .../{MediaPlayer.qml => MediaService.qml} | 1 + Services/{Network.qml => NetworkService.qml} | 2 +- Services/{Niri.qml => NiriService.qml} | 0 Services/NotificationService.qml | 1 + .../{PanelManager.qml => PanelService.qml} | 0 Services/{Scaling.qml => ScalingService.qml} | 0 ...Recorder.qml => ScreenRecorderService.qml} | 1 + ...SystemStats.qml => SystemStatsService.qml} | 0 .../{Wallpapers.qml => WallpapersService.qml} | 2 +- .../{Workspaces.qml => WorkspacesService.qml} | 5 +- Widgets/NBox.qml | 2 + Widgets/NBusyIndicator.qml | 1 + Widgets/NCard.qml | 1 + Widgets/NCircleStat.qml | 1 + Widgets/NClock.qml | 1 + Widgets/NComboBox.qml | 1 + Widgets/NDivider.qml | 1 + Widgets/NIconButton.qml | 1 + Widgets/NImageRounded.qml | 1 + Widgets/NPanel.qml | 11 ++-- Widgets/NPill.qml | 1 + Widgets/NRadioButton.qml | 1 + Widgets/NSlider.qml | 1 + Widgets/NText.qml | 1 + Widgets/NTextInput.qml | 1 + Widgets/NToggle.qml | 1 + Widgets/NTooltip.qml | 1 + shell.qml | 3 +- 86 files changed, 275 insertions(+), 211 deletions(-) rename {Services => Commons}/Colors.qml (99%) rename {Services => Commons}/IPCManager.qml (92%) rename {Services => Commons}/Settings.qml (94%) rename {Services => Commons}/Style.qml (100%) rename {Services => Commons}/Time.qml (99%) rename Services/{Audio.qml => AudioService.qml} (91%) rename Services/{Cava.qml => CavaService.qml} (98%) rename Services/{Clipboard.qml => ClipboardService.qml} (99%) rename Services/{ColorSchemes.qml => ColorSchemesService.qml} (93%) rename Services/{GitHub.qml => GitHubService.qml} (98%) rename Services/{Location.qml => LocationService.qml} (98%) rename Services/{MediaPlayer.qml => MediaService.qml} (99%) rename Services/{Network.qml => NetworkService.qml} (99%) rename Services/{Niri.qml => NiriService.qml} (100%) rename Services/{PanelManager.qml => PanelService.qml} (100%) rename Services/{Scaling.qml => ScalingService.qml} (100%) rename Services/{ScreenRecorder.qml => ScreenRecorderService.qml} (99%) rename Services/{SystemStats.qml => SystemStatsService.qml} (100%) rename Services/{Wallpapers.qml => WallpapersService.qml} (99%) rename Services/{Workspaces.qml => WorkspacesService.qml} (97%) diff --git a/Services/Colors.qml b/Commons/Colors.qml similarity index 99% rename from Services/Colors.qml rename to Commons/Colors.qml index 2a20655..b6d09e2 100644 --- a/Services/Colors.qml +++ b/Commons/Colors.qml @@ -3,6 +3,7 @@ pragma Singleton import QtQuick import Quickshell import Quickshell.Io +import qs.Commons import qs.Services // -------------------------------- diff --git a/Services/IPCManager.qml b/Commons/IPCManager.qml similarity index 92% rename from Services/IPCManager.qml rename to Commons/IPCManager.qml index 745c529..638fc52 100644 --- a/Services/IPCManager.qml +++ b/Commons/IPCManager.qml @@ -4,9 +4,6 @@ import Quickshell.Io Item { id: root - // Reference to the lockscreen component - property var lockscreen: null - IpcHandler { target: "settings" diff --git a/Services/Settings.qml b/Commons/Settings.qml similarity index 94% rename from Services/Settings.qml rename to Commons/Settings.qml index d982699..f8cc593 100644 --- a/Services/Settings.qml +++ b/Commons/Settings.qml @@ -1,6 +1,7 @@ import QtQuick import Quickshell import Quickshell.Io +import qs.Commons import qs.Services pragma Singleton @@ -53,7 +54,7 @@ Singleton { // Only set wallpaper on initial load, not on reloads if (isInitialLoad && adapter.wallpaper.current !== "") { console.log("[Settings] Set current wallpaper", adapter.wallpaper.current) - Wallpapers.setCurrentWallpaper(adapter.wallpaper.current, true) + WallpapersService.setCurrentWallpaper(adapter.wallpaper.current, true) } isInitialLoad = false }) @@ -121,9 +122,9 @@ Singleton { property int randomInterval: 300 property JsonObject swww - onDirectoryChanged: Wallpapers.loadWallpapers() - onIsRandomChanged: Wallpapers.toggleRandomWallpaper() - onRandomIntervalChanged: Wallpapers.restartRandomWallpaperTimer() + onDirectoryChanged: WallpapersService.loadWallpapers() + onIsRandomChanged: WallpapersService.toggleRandomWallpaper() + onRandomIntervalChanged: WallpapersService.restartRandomWallpaperTimer() swww: JsonObject { property bool enabled: false diff --git a/Services/Style.qml b/Commons/Style.qml similarity index 100% rename from Services/Style.qml rename to Commons/Style.qml diff --git a/Services/Time.qml b/Commons/Time.qml similarity index 99% rename from Services/Time.qml rename to Commons/Time.qml index 4748192..8f8d3bf 100644 --- a/Services/Time.qml +++ b/Commons/Time.qml @@ -2,6 +2,7 @@ pragma Singleton import Quickshell import QtQuick +import qs.Commons import qs.Services Singleton { diff --git a/Modules/AppLauncher/AppLauncher.qml b/Modules/AppLauncher/AppLauncher.qml index e3aa4c5..e0a4f7c 100644 --- a/Modules/AppLauncher/AppLauncher.qml +++ b/Modules/AppLauncher/AppLauncher.qml @@ -6,6 +6,7 @@ import Quickshell import Quickshell.Io import Quickshell.Wayland import Quickshell.Widgets +import qs.Commons import qs.Services import qs.Widgets @@ -15,7 +16,7 @@ import "../../Helpers/MathHelper.js" as MathHelper NLoader { id: appLauncher isLoaded: false - // Clipboard state is persisted in Services/Clipboard.qml + // Clipboard state is persisted in Services/ClipboardService.qml content: Component { NPanel { id: appLauncherPanel @@ -36,7 +37,7 @@ NLoader { } function updateClipboardHistory() { - Clipboard.refresh() + ClipboardService.refresh() } function selectNext() { @@ -119,12 +120,12 @@ NLoader { // Handle clipboard history if (query.startsWith(">clip")) { - if (!Clipboard.initialized) { - Clipboard.refresh() + if (!ClipboardService.initialized) { + ClipboardService.refresh() } const searchTerm = query.slice(5).trim() - Clipboard.history.forEach(function (clip, index) { + ClipboardService.history.forEach(function (clip, index) { let searchContent = clip.type === 'image' ? clip.mimeType : clip.content || clip if (!searchTerm || searchContent.toLowerCase().includes(searchTerm)) { diff --git a/Modules/Audio/CircularSpectrum.qml b/Modules/Audio/CircularSpectrum.qml index 467d855..efb6f7a 100644 --- a/Modules/Audio/CircularSpectrum.qml +++ b/Modules/Audio/CircularSpectrum.qml @@ -1,4 +1,5 @@ import QtQuick +import qs.Commons import qs.Services // Not used ATM and need rework diff --git a/Modules/Audio/LinearSpectrum.qml b/Modules/Audio/LinearSpectrum.qml index 93f8e41..32768b3 100644 --- a/Modules/Audio/LinearSpectrum.qml +++ b/Modules/Audio/LinearSpectrum.qml @@ -1,4 +1,5 @@ import QtQuick +import qs.Commons import qs.Services Item { diff --git a/Modules/Background/Background.qml b/Modules/Background/Background.qml index e2cda36..437cd3e 100644 --- a/Modules/Background/Background.qml +++ b/Modules/Background/Background.qml @@ -1,6 +1,7 @@ import QtQuick import Quickshell import Quickshell.Wayland +import qs.Commons import qs.Services Variants { @@ -8,8 +9,8 @@ Variants { delegate: PanelWindow { required property ShellScreen modelData - property string wallpaperSource: Wallpapers.currentWallpaper !== "" - && !Settings.data.wallpaper.swww.enabled ? Wallpapers.currentWallpaper : "" + property string wallpaperSource: WallpapersService.currentWallpaper !== "" + && !Settings.data.wallpaper.swww.enabled ? WallpapersService.currentWallpaper : "" visible: wallpaperSource !== "" && !Settings.data.wallpaper.swww.enabled diff --git a/Modules/Background/Overview.qml b/Modules/Background/Overview.qml index 22765e7..3c3d680 100644 --- a/Modules/Background/Overview.qml +++ b/Modules/Background/Overview.qml @@ -2,14 +2,15 @@ import QtQuick import QtQuick.Effects import Quickshell import Quickshell.Wayland +import qs.Commons import qs.Services import qs.Widgets NLoader { - active: Workspaces.isNiri + active: WorkspacesService.isNiri Component.onCompleted: { - if (Workspaces.isNiri) { + if (WorkspacesService.isNiri) { console.log("[Overview] Loading Overview component (Niri detected)") } else { console.log("[Overview] Skipping Overview component (Niri not detected)") @@ -21,8 +22,8 @@ NLoader { delegate: PanelWindow { required property ShellScreen modelData - property string wallpaperSource: Wallpapers.currentWallpaper !== "" - && !Settings.data.wallpaper.swww.enabled ? Wallpapers.currentWallpaper : "" + property string wallpaperSource: WallpapersService.currentWallpaper !== "" + && !Settings.data.wallpaper.swww.enabled ? WallpapersService.currentWallpaper : "" visible: wallpaperSource !== "" && !Settings.data.wallpaper.swww.enabled color: "transparent" diff --git a/Modules/Background/ScreenCorners.qml b/Modules/Background/ScreenCorners.qml index 8dbb353..0ddf297 100644 --- a/Modules/Background/ScreenCorners.qml +++ b/Modules/Background/ScreenCorners.qml @@ -2,6 +2,7 @@ import QtQuick import QtQuick.Effects import Quickshell import Quickshell.Wayland +import qs.Commons import qs.Services import qs.Widgets @@ -15,7 +16,7 @@ NLoader { id: root required property ShellScreen modelData - readonly property real scaling: Scaling.scale(screen) + readonly property real scaling: ScalingService.scale(screen) screen: modelData // Visible ring color diff --git a/Modules/Background/WallpaperPicker.qml b/Modules/Background/WallpaperPicker.qml index 0b1a417..2387e9e 100644 --- a/Modules/Background/WallpaperPicker.qml +++ b/Modules/Background/WallpaperPicker.qml @@ -2,6 +2,7 @@ pragma Singleton import QtQuick import Quickshell +import qs.Commons import qs.Services Item { diff --git a/Modules/Bar/ActiveWindow.qml b/Modules/Bar/ActiveWindow.qml index d970734..366e1d3 100644 --- a/Modules/Bar/ActiveWindow.qml +++ b/Modules/Bar/ActiveWindow.qml @@ -1,6 +1,7 @@ import QtQuick import QtQuick.Controls import Quickshell +import qs.Commons import qs.Services import qs.Widgets @@ -29,8 +30,8 @@ Row { target: typeof Niri !== "undefined" ? Niri : null function onFocusedWindowIndexChanged() { // Check if window actually changed - if (Niri.focusedWindowIndex !== lastWindowIndex) { - lastWindowIndex = Niri.focusedWindowIndex + if (NiriService.focusedWindowIndex !== lastWindowIndex) { + lastWindowIndex = NiriService.focusedWindowIndex showingFullTitle = true fullTitleTimer.restart() } @@ -96,8 +97,8 @@ Row { } // Get the focused window data - const focusedWindow = Niri.focusedWindowIndex >= 0 - && Niri.focusedWindowIndex < Niri.windows.length ? Niri.windows[Niri.focusedWindowIndex] : null + const focusedWindow = NiriService.focusedWindowIndex >= 0 + && NiriService.focusedWindowIndex < NiriService.windows.length ? NiriService.windows[NiriService.focusedWindowIndex] : null if (!focusedWindow) { return "" diff --git a/Modules/Bar/Bar.qml b/Modules/Bar/Bar.qml index 3f34a27..741c842 100644 --- a/Modules/Bar/Bar.qml +++ b/Modules/Bar/Bar.qml @@ -2,6 +2,7 @@ import QtQuick import QtQuick.Controls import QtQuick.Layouts import Quickshell +import qs.Commons import qs.Services import qs.Widgets import qs.Modules.Notification @@ -13,7 +14,7 @@ Variants { id: root required property ShellScreen modelData - readonly property real scaling: Scaling.scale(screen) + readonly property real scaling: ScalingService.scale(screen) screen: modelData implicitHeight: Style.barHeight * scaling @@ -88,11 +89,11 @@ Variants { tooltipText: "Screen Recording Active" sizeMultiplier: 0.8 showBorder: false - showFilled: ScreenRecorder.isRecording - visible: ScreenRecorder.isRecording + showFilled: ScreenRecorderService.isRecording + visible: ScreenRecorderService.isRecording anchors.verticalCenter: parent.verticalCenter onClicked: { - ScreenRecorder.toggleRecording() + ScreenRecorderService.toggleRecording() } } diff --git a/Modules/Bar/Battery.qml b/Modules/Bar/Battery.qml index ce4acdb..59d8ed3 100644 --- a/Modules/Bar/Battery.qml +++ b/Modules/Bar/Battery.qml @@ -2,6 +2,7 @@ import QtQuick import Quickshell import Quickshell.Services.UPower import QtQuick.Layouts +import qs.Commons import qs.Services import qs.Widgets diff --git a/Modules/Bar/Brightness.qml b/Modules/Bar/Brightness.qml index adc68cd..8b12050 100644 --- a/Modules/Bar/Brightness.qml +++ b/Modules/Bar/Brightness.qml @@ -1,6 +1,7 @@ import QtQuick import Quickshell import qs.Modules.Settings +import qs.Commons import qs.Services import qs.Widgets diff --git a/Modules/Bar/Clock.qml b/Modules/Bar/Clock.qml index 916687f..a2af29f 100644 --- a/Modules/Bar/Clock.qml +++ b/Modules/Bar/Clock.qml @@ -1,4 +1,5 @@ import QtQuick +import qs.Commons import qs.Services import qs.Widgets diff --git a/Modules/Bar/MediaMini.qml b/Modules/Bar/MediaMini.qml index 4a06421..bc7eae4 100644 --- a/Modules/Bar/MediaMini.qml +++ b/Modules/Bar/MediaMini.qml @@ -1,5 +1,6 @@ import QtQuick import QtQuick.Layouts +import qs.Commons import qs.Services import qs.Widgets @@ -8,7 +9,7 @@ Item { width: visible ? mediaRow.width : 0 height: Style.barHeight * scaling - visible: Settings.data.bar.showMedia && (MediaPlayer.canPlay || MediaPlayer.canPause) + visible: Settings.data.bar.showMedia && (MediaService.canPlay || MediaService.canPause) RowLayout { id: mediaRow @@ -16,18 +17,17 @@ Item { spacing: Style.spacingTiniest * scaling // NIconButton { - // icon: MediaPlayer.isPlaying ? "pause" : "play_arrow" + // icon: MediaService.isPlaying ? "pause" : "play_arrow" // tooltipText: "Play/pause media" // sizeMultiplier: 0.8 // showBorder: false - // onClicked: MediaPlayer.playPause() + // onClicked: MediaService.playPause() // } NText { - text: MediaPlayer.isPlaying ? "pause" : "play_arrow" + text: MediaService.isPlaying ? "pause" : "play_arrow" font.family: "Material Symbols Outlined" font.pointSize: Style.fontSizeLarge * scaling verticalAlignment: Text.AlignVCenter - anchors.verticalCenter: parent.verticalCenter color: Colors.mPrimary MouseArea { @@ -35,21 +35,20 @@ Item { anchors.fill: parent onClicked: { - onClicked: MediaPlayer.playPause() + onClicked: MediaService.playPause() } } } // Track info NText { - text: MediaPlayer.trackTitle + (MediaPlayer.trackArtist !== "" ? ` - {MediaPlayer.trackArtist}` : "") + text: MediaService.trackTitle + (MediaService.trackArtist !== "" ? ` - {MediaService.trackArtist}` : "") color: Colors.mOnSurface font.pointSize: Style.fontSizeSmall * scaling font.weight: Style.fontWeightBold elide: Text.ElideRight verticalAlignment: Text.AlignVCenter - anchors.verticalCenter: parent.verticalCenter Layout.maximumWidth: 200 * scaling Layout.alignment: Qt.AlignVCenter } diff --git a/Modules/Bar/NotificationHistory.qml b/Modules/Bar/NotificationHistory.qml index f6ae033..d9fb9cc 100644 --- a/Modules/Bar/NotificationHistory.qml +++ b/Modules/Bar/NotificationHistory.qml @@ -3,6 +3,7 @@ import QtQuick.Layouts import QtQuick.Controls import Quickshell import Quickshell.Wayland +import qs.Commons import qs.Services import qs.Widgets diff --git a/Modules/Bar/SystemMonitor.qml b/Modules/Bar/SystemMonitor.qml index 8a8a84d..13d5a26 100644 --- a/Modules/Bar/SystemMonitor.qml +++ b/Modules/Bar/SystemMonitor.qml @@ -1,5 +1,6 @@ import QtQuick import Quickshell +import qs.Commons import qs.Services import qs.Widgets @@ -28,7 +29,7 @@ Row { NText { id: cpuUsageText - text: `${SystemStats.cpuUsage}%` + text: `${SystemStatsService.cpuUsage}%` font.pointSize: Style.fontSizeSmall * scaling font.weight: Style.fontWeightBold anchors.verticalCenter: parent.verticalCenter @@ -51,7 +52,7 @@ Row { } NText { - text: `${SystemStats.cpuTemp}°C` + text: `${SystemStatsService.cpuTemp}°C` font.pointSize: Style.fontSizeSmall * scaling font.weight: Style.fontWeightBold anchors.verticalCenter: parent.verticalCenter @@ -74,7 +75,7 @@ Row { } NText { - text: `${SystemStats.memoryUsageGb}G` + text: `${SystemStatsService.memoryUsageGb}G` font.pointSize: Style.fontSizeSmall * scaling font.weight: Style.fontWeightBold anchors.verticalCenter: parent.verticalCenter diff --git a/Modules/Bar/Tray.qml b/Modules/Bar/Tray.qml index 615749f..af612e9 100644 --- a/Modules/Bar/Tray.qml +++ b/Modules/Bar/Tray.qml @@ -5,6 +5,7 @@ import QtQuick.Controls import Quickshell import Quickshell.Services.SystemTray import Quickshell.Widgets +import qs.Commons import qs.Services import qs.Widgets diff --git a/Modules/Bar/TrayMenu.qml b/Modules/Bar/TrayMenu.qml index be43d09..d9741e3 100644 --- a/Modules/Bar/TrayMenu.qml +++ b/Modules/Bar/TrayMenu.qml @@ -2,6 +2,7 @@ import QtQuick import QtQuick.Controls import QtQuick.Layouts import Quickshell +import qs.Commons import qs.Services import qs.Widgets diff --git a/Modules/Bar/Volume.qml b/Modules/Bar/Volume.qml index f34726e..03a3889 100644 --- a/Modules/Bar/Volume.qml +++ b/Modules/Bar/Volume.qml @@ -2,6 +2,7 @@ import QtQuick import Quickshell import Quickshell.Services.Pipewire import qs.Modules.Settings +import qs.Commons import qs.Services import qs.Widgets @@ -15,15 +16,15 @@ Item { property bool firstVolumeReceived: false function getIcon() { - if (Audio.muted) { + if (AudioService.muted) { return "volume_off" } - return Audio.volume <= Number.EPSILON ? "volume_off" : (Audio.volume < 0.33 ? "volume_down" : "volume_up") + return AudioService.volume <= Number.EPSILON ? "volume_off" : (AudioService.volume < 0.33 ? "volume_down" : "volume_up") } // Connection used to open the pill when volume changes Connections { - target: Audio.sink?.audio ? Audio.sink?.audio : null + target: AudioService.sink?.audio ? AudioService.sink?.audio : null function onVolumeChanged() { // console.log("[Bar:Volume] onVolumeChanged") if (!firstVolumeReceived) { @@ -51,19 +52,19 @@ Item { iconCircleColor: Colors.mPrimary collapsedIconColor: Colors.mOnSurface autoHide: false // Important to be false so we can hover as long as we want - text: Math.floor(Audio.volume * 100) + "%" + text: Math.floor(AudioService.volume * 100) + "%" tooltipText: "Volume: " + Math.round( - Audio.volume * 100) + "%\nLeft click for advanced settings.\nScroll up/down to change volume." + AudioService.volume * 100) + "%\nLeft click for advanced settings.\nScroll up/down to change volume." onWheel: function (angle) { if (angle > 0) { - Audio.increaseVolume() + AudioService.increaseVolume() } else if (angle < 0) { - Audio.decreaseVolume() + AudioService.decreaseVolume() } } onClicked: { - settingsPanel.requestedTab = SettingsPanel.Tab.Audio + settingsPanel.requestedTab = SettingsPanel.Tab.AudioService settingsPanel.isLoaded = true } } diff --git a/Modules/Bar/WiFi.qml b/Modules/Bar/WiFi.qml index ef28f39..ee4bb9d 100644 --- a/Modules/Bar/WiFi.qml +++ b/Modules/Bar/WiFi.qml @@ -3,6 +3,7 @@ import QtQuick.Layouts import QtQuick.Controls import Quickshell import Quickshell.Wayland +import qs.Commons import qs.Services import qs.Widgets @@ -15,14 +16,14 @@ NIconButton { icon: { let connected = false let signalStrength = 0 - for (const net in network.networks) { - if (network.networks[net].connected) { + for (const net in NetworkService.networks) { + if (NetworkService.networks[net].connected) { connected = true signalStrength = network.networks[net].signal break } } - return connected ? network.signalIcon(signalStrength) : "wifi_off" + return connected ? NetworkService.signalIcon(signalStrength) : "wifi_off" } tooltipText: "WiFi Networks" onClicked: { @@ -36,20 +37,16 @@ NIconButton { wifiMenuLoader.item.hide() } else { wifiMenuLoader.item.visible = false - network.onMenuClosed() + NetworkService.onMenuClosed() } } else { // Panel is hidden, show it wifiMenuLoader.item.visible = true - network.onMenuOpened() + NetworkService.onMenuOpened() } } } - Network { - id: network - } - WiFiMenu { id: wifiMenuLoader } diff --git a/Modules/Bar/WiFiMenu.qml b/Modules/Bar/WiFiMenu.qml index ff4ea54..44ad9bc 100644 --- a/Modules/Bar/WiFiMenu.qml +++ b/Modules/Bar/WiFiMenu.qml @@ -3,6 +3,7 @@ import QtQuick.Layouts import QtQuick.Controls import Quickshell import Quickshell.Wayland +import qs.Commons import qs.Services import qs.Widgets @@ -42,7 +43,7 @@ NLoader { // Also handle visibility changes from external sources onVisibleChanged: { if (visible && Settings.data.network.wifiEnabled) { - network.refreshNetworks() + NetworkService.refreshNetworks() } else if (wifiMenuRect.opacityValue > 0) { // Start hide animation wifiMenuRect.scaleValue = 0.8 @@ -61,16 +62,12 @@ NLoader { onTriggered: { wifiPanel.visible = false wifiPanel.dismissed() - network.onMenuClosed() + NetworkService.onMenuClosed() } } WlrLayershell.keyboardFocus: WlrKeyboardFocus.OnDemand - Network { - id: network - } - // Timer to refresh networks when WiFi is enabled while menu is open Timer { id: wifiEnableRefreshTimer @@ -78,7 +75,7 @@ NLoader { repeat: false onTriggered: { if (Settings.data.network.wifiEnabled && wifiPanel.visible) { - network.refreshNetworks() + NetworkService.refreshNetworks() } } } @@ -153,7 +150,7 @@ NLoader { value: Settings.data.network.wifiEnabled onToggled: function (value) { Settings.data.network.wifiEnabled = value - network.setWifiEnabled(value) + NetworkService.setWifiEnabled(value) // If enabling WiFi while menu is open, refresh after a delay if (value) { @@ -168,7 +165,7 @@ NLoader { sizeMultiplier: 0.8 enabled: Settings.data.network.wifiEnabled && !network.isLoading onClicked: { - network.refreshNetworks() + NetworkService.refreshNetworks() } } @@ -268,7 +265,7 @@ NLoader { spacing: Style.marginSmall * scaling NText { - text: network.signalIcon(modelData.signal) + text: NetworkService.signalIcon(modelData.signal) font.family: "Material Symbols Outlined" font.pointSize: Style.fontSizeXL * scaling color: modelData.connected ? Colors.mSurface : (networkMouseArea.containsMouse ? Colors.mSurface : Colors.mOnSurface) @@ -297,9 +294,9 @@ NLoader { } NText { - visible: network.connectStatusSsid === modelData.ssid && network.connectStatus === "error" + visible: NetworkService.connectStatusSsid === modelData.ssid && NetworkService.connectStatus === "error" && network.connectError.length > 0 - text: network.connectError + text: NetworkService.connectError color: Colors.mError font.pointSize: Style.fontSizeSmall * scaling elide: Text.ElideRight @@ -310,12 +307,12 @@ NLoader { Item { Layout.preferredWidth: Style.baseWidgetSize * 0.7 * scaling Layout.preferredHeight: Style.baseWidgetSize * 0.7 * scaling - visible: network.connectStatusSsid === modelData.ssid - && (network.connectStatus !== "" || network.connectingSsid === modelData.ssid) + visible: NetworkService.connectStatusSsid === modelData.ssid + && (network.connectStatus !== "" || NetworkService.connectingSsid === modelData.ssid) NBusyIndicator { - visible: network.connectingSsid === modelData.ssid - running: network.connectingSsid === modelData.ssid + visible: NetworkService.connectingSsid === modelData.ssid + running: NetworkService.connectingSsid === modelData.ssid color: Colors.mPrimary anchors.centerIn: parent size: Style.baseWidgetSize * 0.7 * scaling @@ -323,7 +320,7 @@ NLoader { // TBC: Does nothing on my setup NText { - visible: network.connectStatus === "success" && !network.connectingSsid + visible: NetworkService.connectStatus === "success" && !NetworkService.connectingSsid text: "check_circle" font.family: "Material Symbols Outlined" font.pointSize: Style.fontSizeXL * scaling @@ -333,7 +330,7 @@ NLoader { // TBC: Does nothing on my setup NText { - visible: network.connectStatus === "error" && !network.connectingSsid + visible: NetworkService.connectStatus === "error" && !NetworkService.connectingSsid text: "error" font.family: "Material Symbols Outlined" font.pointSize: Style.fontSizeSmall * scaling @@ -356,8 +353,8 @@ NLoader { hoverEnabled: true onClicked: { if (modelData.connected) { - network.disconnectNetwork(modelData.ssid) - } else if (network.isSecured(modelData.security) && !modelData.existing) { + NetworkService.disconnectNetwork(modelData.ssid) + } else if (NetworkService.isSecured(modelData.security) && !modelData.existing) { passwordPromptSsid = modelData.ssid showPasswordPrompt = true passwordInput = "" // Clear previous input @@ -365,7 +362,7 @@ NLoader { passwordInputField.forceActiveFocus() }) } else { - network.connectNetwork(modelData.ssid, modelData.security) + NetworkService.connectNetwork(modelData.ssid, modelData.security) } } } @@ -413,7 +410,7 @@ NLoader { echoMode: TextInput.Password onTextChanged: passwordInput = text onAccepted: { - network.submitPassword(passwordPromptSsid, passwordInput) + NetworkService.submitPassword(passwordPromptSsid, passwordInput) showPasswordPrompt = false } @@ -448,7 +445,7 @@ NLoader { MouseArea { anchors.fill: parent onClicked: { - network.submitPassword(passwordPromptSsid, passwordInput) + NetworkService.submitPassword(passwordPromptSsid, passwordInput) showPasswordPrompt = false } cursorShape: Qt.PointingHandCursor diff --git a/Modules/Bar/Workspace.qml b/Modules/Bar/Workspace.qml index 669192b..54a5858 100644 --- a/Modules/Bar/Workspace.qml +++ b/Modules/Bar/Workspace.qml @@ -5,6 +5,7 @@ import QtQuick.Window import QtQuick.Effects import Quickshell import Quickshell.Io +import qs.Commons import qs.Services Item { @@ -42,8 +43,8 @@ Item { Component.onCompleted: { localWorkspaces.clear() - for (var i = 0; i < Workspaces.workspaces.count; i++) { - const ws = Workspaces.workspaces.get(i) + for (var i = 0; i < WorkspacesService.workspaces.count; i++) { + const ws = WorkspacesService.workspaces.get(i) if (ws.output.toLowerCase() === screen.name.toLowerCase()) { localWorkspaces.append(ws) } @@ -53,11 +54,11 @@ Item { } Connections { - target: Workspaces + target: WorkspacesService function onWorkspacesChanged() { localWorkspaces.clear() - for (var i = 0; i < Workspaces.workspaces.count; i++) { - const ws = Workspaces.workspaces.get(i) + for (var i = 0; i < WorkspacesService.workspaces.count; i++) { + const ws = WorkspacesService.workspaces.get(i) if (ws.output.toLowerCase() === screen.name.toLowerCase()) { localWorkspaces.append(ws) } @@ -181,7 +182,7 @@ Item { anchors.fill: parent cursorShape: Qt.PointingHandCursor onClicked: { - Workspaces.switchToWorkspace(model.idx) + WorkspacesService.switchToWorkspace(model.idx) } hoverEnabled: true } diff --git a/Modules/Calendar/Calendar.qml b/Modules/Calendar/Calendar.qml index 3596b2b..ac7071c 100644 --- a/Modules/Calendar/Calendar.qml +++ b/Modules/Calendar/Calendar.qml @@ -3,6 +3,7 @@ import QtQuick.Controls import QtQuick.Layouts import Quickshell import Quickshell.Wayland +import qs.Commons import qs.Services import qs.Widgets diff --git a/Modules/Demo/DemoPanel.qml b/Modules/Demo/DemoPanel.qml index 6546ed1..4dc220e 100644 --- a/Modules/Demo/DemoPanel.qml +++ b/Modules/Demo/DemoPanel.qml @@ -3,6 +3,7 @@ import QtQuick.Controls import QtQuick.Layouts import Quickshell import Quickshell.Wayland +import qs.Commons import qs.Services import qs.Widgets @@ -132,7 +133,7 @@ NLoader { font.weight: Style.fontWeightBold } NText { - text: `${Math.round(Scaling.overrideScale * 100)}%` + text: `${Math.round(ScalingService.overrideScale * 100)}%` Layout.alignment: Qt.AlignVCenter } RowLayout { @@ -142,14 +143,14 @@ NLoader { from: 0.6 to: 1.8 stepSize: 0.01 - value: Scaling.overrideScale + value: ScalingService.overrideScale implicitWidth: bgRect.width * 0.75 onMoved: { } onPressedChanged: { - Scaling.overrideScale = value - Scaling.overrideEnabled = true + ScalingService.overrideScale = value + ScalingService.overrideEnabled = true } } NIconButton { @@ -157,8 +158,8 @@ NLoader { tooltipText: "Reset Scaling" fontPointSize: Style.fontSizeLarge * scaling onClicked: { - Scaling.overrideEnabled = false - Scaling.overrideScale = 1.0 + ScalingService.overrideEnabled = false + ScalingService.overrideScale = 1.0 } } } diff --git a/Modules/Dock/Dock.qml b/Modules/Dock/Dock.qml index 9b4a18f..a4e1826 100644 --- a/Modules/Dock/Dock.qml +++ b/Modules/Dock/Dock.qml @@ -5,6 +5,7 @@ import QtQuick.Effects import Quickshell import Quickshell.Wayland import Quickshell.Widgets +import qs.Commons import qs.Services import qs.Widgets @@ -18,7 +19,7 @@ NLoader { id: dockWindow required property ShellScreen modelData - readonly property real scaling: Scaling.scale(screen) + readonly property real scaling: ScalingService.scale(screen) screen: modelData // Auto-hide properties diff --git a/Modules/LockScreen/LockScreen.qml b/Modules/LockScreen/LockScreen.qml index e8e289c..bdfd843 100644 --- a/Modules/LockScreen/LockScreen.qml +++ b/Modules/LockScreen/LockScreen.qml @@ -7,6 +7,7 @@ import Quickshell.Wayland import Quickshell.Services.Pam import Quickshell.Io import Quickshell.Widgets +import qs.Commons import qs.Services import qs.Widgets @@ -14,7 +15,7 @@ WlSessionLock { id: lock // Lockscreen is a different beast, needs a capital 'S' in 'Screen' to get the current screen - readonly property real scaling: Scaling.scale(Screen) + readonly property real scaling: ScalingService.scale(Screen) property string errorMessage: "" property bool authenticating: false @@ -95,7 +96,7 @@ WlSessionLock { id: lockBgImage anchors.fill: parent fillMode: Image.PreserveAspectCrop - source: Wallpapers.currentWallpaper !== "" ? Wallpapers.currentWallpaper : "" + source: WallpapersService.currentWallpaper !== "" ? WallpapersService.currentWallpaper : "" cache: true smooth: true mipmap: false diff --git a/Modules/Notification/Notification.qml b/Modules/Notification/Notification.qml index 5b7e115..0420eeb 100644 --- a/Modules/Notification/Notification.qml +++ b/Modules/Notification/Notification.qml @@ -4,6 +4,7 @@ import Quickshell import Quickshell.Widgets import Quickshell.Wayland import Quickshell.Services.Notifications +import qs.Commons import qs.Services import qs.Widgets @@ -15,7 +16,7 @@ Variants { id: root required property ShellScreen modelData - readonly property real scaling: Scaling.scale(screen) + readonly property real scaling: ScalingService.scale(screen) screen: modelData // Access the notification model from the service diff --git a/Modules/Notification/NotificationHistoryPanel.qml b/Modules/Notification/NotificationHistoryPanel.qml index 829df38..f508b82 100644 --- a/Modules/Notification/NotificationHistoryPanel.qml +++ b/Modules/Notification/NotificationHistoryPanel.qml @@ -4,6 +4,7 @@ import QtQuick.Controls import Quickshell import Quickshell.Wayland import Quickshell.Services.Notifications +import qs.Commons import qs.Services import qs.Widgets diff --git a/Modules/Settings/SettingsPanel.qml b/Modules/Settings/SettingsPanel.qml index 3099a7f..d423b3f 100644 --- a/Modules/Settings/SettingsPanel.qml +++ b/Modules/Settings/SettingsPanel.qml @@ -4,6 +4,7 @@ import QtQuick.Layouts import Quickshell import Quickshell.Wayland import qs.Modules.Settings.Tabs as Tabs +import qs.Commons import qs.Services import qs.Widgets @@ -13,7 +14,7 @@ NLoader { // Tabs enumeration, order is NOT relevant enum Tab { About, - Audio, + AudioService, Bar, ColorScheme, Display, @@ -119,8 +120,8 @@ NLoader { "icon": "web_asset", "source": barTab }, { - "id": SettingsPanel.Tab.Audio, - "label": "Audio", + "id": SettingsPanel.Tab.AudioService, + "label": "AudioService", "icon": "volume_up", "source": audioTab }, { diff --git a/Modules/Settings/Tabs/AboutTab.qml b/Modules/Settings/Tabs/AboutTab.qml index 2fd7973..b9e9cbb 100644 --- a/Modules/Settings/Tabs/AboutTab.qml +++ b/Modules/Settings/Tabs/AboutTab.qml @@ -4,15 +4,16 @@ import QtQuick.Effects import QtQuick.Layouts import Quickshell import Quickshell.Io +import qs.Commons import qs.Services import qs.Widgets ColumnLayout { id: root - property string latestVersion: GitHub.latestVersion + property string latestVersion: GitHubService.latestVersion property string currentVersion: "Unknown" // Fallback version - property var contributors: GitHub.contributors + property var contributors: GitHubService.contributors spacing: 0 Layout.fillWidth: true diff --git a/Modules/Settings/Tabs/AudioTab.qml b/Modules/Settings/Tabs/AudioTab.qml index 36e3e2d..8944043 100644 --- a/Modules/Settings/Tabs/AudioTab.qml +++ b/Modules/Settings/Tabs/AudioTab.qml @@ -5,18 +5,19 @@ import Quickshell.Services.Pipewire import qs.Modules.Settings import qs.Widgets +import qs.Commons import qs.Services ColumnLayout { id: root - property real localVolume: Audio.volume + property real localVolume: AudioService.volume // Connection used to open the pill when volume changes Connections { - target: Audio.sink?.audio ? Audio.sink?.audio : null + target: AudioService.sink?.audio ? AudioService.sink?.audio : null function onVolumeChanged() { - localVolume = Audio.volume + localVolume = AudioService.volume } } @@ -46,7 +47,7 @@ ColumnLayout { Layout.fillWidth: true NText { - text: "Audio" + text: "AudioService" font.pointSize: Style.fontSizeXL * scaling font.weight: Style.fontWeightBold color: Colors.mOnSurface @@ -90,8 +91,8 @@ ColumnLayout { running: true repeat: true onTriggered: { - if (Math.abs(localVolume - Audio.volume) >= 0.01) { - Audio.setVolume(localVolume) + if (Math.abs(localVolume - AudioService.volume) >= 0.01) { + AudioService.setVolume(localVolume) } } } @@ -108,7 +109,7 @@ ColumnLayout { } NText { - text: Math.floor(Audio.volume * 100) + "%" + text: Math.floor(AudioService.volume * 100) + "%" Layout.alignment: Qt.AlignVCenter color: Colors.mOnSurface } @@ -122,12 +123,12 @@ ColumnLayout { Layout.topMargin: Style.marginMedium * scaling NToggle { - label: "Mute Audio" + label: "Mute AudioService" description: "Mute or unmute the default audio output" - value: Audio.muted + value: AudioService.muted onToggled: function (newValue) { - if (Audio.sink && Audio.sink.audio) { - Audio.sink.audio.muted = newValue + if (AudioService.sink && AudioService.sink.audio) { + AudioService.sink.audio.muted = newValue } } } @@ -140,13 +141,13 @@ ColumnLayout { Layout.bottomMargin: Style.marginLarge * scaling } - // Audio Devices + // AudioService Devices ColumnLayout { spacing: Style.marginLarge * scaling Layout.fillWidth: true NText { - text: "Audio Devices" + text: "AudioService Devices" font.pointSize: Style.fontSizeXL * scaling font.weight: Style.fontWeightBold color: Colors.mOnSurface @@ -180,12 +181,12 @@ ColumnLayout { } Repeater { - model: Audio.sinks + model: AudioService.sinks NRadioButton { required property PwNode modelData ButtonGroup.group: sinks - checked: Audio.sink?.id === modelData.id - onClicked: Audio.setAudioSink(modelData) + checked: AudioService.sink?.id === modelData.id + onClicked: AudioService.setAudioSink(modelData) text: modelData.description } } @@ -219,12 +220,12 @@ ColumnLayout { } Repeater { - model: Audio.sources + model: AudioService.sources NRadioButton { required property PwNode modelData ButtonGroup.group: sources - checked: Audio.source?.id === modelData.id - onClicked: Audio.setAudioSource(modelData) + checked: AudioService.source?.id === modelData.id + onClicked: AudioService.setAudioSource(modelData) text: modelData.description } } @@ -238,20 +239,20 @@ ColumnLayout { Layout.bottomMargin: Style.marginMedium * scaling } - // Audio Visualizer Category + // AudioService Visualizer Category ColumnLayout { spacing: Style.marginSmall * scaling Layout.fillWidth: true NText { - text: "Audio Visualizer" + text: "AudioService Visualizer" font.pointSize: Style.fontSizeXL * scaling font.weight: Style.fontWeightBold color: Colors.mOnSurface Layout.bottomMargin: Style.marginSmall * scaling } - // Audio Visualizer section + // AudioService Visualizer section NComboBox { id: audioVisualizerCombo label: "Visualization Type" diff --git a/Modules/Settings/Tabs/BarTab.qml b/Modules/Settings/Tabs/BarTab.qml index 56b8e02..892fc96 100644 --- a/Modules/Settings/Tabs/BarTab.qml +++ b/Modules/Settings/Tabs/BarTab.qml @@ -1,6 +1,7 @@ import QtQuick import QtQuick.Controls import QtQuick.Layouts +import qs.Commons import qs.Services import qs.Widgets diff --git a/Modules/Settings/Tabs/ColorSchemeTab.qml b/Modules/Settings/Tabs/ColorSchemeTab.qml index 1b62b8f..390cb6c 100644 --- a/Modules/Settings/Tabs/ColorSchemeTab.qml +++ b/Modules/Settings/Tabs/ColorSchemeTab.qml @@ -1,6 +1,7 @@ import QtQuick import QtQuick.Controls import QtQuick.Layouts +import qs.Commons import qs.Services import qs.Widgets import Quickshell.Io @@ -66,7 +67,7 @@ ColumnLayout { // When the list of available schemes changes, clear the cache. // The Repeater below will automatically re-create the FileViews. Connections { - target: ColorSchemes + target: ColorSchemesService function onSchemesChanged() { schemeColorsCache = {} } @@ -78,7 +79,7 @@ ColumnLayout { id: fileLoaders Repeater { - model: ColorSchemes.schemes + model: ColorSchemesService.schemes // The delegate is a Component, which correctly wraps the non-visual FileView delegate: Item { @@ -132,7 +133,7 @@ ColumnLayout { onToggled: function (newValue) { Settings.data.colorSchemes.useWallpaperColors = newValue if (Settings.data.colorSchemes.useWallpaperColors) { - ColorSchemes.changedWallpaper() + ColorSchemesService.changedWallpaper() } } } @@ -177,7 +178,7 @@ ColumnLayout { Layout.fillWidth: true Repeater { - model: ColorSchemes.schemes + model: ColorSchemesService.schemes Rectangle { id: schemeCard @@ -197,9 +198,10 @@ ColumnLayout { anchors.fill: parent onClicked: { // Disable useWallpaperColors when picking a predefined color scheme + // TBC: broken uncheck useWallpaperColors Settings.data.colorSchemes.useWallpaperColors = false Settings.data.colorSchemes.predefinedScheme = schemePath - ColorSchemes.applyScheme(schemePath) + ColorSchemesService.applyScheme(schemePath) } hoverEnabled: true cursorShape: Qt.PointingHandCursor diff --git a/Modules/Settings/Tabs/DisplayTab.qml b/Modules/Settings/Tabs/DisplayTab.qml index b9b39d0..3b46880 100644 --- a/Modules/Settings/Tabs/DisplayTab.qml +++ b/Modules/Settings/Tabs/DisplayTab.qml @@ -2,6 +2,7 @@ import QtQuick import QtQuick.Layouts import QtQuick.Controls import Quickshell +import qs.Commons import qs.Services import qs.Widgets diff --git a/Modules/Settings/Tabs/GeneralTab.qml b/Modules/Settings/Tabs/GeneralTab.qml index b3bf2a9..aae1f08 100644 --- a/Modules/Settings/Tabs/GeneralTab.qml +++ b/Modules/Settings/Tabs/GeneralTab.qml @@ -1,6 +1,7 @@ import QtQuick import QtQuick.Controls import QtQuick.Layouts +import qs.Commons import qs.Services import qs.Widgets diff --git a/Modules/Settings/Tabs/NetworkTab.qml b/Modules/Settings/Tabs/NetworkTab.qml index 6ff7b82..e90fccf 100644 --- a/Modules/Settings/Tabs/NetworkTab.qml +++ b/Modules/Settings/Tabs/NetworkTab.qml @@ -3,6 +3,7 @@ import QtQuick.Controls import QtQuick.Layouts import Quickshell import Quickshell.Bluetooth +import qs.Commons import qs.Services import qs.Widgets diff --git a/Modules/Settings/Tabs/ScreenRecorderTab.qml b/Modules/Settings/Tabs/ScreenRecorderTab.qml index eb14a4c..ebc9e26 100644 --- a/Modules/Settings/Tabs/ScreenRecorderTab.qml +++ b/Modules/Settings/Tabs/ScreenRecorderTab.qml @@ -1,6 +1,7 @@ import QtQuick import QtQuick.Controls import QtQuick.Layouts +import qs.Commons import qs.Services import qs.Widgets @@ -206,23 +207,23 @@ ColumnLayout { Layout.bottomMargin: Style.marginLarge * scaling } - // Audio Settings + // AudioService Settings ColumnLayout { spacing: Style.marginLarge * scaling Layout.fillWidth: true NText { - text: "Audio Settings" + text: "AudioService Settings" font.pointSize: Style.fontSizeXL * scaling font.weight: Style.fontWeightBold color: Colors.mOnSurface Layout.bottomMargin: Style.marginSmall * scaling } - // Audio Source + // AudioService Source NComboBox { - label: "Audio Source" - description: "Audio source to capture during recording" + label: "AudioService Source" + description: "AudioService source to capture during recording" model: ListModel { ListElement { key: "default_output" @@ -243,9 +244,9 @@ ColumnLayout { } } - // Audio Codec + // AudioService Codec NComboBox { - label: "Audio Codec" + label: "AudioService Codec" description: "Opus is recommended for best performance and smallest audio size" model: ListModel { ListElement { diff --git a/Modules/Settings/Tabs/TimeWeatherTab.qml b/Modules/Settings/Tabs/TimeWeatherTab.qml index 47cbf7c..8cd1dec 100644 --- a/Modules/Settings/Tabs/TimeWeatherTab.qml +++ b/Modules/Settings/Tabs/TimeWeatherTab.qml @@ -1,6 +1,7 @@ import QtQuick import QtQuick.Controls import QtQuick.Layouts +import qs.Commons import qs.Services import qs.Widgets diff --git a/Modules/Settings/Tabs/WallpaperSelectorTab.qml b/Modules/Settings/Tabs/WallpaperSelectorTab.qml index 0077ff8..20faf93 100644 --- a/Modules/Settings/Tabs/WallpaperSelectorTab.qml +++ b/Modules/Settings/Tabs/WallpaperSelectorTab.qml @@ -2,6 +2,7 @@ import QtQuick import QtQuick.Layouts import QtQuick.Controls import Qt.labs.folderlistmodel +import qs.Commons import qs.Services import qs.Widgets @@ -48,7 +49,7 @@ Item { id: currentWallpaperImage anchors.fill: parent anchors.margins: Style.marginSmall * scaling - imagePath: Wallpapers.currentWallpaper + imagePath: WallpapersService.currentWallpaper fallbackIcon: "image" borderColor: Colors.mOutline borderWidth: Math.max(1, Style.borderThin * scaling) @@ -96,7 +97,7 @@ Item { icon: "refresh" tooltipText: "Refresh wallpaper list" onClicked: { - Wallpapers.loadWallpapers() + WallpapersService.loadWallpapers() } Layout.alignment: Qt.AlignTop | Qt.AlignRight } @@ -106,14 +107,14 @@ Item { Item { Layout.fillWidth: true Layout.preferredHeight: { - return Math.ceil(Wallpapers.wallpaperList.length / wallpaperGridView.columns) * wallpaperGridView.cellHeight + return Math.ceil(WallpapersService.wallpaperList.length / wallpaperGridView.columns) * wallpaperGridView.cellHeight } GridView { id: wallpaperGridView anchors.fill: parent clip: true - model: Wallpapers.wallpaperList + model: WallpapersService.wallpaperList boundsBehavior: Flickable.StopAtBounds flickableDirection: Flickable.AutoFlickDirection @@ -134,7 +135,7 @@ Item { delegate: Rectangle { id: wallpaperItem property string wallpaperPath: modelData - property bool isSelected: wallpaperPath === Wallpapers.currentWallpaper + property bool isSelected: wallpaperPath === WallpapersService.currentWallpaper width: wallpaperGridView.itemSize height: Math.floor(wallpaperGridView.itemSize * 0.67) @@ -195,7 +196,7 @@ Item { acceptedButtons: Qt.LeftButton hoverEnabled: true onClicked: { - Wallpapers.changeWallpaper(wallpaperPath) + WallpapersService.changeWallpaper(wallpaperPath) } } } @@ -208,7 +209,7 @@ Item { radius: Style.radiusMedium * scaling border.color: Colors.mOutline border.width: Math.max(1, Style.borderThin * scaling) - visible: Wallpapers.wallpaperList.length === 0 && !Wallpapers.scanning + visible: WallpapersService.wallpaperList.length === 0 && !WallpapersService.scanning ColumnLayout { anchors.centerIn: parent diff --git a/Modules/Settings/Tabs/WallpaperTab.qml b/Modules/Settings/Tabs/WallpaperTab.qml index 9e75c84..102689a 100644 --- a/Modules/Settings/Tabs/WallpaperTab.qml +++ b/Modules/Settings/Tabs/WallpaperTab.qml @@ -1,6 +1,7 @@ import QtQuick import QtQuick.Controls import QtQuick.Layouts +import qs.Commons import qs.Services import qs.Widgets diff --git a/Modules/SidePanel/Cards/MediaCard.qml b/Modules/SidePanel/Cards/MediaCard.qml index 5414789..76d6f72 100644 --- a/Modules/SidePanel/Cards/MediaCard.qml +++ b/Modules/SidePanel/Cards/MediaCard.qml @@ -3,6 +3,7 @@ import QtQuick.Controls import QtQuick.Layouts import Quickshell import qs.Modules.Audio +import qs.Commons import qs.Services import qs.Widgets @@ -17,7 +18,7 @@ NBox { // Height can be overridden by parent layout (SidePanel binds it to stats card) //implicitHeight: content.implicitHeight + Style.marginLarge * 2 * scaling // Component.onCompleted: { - // console.log(MediaPlayer.trackArtUrl) + // console.log(MediaService.trackArtUrl) // } ColumnLayout { anchors.fill: parent @@ -58,7 +59,7 @@ NBox { ColumnLayout { id: main - visible: MediaPlayer.currentPlayer && MediaPlayer.canPlay + visible: MediaService.currentPlayer && MediaService.canPlay spacing: Style.marginMedium * scaling // Player selector @@ -66,10 +67,10 @@ NBox { id: playerSelector Layout.fillWidth: true Layout.preferredHeight: Style.barHeight * 0.83 * scaling - visible: MediaPlayer.getAvailablePlayers().length > 1 - model: MediaPlayer.getAvailablePlayers() + visible: MediaService.getAvailablePlayers().length > 1 + model: MediaService.getAvailablePlayers() textRole: "identity" - currentIndex: MediaPlayer.selectedPlayerIndex + currentIndex: MediaService.selectedPlayerIndex background: Rectangle { visible: false @@ -145,8 +146,8 @@ NBox { } onActivated: { - MediaPlayer.selectedPlayerIndex = currentIndex - MediaPlayer.updateCurrentPlayer() + MediaService.selectedPlayerIndex = currentIndex + MediaService.updateCurrentPlayer() } } @@ -167,11 +168,11 @@ NBox { NImageRounded { id: trackArt - visible: MediaPlayer.trackArtUrl.toString() !== "" + visible: MediaService.trackArtUrl.toString() !== "" anchors.fill: parent anchors.margins: Style.marginTiny * scaling - imagePath: MediaPlayer.trackArtUrl + imagePath: MediaService.trackArtUrl fallbackIcon: "music_note" borderColor: Colors.mOutline borderWidth: Math.max(1, Style.borderThin * scaling) @@ -196,8 +197,8 @@ NBox { spacing: Style.marginTiny * scaling NText { - visible: MediaPlayer.trackTitle !== "" - text: MediaPlayer.trackTitle + visible: MediaService.trackTitle !== "" + text: MediaService.trackTitle font.pointSize: Style.fontSizeMedium * scaling font.weight: Style.fontWeightBold elide: Text.ElideRight @@ -207,8 +208,8 @@ NBox { } NText { - visible: MediaPlayer.trackArtist !== "" - text: MediaPlayer.trackArtist + visible: MediaService.trackArtist !== "" + text: MediaService.trackArtist color: Colors.mOnSurface font.pointSize: Style.fontSizeSmall * scaling elide: Text.ElideRight @@ -216,8 +217,8 @@ NBox { } NText { - visible: MediaPlayer.trackAlbum !== "" - text: MediaPlayer.trackAlbum + visible: MediaService.trackAlbum !== "" + text: MediaService.trackAlbum color: Colors.mOnSurface font.pointSize: Style.fontSizeSmall * scaling elide: Text.ElideRight @@ -230,7 +231,7 @@ NBox { // Progress bar Rectangle { id: progressBarBackground - visible: (MediaPlayer.currentPlayer && MediaPlayer.trackLength > 0) + visible: (MediaService.currentPlayer && MediaService.trackLength > 0) width: parent.width height: 4 * scaling radius: Style.radiusSmall * scaling @@ -238,10 +239,10 @@ NBox { Layout.fillWidth: true property real progressRatio: { - if (!MediaPlayer.currentPlayer || !MediaPlayer.isPlaying || MediaPlayer.trackLength <= 0) { + if (!MediaService.currentPlayer || !MediaService.isPlaying || MediaService.trackLength <= 0) { return 0 } - return Math.min(1, MediaPlayer.currentPosition / MediaPlayer.trackLength) + return Math.min(1, MediaService.currentPosition / MediaService.trackLength) } Rectangle { @@ -261,7 +262,7 @@ NBox { // Interactive progress handle Rectangle { id: progressHandle - visible: (MediaPlayer.currentPlayer && MediaPlayer.trackLength > 0) + visible: (MediaService.currentPlayer && MediaService.trackLength > 0) width: 16 * scaling height: 16 * scaling radius: width * 0.5 @@ -285,17 +286,17 @@ NBox { anchors.fill: parent hoverEnabled: true cursorShape: Qt.PointingHandCursor - enabled: MediaPlayer.trackLength > 0 && MediaPlayer.canSeek + enabled: MediaService.trackLength > 0 && MediaService.canSeek onClicked: function (mouse) { let ratio = mouse.x / width - MediaPlayer.seekByRatio(ratio) + MediaService.seekByRatio(ratio) } onPositionChanged: function (mouse) { if (pressed) { let ratio = Math.max(0, Math.min(1, mouse.x / width)) - MediaPlayer.seekByRatio(ratio) + MediaService.seekByRatio(ratio) } } } @@ -312,24 +313,24 @@ NBox { NIconButton { icon: "skip_previous" tooltipText: "Previous Media" - visible: MediaPlayer.canGoPrevious - onClicked: MediaPlayer.canGoPrevious ? MediaPlayer.previous() : {} + visible: MediaService.canGoPrevious + onClicked: MediaService.canGoPrevious ? MediaService.previous() : {} } // Play/Pause button NIconButton { - icon: MediaPlayer.isPlaying ? "pause" : "play_arrow" - tooltipText: MediaPlayer.isPlaying ? "Pause" : "Play" - visible: (MediaPlayer.canPlay || MediaPlayer.canPause) - onClicked: (MediaPlayer.canPlay || MediaPlayer.canPause) ? MediaPlayer.playPause() : {} + icon: MediaService.isPlaying ? "pause" : "play_arrow" + tooltipText: MediaService.isPlaying ? "Pause" : "Play" + visible: (MediaService.canPlay || MediaService.canPause) + onClicked: (MediaService.canPlay || MediaService.canPause) ? MediaService.playPause() : {} } // Next button NIconButton { icon: "skip_next" tooltipText: "Next Media" - visible: MediaPlayer.canGoNext - onClicked: MediaPlayer.canGoNext ? MediaPlayer.next() : {} + visible: MediaService.canGoNext + onClicked: MediaService.canGoNext ? MediaService.next() : {} } } } @@ -341,7 +342,7 @@ NBox { sourceComponent: LinearSpectrum { width: 300 * scaling height: 80 * scaling - values: Cava.values + values: CavaService.values fillColor: Colors.mOnSurface Layout.alignment: Qt.AlignHCenter } diff --git a/Modules/SidePanel/Cards/PowerProfilesCard.qml b/Modules/SidePanel/Cards/PowerProfilesCard.qml index 8d6b49d..e77081c 100644 --- a/Modules/SidePanel/Cards/PowerProfilesCard.qml +++ b/Modules/SidePanel/Cards/PowerProfilesCard.qml @@ -3,6 +3,7 @@ import QtQuick.Controls import QtQuick.Layouts import Quickshell import Quickshell.Services.UPower +import qs.Commons import qs.Services import qs.Widgets diff --git a/Modules/SidePanel/Cards/ProfileCard.qml b/Modules/SidePanel/Cards/ProfileCard.qml index 99bef0c..c5e8c5a 100644 --- a/Modules/SidePanel/Cards/ProfileCard.qml +++ b/Modules/SidePanel/Cards/ProfileCard.qml @@ -6,6 +6,7 @@ import Quickshell.Io import Quickshell.Widgets import qs.Modules.Settings import qs.Modules.SidePanel +import qs.Commons import qs.Services import qs.Widgets diff --git a/Modules/SidePanel/Cards/SystemMonitorCard.qml b/Modules/SidePanel/Cards/SystemMonitorCard.qml index f353896..c3fb93e 100644 --- a/Modules/SidePanel/Cards/SystemMonitorCard.qml +++ b/Modules/SidePanel/Cards/SystemMonitorCard.qml @@ -1,5 +1,6 @@ import QtQuick import QtQuick.Layouts +import qs.Commons import qs.Services import qs.Widgets @@ -27,7 +28,7 @@ NBox { } NCircleStat { - value: SystemStats.cpuUsage + value: SystemStatsService.cpuUsage icon: "speed" flat: true contentScale: 0.8 @@ -35,7 +36,7 @@ NBox { height: 68 * scaling } NCircleStat { - value: SystemStats.cpuTemp + value: SystemStatsService.cpuTemp suffix: "°C" icon: "device_thermostat" flat: true @@ -44,7 +45,7 @@ NBox { height: 68 * scaling } NCircleStat { - value: SystemStats.memoryUsagePer + value: SystemStatsService.memoryUsagePer icon: "memory" flat: true contentScale: 0.8 @@ -52,7 +53,7 @@ NBox { height: 68 * scaling } NCircleStat { - value: SystemStats.diskUsage + value: SystemStatsService.diskUsage icon: "hard_drive" flat: true contentScale: 0.8 diff --git a/Modules/SidePanel/Cards/UtilitiesCard.qml b/Modules/SidePanel/Cards/UtilitiesCard.qml index 81e21f7..11c8a96 100644 --- a/Modules/SidePanel/Cards/UtilitiesCard.qml +++ b/Modules/SidePanel/Cards/UtilitiesCard.qml @@ -3,6 +3,7 @@ import QtQuick.Controls import QtQuick.Layouts import Quickshell import qs.Modules.Settings +import qs.Commons import qs.Services import qs.Widgets @@ -22,10 +23,10 @@ NBox { // Screen Recorder NIconButton { icon: "videocam" - tooltipText: ScreenRecorder.isRecording ? "Stop Screen Recording" : "Start Screen Recording" - showFilled: ScreenRecorder.isRecording + tooltipText: ScreenRecorderService.isRecording ? "Stop Screen Recording" : "Start Screen Recording" + showFilled: ScreenRecorderService.isRecording onClicked: { - ScreenRecorder.toggleRecording() + ScreenRecorderService.toggleRecording() } } diff --git a/Modules/SidePanel/Cards/WeatherCard.qml b/Modules/SidePanel/Cards/WeatherCard.qml index 5063108..58bf982 100644 --- a/Modules/SidePanel/Cards/WeatherCard.qml +++ b/Modules/SidePanel/Cards/WeatherCard.qml @@ -1,6 +1,7 @@ import QtQuick import QtQuick.Layouts import Quickshell +import qs.Commons import qs.Services import qs.Widgets @@ -8,7 +9,7 @@ import qs.Widgets NBox { id: root - readonly property bool weatherReady: (Location.data.weather !== null) + readonly property bool weatherReady: (LocationService.data.weather !== null) // TBC weatherReady is not turning to false when we reset weather... Layout.fillWidth: true @@ -26,7 +27,7 @@ NBox { RowLayout { spacing: Style.marginSmall * scaling NText { - text: weatherReady ? Location.weatherSymbolFromCode(Location.data.weather.current_weather.weathercode) : "" + text: weatherReady ? LocationService.weatherSymbolFromCode(LocationService.data.weather.current_weather.weathercode) : "" font.family: "Material Symbols Outlined" font.pointSize: Style.fontSizeXXL * 1.5 * scaling color: Colors.mPrimary @@ -51,10 +52,10 @@ NBox { if (!weatherReady) { return "" } - var temp = Location.data.weather.current_weather.temperature + var temp = LocationService.data.weather.current_weather.temperature var suffix = "C" if (Settings.data.location.useFahrenheit) { - temp = Location.celsiusToFahrenheit(temp) + temp = LocationService.celsiusToFahrenheit(temp) var suffix = "F" } temp = Math.round(temp) @@ -65,9 +66,9 @@ NBox { } NText { - text: weatherReady ? `(${Location.data.weather.timezone_abbreviation})` : "" + text: weatherReady ? `(${LocationService.data.weather.timezone_abbreviation})` : "" font.pointSize: Style.fontSizeSmall * scaling - visible: Location.data.weather + visible: LocationService.data.weather } } } @@ -84,27 +85,27 @@ NBox { Layout.alignment: Qt.AlignHCenter spacing: Style.marginLarge * scaling Repeater { - model: weatherReady ? Location.data.weather.daily.time : [] + model: weatherReady ? LocationService.data.weather.daily.time : [] delegate: ColumnLayout { Layout.alignment: Qt.AlignHCenter spacing: Style.marginSmall * scaling NText { - text: Qt.formatDateTime(new Date(Location.data.weather.daily.time[index]), "ddd") + text: Qt.formatDateTime(new Date(LocationService.data.weather.daily.time[index]), "ddd") color: Colors.mOnSurface } NText { - text: Location.weatherSymbolFromCode(Location.data.weather.daily.weathercode[index]) + text: LocationService.weatherSymbolFromCode(LocationService.data.weather.daily.weathercode[index]) font.family: "Material Symbols Outlined" font.pointSize: Style.fontSizeXL * scaling color: Colors.mPrimary } NText { text: { - var max = Location.data.weather.daily.temperature_2m_max[index] - var min = Location.data.weather.daily.temperature_2m_min[index] + var max = LocationService.data.weather.daily.temperature_2m_max[index] + var min = LocationService.data.weather.daily.temperature_2m_min[index] if (Settings.data.location.useFahrenheit) { - max = Location.celsiusToFahrenheit(max) - min = Location.celsiusToFahrenheit(min) + max = LocationService.celsiusToFahrenheit(max) + min = LocationService.celsiusToFahrenheit(min) } max = Math.round(max) min = Math.round(min) diff --git a/Modules/SidePanel/PowerMenu.qml b/Modules/SidePanel/PowerMenu.qml index 28139f4..fbbd3e5 100644 --- a/Modules/SidePanel/PowerMenu.qml +++ b/Modules/SidePanel/PowerMenu.qml @@ -4,6 +4,7 @@ import QtQuick.Layouts import Quickshell import Quickshell.Io import Quickshell.Widgets +import qs.Commons import qs.Services import qs.Widgets import qs.Modules.LockScreen @@ -347,9 +348,9 @@ NPanel { // ---------------------------------- // System functions function logout() { - if (Workspaces.isNiri) { + if (WorkspacesService.isNiri) { logoutProcessNiri.running = true - } else if (Workspaces.isHyprland) { + } else if (WorkspacesService.isHyprland) { logoutProcessHyprland.running = true } else { console.warn("No supported compositor detected for logout") diff --git a/Modules/SidePanel/SidePanel.qml b/Modules/SidePanel/SidePanel.qml index 8f187ac..76f03e0 100644 --- a/Modules/SidePanel/SidePanel.qml +++ b/Modules/SidePanel/SidePanel.qml @@ -3,6 +3,7 @@ import QtQuick.Controls import QtQuick.Layouts import Quickshell import qs.Modules.SidePanel.Cards +import qs.Commons import qs.Services import qs.Widgets diff --git a/Services/Audio.qml b/Services/AudioService.qml similarity index 91% rename from Services/Audio.qml rename to Services/AudioService.qml index 137dff6..e31f17e 100644 --- a/Services/Audio.qml +++ b/Services/AudioService.qml @@ -53,7 +53,7 @@ Singleton { function onMutedChanged() { root._muted = (sink?.audio.muted ?? true) - console.log("[Audio] onMuteChanged:", root._muted) + console.log("[AudioService] onMuteChanged:", root._muted) } } @@ -70,9 +70,9 @@ Singleton { // Clamp it accordingly sink.audio.muted = false sink.audio.volume = Math.max(0, Math.min(1, newVolume)) - //console.log("[Audio] setVolume", sink.audio.volume); + //console.log("[AudioService] setVolume", sink.audio.volume); } else { - console.warn("[Audio] No sink available") + console.warn("[AudioService] No sink available") } } @@ -80,7 +80,7 @@ Singleton { if (sink?.ready && sink?.audio) { sink.audio.muted = muted } else { - console.warn("[Audio] No sink available") + console.warn("[AudioService] No sink available") } } diff --git a/Services/Cava.qml b/Services/CavaService.qml similarity index 98% rename from Services/Cava.qml rename to Services/CavaService.qml index 3a5626f..89e4248 100644 --- a/Services/Cava.qml +++ b/Services/CavaService.qml @@ -37,7 +37,7 @@ Singleton { Process { id: process stdinEnabled: true - running: MediaPlayer.isPlaying + running: MediaService.isPlaying command: ["cava", "-p", "/dev/stdin"] onExited: { stdinEnabled = true diff --git a/Services/Clipboard.qml b/Services/ClipboardService.qml similarity index 99% rename from Services/Clipboard.qml rename to Services/ClipboardService.qml index c66b3ce..008e83c 100644 --- a/Services/Clipboard.qml +++ b/Services/ClipboardService.qml @@ -3,6 +3,7 @@ pragma Singleton import QtQuick import Quickshell import Quickshell.Io +import qs.Commons import qs.Services Singleton { diff --git a/Services/ColorSchemes.qml b/Services/ColorSchemesService.qml similarity index 93% rename from Services/ColorSchemes.qml rename to Services/ColorSchemesService.qml index 4ef659e..2123a99 100644 --- a/Services/ColorSchemes.qml +++ b/Services/ColorSchemesService.qml @@ -61,7 +61,7 @@ Singleton { Process { id: generateColorsProcess - command: ["matugen", "image", Wallpapers.currentWallpaper, "--config", Quickshell.shellDir + "/Assets/Matugen/matugen.toml"] + command: ["matugen", "image", WallpapersService.currentWallpaper, "--config", Quickshell.shellDir + "/Assets/Matugen/matugen.toml"] workingDirectory: Quickshell.shellDir running: false stdout: StdioCollector { diff --git a/Services/GitHub.qml b/Services/GitHubService.qml similarity index 98% rename from Services/GitHub.qml rename to Services/GitHubService.qml index 6404578..2e329e5 100644 --- a/Services/GitHub.qml +++ b/Services/GitHubService.qml @@ -1,6 +1,7 @@ import QtQuick import Quickshell import Quickshell.Io +import qs.Commons import qs.Services pragma Singleton @@ -10,7 +11,7 @@ Singleton { property string githubDataFile: Quickshell.env("NOCTALIA_GITHUB_FILE") || (Settings.cacheDir + "github.json") property int githubUpdateFrequency: 60 * 60 // 1 hour expressed in seconds - property var data: adapter // Used to access via GitHub.data.xxx.yyy + property var data: adapter // Used to access via GitHubService.data.xxx.yyy property bool isFetchingData: false // Public properties for easy access diff --git a/Services/Location.qml b/Services/LocationService.qml similarity index 98% rename from Services/Location.qml rename to Services/LocationService.qml index 267f6ee..b70e372 100644 --- a/Services/Location.qml +++ b/Services/LocationService.qml @@ -1,6 +1,7 @@ import QtQuick import Quickshell import Quickshell.Io +import qs.Commons import qs.Services pragma Singleton @@ -10,7 +11,7 @@ Singleton { property string locationFile: Quickshell.env("NOCTALIA_WEATHER_FILE") || (Settings.cacheDir + "location.json") property int weatherUpdateFrequency: 30 * 60 // 30 minutes expressed in seconds - property var data: adapter // Used to access via Location.data.xxx + property var data: adapter // Used to access via LocationService.data.xxx property bool isFetchingWeather: false FileView { diff --git a/Services/MediaPlayer.qml b/Services/MediaService.qml similarity index 99% rename from Services/MediaPlayer.qml rename to Services/MediaService.qml index 4617145..2c5bd1b 100644 --- a/Services/MediaPlayer.qml +++ b/Services/MediaService.qml @@ -3,6 +3,7 @@ pragma Singleton import QtQuick import Quickshell import Quickshell.Services.Mpris +import qs.Commons import qs.Services Singleton { diff --git a/Services/Network.qml b/Services/NetworkService.qml similarity index 99% rename from Services/Network.qml rename to Services/NetworkService.qml index c25c646..0ffa766 100644 --- a/Services/Network.qml +++ b/Services/NetworkService.qml @@ -2,7 +2,7 @@ import QtQuick import Quickshell import Quickshell.Io -QtObject { +Singleton { id: root property var networks: ({}) diff --git a/Services/Niri.qml b/Services/NiriService.qml similarity index 100% rename from Services/Niri.qml rename to Services/NiriService.qml diff --git a/Services/NotificationService.qml b/Services/NotificationService.qml index f771ef3..65ac02e 100644 --- a/Services/NotificationService.qml +++ b/Services/NotificationService.qml @@ -1,6 +1,7 @@ import QtQuick import Quickshell import Quickshell.Io +import qs.Commons import qs.Services import Quickshell.Services.Notifications pragma Singleton diff --git a/Services/PanelManager.qml b/Services/PanelService.qml similarity index 100% rename from Services/PanelManager.qml rename to Services/PanelService.qml diff --git a/Services/Scaling.qml b/Services/ScalingService.qml similarity index 100% rename from Services/Scaling.qml rename to Services/ScalingService.qml diff --git a/Services/ScreenRecorder.qml b/Services/ScreenRecorderService.qml similarity index 99% rename from Services/ScreenRecorder.qml rename to Services/ScreenRecorderService.qml index 4f48d15..ac9d9fa 100644 --- a/Services/ScreenRecorder.qml +++ b/Services/ScreenRecorderService.qml @@ -2,6 +2,7 @@ pragma Singleton import QtQuick import Quickshell +import qs.Commons import qs.Services Singleton { diff --git a/Services/SystemStats.qml b/Services/SystemStatsService.qml similarity index 100% rename from Services/SystemStats.qml rename to Services/SystemStatsService.qml diff --git a/Services/Wallpapers.qml b/Services/WallpapersService.qml similarity index 99% rename from Services/Wallpapers.qml rename to Services/WallpapersService.qml index 448df02..4ca8761 100644 --- a/Services/Wallpapers.qml +++ b/Services/WallpapersService.qml @@ -66,7 +66,7 @@ Singleton { // Only notify ColorSchemes service if the wallpaper actually changed if (wallpaperChanged) { - ColorSchemes.changedWallpaper() + ColorSchemesService.changedWallpaper() } } diff --git a/Services/Workspaces.qml b/Services/WorkspacesService.qml similarity index 97% rename from Services/Workspaces.qml rename to Services/WorkspacesService.qml index 12acdba..1d540a6 100644 --- a/Services/Workspaces.qml +++ b/Services/WorkspacesService.qml @@ -6,6 +6,7 @@ import QtQuick import Quickshell import Quickshell.Io import Quickshell.Hyprland +import qs.Commons import qs.Services Singleton { @@ -106,14 +107,14 @@ Singleton { } Connections { - target: Niri + target: NiriService function onWorkspacesChanged() { updateNiriWorkspaces() } } function updateNiriWorkspaces() { - const niriWorkspaces = Niri.workspaces || [] + const niriWorkspaces = NiriService.workspaces || [] workspaces.clear() for (var i = 0; i < niriWorkspaces.length; i++) { const ws = niriWorkspaces[i] diff --git a/Widgets/NBox.qml b/Widgets/NBox.qml index a29d07d..ffa69f4 100644 --- a/Widgets/NBox.qml +++ b/Widgets/NBox.qml @@ -1,4 +1,6 @@ import QtQuick +import qs.Commons +import qs.Commons import qs.Services // Rounded group container using the variant surface color. diff --git a/Widgets/NBusyIndicator.qml b/Widgets/NBusyIndicator.qml index 8098fde..bef3a28 100644 --- a/Widgets/NBusyIndicator.qml +++ b/Widgets/NBusyIndicator.qml @@ -1,4 +1,5 @@ import QtQuick +import qs.Commons import qs.Services Item { diff --git a/Widgets/NCard.qml b/Widgets/NCard.qml index 0fcfd1e..db01764 100644 --- a/Widgets/NCard.qml +++ b/Widgets/NCard.qml @@ -1,4 +1,5 @@ import QtQuick +import qs.Commons import qs.Services // Generic card container diff --git a/Widgets/NCircleStat.qml b/Widgets/NCircleStat.qml index d1aeb6e..81d66bf 100644 --- a/Widgets/NCircleStat.qml +++ b/Widgets/NCircleStat.qml @@ -1,4 +1,5 @@ import QtQuick +import qs.Commons import qs.Services // Compact circular statistic display used in the SidePanel diff --git a/Widgets/NClock.qml b/Widgets/NClock.qml index 25ab5c4..b46a0c5 100644 --- a/Widgets/NClock.qml +++ b/Widgets/NClock.qml @@ -1,4 +1,5 @@ import QtQuick +import qs.Commons import qs.Services import qs.Widgets diff --git a/Widgets/NComboBox.qml b/Widgets/NComboBox.qml index 4504d49..fa4ffa1 100644 --- a/Widgets/NComboBox.qml +++ b/Widgets/NComboBox.qml @@ -1,6 +1,7 @@ import QtQuick import QtQuick.Controls import QtQuick.Layouts +import qs.Commons import qs.Services import qs.Widgets diff --git a/Widgets/NDivider.qml b/Widgets/NDivider.qml index 7b82fe2..ca7cbcb 100644 --- a/Widgets/NDivider.qml +++ b/Widgets/NDivider.qml @@ -1,6 +1,7 @@ import QtQuick import Quickshell import Quickshell.Widgets +import qs.Commons import qs.Services Rectangle { diff --git a/Widgets/NIconButton.qml b/Widgets/NIconButton.qml index 933411d..6b74153 100644 --- a/Widgets/NIconButton.qml +++ b/Widgets/NIconButton.qml @@ -1,6 +1,7 @@ import QtQuick import Quickshell import Quickshell.Widgets +import qs.Commons import qs.Services Rectangle { diff --git a/Widgets/NImageRounded.qml b/Widgets/NImageRounded.qml index 6fb2ba8..edf3b2b 100644 --- a/Widgets/NImageRounded.qml +++ b/Widgets/NImageRounded.qml @@ -2,6 +2,7 @@ import QtQuick import QtQuick.Effects import Quickshell import Quickshell.Widgets +import qs.Commons import qs.Services Rectangle { diff --git a/Widgets/NPanel.qml b/Widgets/NPanel.qml index 0c6878b..3407a70 100644 --- a/Widgets/NPanel.qml +++ b/Widgets/NPanel.qml @@ -1,12 +1,13 @@ import QtQuick import Quickshell import Quickshell.Wayland +import qs.Commons import qs.Services PanelWindow { id: root - readonly property real scaling: Scaling.scale(screen) + readonly property real scaling: ScalingService.scale(screen) property bool showOverlay: Settings.data.general.dimDesktop property int topMargin: Style.barHeight * scaling @@ -19,12 +20,12 @@ PanelWindow { } function show() { - // Ensure only one panel is visible at a time using PanelManager as ephemeral storage + // Ensure only one panel is visible at a time using PanelService as ephemeral storage try { - if (PanelManager.openedPanel && PanelManager.openedPanel !== root && PanelManager.openedPanel.hide) { - PanelManager.openedPanel.hide() + if (PanelService.openedPanel && PanelService.openedPanel !== root && PanelService.openedPanel.hide) { + PanelService.openedPanel.hide() } - PanelManager.openedPanel = root + PanelService.openedPanel = root } catch (e) { // ignore diff --git a/Widgets/NPill.qml b/Widgets/NPill.qml index 07b9c70..4ed4f46 100644 --- a/Widgets/NPill.qml +++ b/Widgets/NPill.qml @@ -1,5 +1,6 @@ import QtQuick import QtQuick.Controls +import qs.Commons import qs.Services Item { diff --git a/Widgets/NRadioButton.qml b/Widgets/NRadioButton.qml index d9b232f..34b7f20 100644 --- a/Widgets/NRadioButton.qml +++ b/Widgets/NRadioButton.qml @@ -1,5 +1,6 @@ import QtQuick import QtQuick.Controls +import qs.Commons import qs.Services import qs.Widgets diff --git a/Widgets/NSlider.qml b/Widgets/NSlider.qml index 875f988..642dbd7 100644 --- a/Widgets/NSlider.qml +++ b/Widgets/NSlider.qml @@ -1,6 +1,7 @@ import QtQuick import QtQuick.Controls import QtQuick.Effects +import qs.Commons import qs.Services Slider { diff --git a/Widgets/NText.qml b/Widgets/NText.qml index ca0f1fb..656f632 100644 --- a/Widgets/NText.qml +++ b/Widgets/NText.qml @@ -1,4 +1,5 @@ import QtQuick +import qs.Commons import qs.Services import qs.Widgets diff --git a/Widgets/NTextInput.qml b/Widgets/NTextInput.qml index 4c30955..0ced0f0 100644 --- a/Widgets/NTextInput.qml +++ b/Widgets/NTextInput.qml @@ -1,6 +1,7 @@ import QtQuick import QtQuick.Controls import QtQuick.Layouts +import qs.Commons import qs.Services Item { diff --git a/Widgets/NToggle.qml b/Widgets/NToggle.qml index 735a7ae..4dea6fd 100644 --- a/Widgets/NToggle.qml +++ b/Widgets/NToggle.qml @@ -1,6 +1,7 @@ import QtQuick import QtQuick.Controls import QtQuick.Layouts +import qs.Commons import qs.Services RowLayout { diff --git a/Widgets/NTooltip.qml b/Widgets/NTooltip.qml index 516a5af..aba0660 100644 --- a/Widgets/NTooltip.qml +++ b/Widgets/NTooltip.qml @@ -1,4 +1,5 @@ import QtQuick +import qs.Commons import qs.Services Window { diff --git a/shell.qml b/shell.qml index 5b52447..262772f 100644 --- a/shell.qml +++ b/shell.qml @@ -4,6 +4,7 @@ import Quickshell import Quickshell.Io import Quickshell.Services.Pipewire import Quickshell.Widgets +import qs.Commons import qs.Modules.AppLauncher import qs.Modules.Background import qs.Modules.Bar @@ -62,6 +63,6 @@ ShellRoot { Component.onCompleted: { // Ensure our singleton is created as soon as possible so we start fetching weather asap - Location.init() + LocationService.init() } }