DesktopManager: remove desktops for removed screens
This commit is contained in:
3
src/lib/extern/kwin.ts
vendored
3
src/lib/extern/kwin.ts
vendored
@@ -18,8 +18,9 @@ type Workspace = {
|
||||
readonly windowAdded: QSignal<[KwinClient]>;
|
||||
readonly windowRemoved: QSignal<[KwinClient]>;
|
||||
readonly windowActivated: QSignal<[KwinClient]>;
|
||||
readonly desktopsChanged: QSignal<[]>;
|
||||
readonly screensChanged: QSignal<[]>;
|
||||
readonly activitiesChanged: QSignal<[]>;
|
||||
readonly desktopsChanged: QSignal<[]>;
|
||||
readonly currentActivityChanged: QSignal<[]>;
|
||||
readonly virtualScreenSizeChanged: QSignal<[]>;
|
||||
|
||||
|
||||
@@ -34,19 +34,25 @@ function initWorkspaceSignalHandlers(world: World) {
|
||||
world.do(() => {}); // re-arrange desktop
|
||||
});
|
||||
|
||||
manager.connect(Workspace.screensChanged, () => {
|
||||
world.do((clientManager, desktopManager) => {
|
||||
desktopManager.updateScreens();
|
||||
})
|
||||
});
|
||||
|
||||
manager.connect(Workspace.activitiesChanged, () => {
|
||||
world.do((clientManager, desktopManager) => {
|
||||
desktopManager.updateActivities();
|
||||
})
|
||||
});
|
||||
|
||||
manager.connect(Workspace.desktopsChanged, () => {
|
||||
world.do((clientManager, desktopManager) => {
|
||||
desktopManager.updateDesktops();
|
||||
})
|
||||
});
|
||||
|
||||
manager.connect(Workspace.activitiesChanged, () => {
|
||||
world.do((clientManager, desktopManager) => {
|
||||
desktopManager.updateActivities();
|
||||
})
|
||||
});
|
||||
|
||||
manager.connect(Workspace.virtualScreenSizeChanged, () => {
|
||||
manager.connect(Workspace.virtualScreenSizeChanged, () => {
|
||||
world.onScreenResized();
|
||||
});
|
||||
|
||||
|
||||
@@ -61,6 +61,16 @@ class DesktopManager {
|
||||
return screen.name + "|" + activity + "|" + kwinDesktop.id;
|
||||
}
|
||||
|
||||
public updateScreens() {
|
||||
const newScreens = new Set(Workspace.screens);
|
||||
for (const screen of this.kwinScreens) {
|
||||
if (!newScreens.has(screen)) {
|
||||
this.removeScreen(screen);
|
||||
}
|
||||
}
|
||||
this.kwinScreens = newScreens;
|
||||
}
|
||||
|
||||
public updateActivities() {
|
||||
const newActivities = new Set(Workspace.activities);
|
||||
for (const activity of this.kwinActivities) {
|
||||
@@ -81,6 +91,14 @@ class DesktopManager {
|
||||
this.kwinDesktops = newDesktops;
|
||||
}
|
||||
|
||||
private removeScreen(kwinScreen: Output) {
|
||||
for (const activity of this.kwinActivities) {
|
||||
for (const kwinDesktop of this.kwinDesktops) {
|
||||
this.destroyDesktop(kwinScreen, activity, kwinDesktop);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private removeActivity(activity: string) {
|
||||
for (const kwinScreen of this.kwinScreens) {
|
||||
for (const kwinDesktop of this.kwinDesktops) {
|
||||
|
||||
Reference in New Issue
Block a user