summaryrefslogtreecommitdiff
path: root/raveos-hyprland-theme/theme-data/DankMaterialShell/quickshell/Services/ExtWorkspaceService.qml
diff options
context:
space:
mode:
authorNippy <nippy@rp1.hu>2026-05-09 13:33:09 +0200
committerNippy <nippy@rp1.hu>2026-05-09 13:33:09 +0200
commita2b924d7e9492b978ad6dc33b6c1ffcb304b4bc5 (patch)
tree1a8769217f84bfe9d6216fafaadaf8cdd876d457 /raveos-hyprland-theme/theme-data/DankMaterialShell/quickshell/Services/ExtWorkspaceService.qml
parent34b9c34f982b2596cfa9e368a2d7f74e9a17477c (diff)
downloadRaveOS-PKGBUILD-a2b924d7e9492b978ad6dc33b6c1ffcb304b4bc5.tar.gz
RaveOS-PKGBUILD-a2b924d7e9492b978ad6dc33b6c1ffcb304b4bc5.zip
raveos update
Diffstat (limited to 'raveos-hyprland-theme/theme-data/DankMaterialShell/quickshell/Services/ExtWorkspaceService.qml')
-rw-r--r--raveos-hyprland-theme/theme-data/DankMaterialShell/quickshell/Services/ExtWorkspaceService.qml277
1 files changed, 0 insertions, 277 deletions
diff --git a/raveos-hyprland-theme/theme-data/DankMaterialShell/quickshell/Services/ExtWorkspaceService.qml b/raveos-hyprland-theme/theme-data/DankMaterialShell/quickshell/Services/ExtWorkspaceService.qml
deleted file mode 100644
index 48a8f9a..0000000
--- a/raveos-hyprland-theme/theme-data/DankMaterialShell/quickshell/Services/ExtWorkspaceService.qml
+++ /dev/null
@@ -1,277 +0,0 @@
-pragma Singleton
-pragma ComponentBehavior: Bound
-
-import QtQuick
-import Quickshell
-
-Singleton {
- id: root
-
- property bool extWorkspaceAvailable: false
- property var groups: []
- property var _cachedWorkspaces: ({})
-
- signal stateChanged
-
- Connections {
- target: DMSService
- function onCapabilitiesReceived() {
- checkCapabilities();
- }
- function onConnectionStateChanged() {
- if (DMSService.isConnected) {
- checkCapabilities();
- } else {
- extWorkspaceAvailable = false;
- }
- }
- function onExtWorkspaceStateUpdate(data) {
- if (extWorkspaceAvailable) {
- handleStateUpdate(data);
- }
- }
- }
-
- Component.onCompleted: {
- if (DMSService.dmsAvailable) {
- checkCapabilities();
- }
- }
-
- function checkCapabilities() {
- if (!DMSService.capabilities || !Array.isArray(DMSService.capabilities)) {
- extWorkspaceAvailable = false;
- return;
- }
-
- const hasExtWorkspace = DMSService.capabilities.includes("extworkspace");
- if (hasExtWorkspace && !extWorkspaceAvailable) {
- if (typeof CompositorService !== "undefined") {
- const useExtWorkspace = DMSService.forceExtWorkspace || (!CompositorService.isNiri && !CompositorService.isHyprland && !CompositorService.isDwl && !CompositorService.isSway && !CompositorService.isScroll && !CompositorService.isMiracle);
- if (!useExtWorkspace) {
- console.info("ExtWorkspaceService: ext-workspace available but compositor has native support");
- extWorkspaceAvailable = false;
- return;
- }
- }
- extWorkspaceAvailable = true;
- console.info("ExtWorkspaceService: ext-workspace capability detected");
- DMSService.addSubscription("extworkspace");
- requestState();
- } else if (!hasExtWorkspace) {
- extWorkspaceAvailable = false;
- }
- }
-
- function requestState() {
- if (!DMSService.isConnected || !extWorkspaceAvailable) {
- return;
- }
-
- DMSService.sendRequest("extworkspace.getState", null, response => {
- if (response.result) {
- handleStateUpdate(response.result);
- }
- });
- }
-
- function handleStateUpdate(state) {
- groups = state.groups || [];
- if (groups.length === 0) {
- console.warn("ExtWorkspaceService: Received empty workspace groups from backend");
- } else {
- console.log("ExtWorkspaceService: Updated with", groups.length, "workspace groups");
- }
- stateChanged();
- }
-
- function activateWorkspace(workspaceID, groupID = "") {
- if (!DMSService.isConnected || !extWorkspaceAvailable) {
- return;
- }
-
- DMSService.sendRequest("extworkspace.activateWorkspace", {
- "workspaceID": workspaceID,
- "groupID": groupID
- }, response => {
- if (response.error) {
- console.warn("ExtWorkspaceService: activateWorkspace error:", response.error);
- }
- });
- }
-
- function deactivateWorkspace(workspaceID, groupID = "") {
- if (!DMSService.isConnected || !extWorkspaceAvailable) {
- return;
- }
-
- DMSService.sendRequest("extworkspace.deactivateWorkspace", {
- "workspaceID": workspaceID,
- "groupID": groupID
- }, response => {
- if (response.error) {
- console.warn("ExtWorkspaceService: deactivateWorkspace error:", response.error);
- }
- });
- }
-
- function removeWorkspace(workspaceID, groupID = "") {
- if (!DMSService.isConnected || !extWorkspaceAvailable) {
- return;
- }
-
- DMSService.sendRequest("extworkspace.removeWorkspace", {
- "workspaceID": workspaceID,
- "groupID": groupID
- }, response => {
- if (response.error) {
- console.warn("ExtWorkspaceService: removeWorkspace error:", response.error);
- }
- });
- }
-
- function createWorkspace(groupID, name) {
- if (!DMSService.isConnected || !extWorkspaceAvailable) {
- return;
- }
-
- DMSService.sendRequest("extworkspace.createWorkspace", {
- "groupID": groupID,
- "name": name
- }, response => {
- if (response.error) {
- console.warn("ExtWorkspaceService: createWorkspace error:", response.error);
- }
- });
- }
-
- function getGroupForOutput(outputName) {
- for (const group of groups) {
- if (group.outputs && group.outputs.includes(outputName)) {
- return group;
- }
- }
- return null;
- }
-
- function getWorkspacesForOutput(outputName) {
- const group = getGroupForOutput(outputName);
- return group ? (group.workspaces || []) : [];
- }
-
- function getActiveWorkspaces() {
- const active = [];
- for (const group of groups) {
- if (!group.workspaces)
- continue;
- for (const ws of group.workspaces) {
- if (ws.active) {
- active.push({
- workspace: ws,
- group: group,
- outputs: group.outputs || []
- });
- }
- }
- }
- return active;
- }
-
- function getActiveWorkspaceForOutput(outputName) {
- const group = getGroupForOutput(outputName);
- if (!group || !group.workspaces)
- return null;
-
- for (const ws of group.workspaces) {
- if (ws.active) {
- return ws;
- }
- }
- return null;
- }
-
- function getVisibleWorkspaces(outputName) {
- const workspaces = getWorkspacesForOutput(outputName);
- let visible = workspaces.filter(ws => !ws.hidden);
-
- const hasValidCoordinates = visible.some(ws => ws.coordinates && ws.coordinates.length > 0);
- if (hasValidCoordinates) {
- visible = visible.sort((a, b) => {
- const coordsA = a.coordinates || [0, 0];
- const coordsB = b.coordinates || [0, 0];
- if (coordsA[0] !== coordsB[0])
- return coordsA[0] - coordsB[0];
- return coordsA[1] - coordsB[1];
- });
- }
-
- const cacheKey = outputName;
- if (!_cachedWorkspaces[cacheKey]) {
- _cachedWorkspaces[cacheKey] = {
- workspaces: [],
- lastNames: []
- };
- }
-
- const cache = _cachedWorkspaces[cacheKey];
- const currentNames = visible.map(ws => ws.name || ws.id);
- const namesChanged = JSON.stringify(cache.lastNames) !== JSON.stringify(currentNames);
-
- if (namesChanged || cache.workspaces.length !== visible.length) {
- cache.workspaces = visible.map(ws => ({
- id: ws.id,
- name: ws.name,
- coordinates: ws.coordinates,
- state: ws.state,
- active: ws.active,
- urgent: ws.urgent,
- hidden: ws.hidden
- }));
- cache.lastNames = currentNames;
- return cache.workspaces;
- }
-
- for (let i = 0; i < visible.length; i++) {
- const src = visible[i];
- const dst = cache.workspaces[i];
- dst.id = src.id;
- dst.name = src.name;
- dst.coordinates = src.coordinates;
- dst.state = src.state;
- dst.active = src.active;
- dst.urgent = src.urgent;
- dst.hidden = src.hidden;
- }
-
- return cache.workspaces;
- }
-
- function getUrgentWorkspaces() {
- const urgent = [];
- for (const group of groups) {
- if (!group.workspaces)
- continue;
- for (const ws of group.workspaces) {
- if (ws.urgent) {
- urgent.push({
- workspace: ws,
- group: group,
- outputs: group.outputs || []
- });
- }
- }
- }
- return urgent;
- }
-
- function switchToWorkspace(outputName, workspaceName) {
- const workspaces = getWorkspacesForOutput(outputName);
- for (const ws of workspaces) {
- if (ws.name === workspaceName || ws.id === workspaceName) {
- activateWorkspace(ws.name || ws.id);
- return;
- }
- }
- console.warn("ExtWorkspaceService: workspace not found:", workspaceName);
- }
-}