From a1c44647ca80be7135e380e20aaf2d30f5ce6921 Mon Sep 17 00:00:00 2001 From: Peter Fajdiga Date: Sat, 9 Mar 2024 20:13:40 +0100 Subject: [PATCH] TiledMinimized: support un-minimization --- src/world/ClientManager.ts | 5 ++++- src/world/clientState/Tiled.ts | 7 ++----- src/world/clientState/TiledMinimized.ts | 23 ++++++++++++++++++++++- 3 files changed, 28 insertions(+), 7 deletions(-) diff --git a/src/world/ClientManager.ts b/src/world/ClientManager.ts index fa349e9..5ce9383 100644 --- a/src/world/ClientManager.ts +++ b/src/world/ClientManager.ts @@ -76,7 +76,10 @@ class ClientManager { return; } if (client.stateManager.getState() instanceof ClientState.Tiled) { - client.stateManager.setState(() => new ClientState.TiledMinimized(), kwinClient === this.lastFocusedClient); + client.stateManager.setState( + () => new ClientState.TiledMinimized(this.world, client), + kwinClient === this.lastFocusedClient, + ); } } diff --git a/src/world/clientState/Tiled.ts b/src/world/clientState/Tiled.ts index 9da6f60..a0ecfc0 100644 --- a/src/world/clientState/Tiled.ts +++ b/src/world/clientState/Tiled.ts @@ -56,12 +56,9 @@ namespace ClientState { }) manager.connect(kwinClient.minimizedChanged, () => { + console.assert(kwinClient.minimized); world.do((clientManager, desktopManager) => { - if (kwinClient.minimized) { - clientManager.minimizeClient(kwinClient); - } else { - clientManager.unminimizeClient(kwinClient); // TODO: move to TiledMinimized - } + clientManager.minimizeClient(kwinClient); }); }); diff --git a/src/world/clientState/TiledMinimized.ts b/src/world/clientState/TiledMinimized.ts index e5dc1ea..ceee630 100644 --- a/src/world/clientState/TiledMinimized.ts +++ b/src/world/clientState/TiledMinimized.ts @@ -1,5 +1,26 @@ namespace ClientState { export class TiledMinimized implements State { - public destroy(passFocus: boolean) {} + private readonly signalManager: SignalManager; + + constructor(world: World, client: ClientWrapper) { + this.signalManager = TiledMinimized.initSignalManager(world, client); + } + + public destroy(passFocus: boolean) { + this.signalManager.destroy(); + } + + private static initSignalManager(world: World, client: ClientWrapper) { + const manager = new SignalManager(); + + manager.connect(client.kwinClient.minimizedChanged, () => { + console.assert(!client.kwinClient.minimized); + world.do((clientManager, desktopManager) => { + clientManager.unminimizeClient(client.kwinClient); + }); + }); + + return manager; + } } }