diff --git a/src/lib/workspace.ts b/src/lib/workspace.ts index 284452e..d364344 100644 --- a/src/lib/workspace.ts +++ b/src/lib/workspace.ts @@ -7,22 +7,40 @@ function initWorkspaceSignalHandlers(world: World, focusPasser: FocusPassing.Pas }); }); - manager.connect(Workspace.windowRemoved, (kwinClient: KwinClient) => { - world.do((clientManager, desktopManager) => { - clientManager.removeClient(kwinClient, FocusPassing.Type.Immediate); - }); - }); - - manager.connect(Workspace.windowActivated, (kwinClient: KwinClient|null) => { - if (kwinClient === null) { - focusPasser.activate(); - } else { - focusPasser.clearIfDifferent(kwinClient); - world.do((clientManager, desktopManager) => { - clientManager.onClientFocused(kwinClient); - }); - } - }); + new SignalGrouping.Group([ + new SignalGrouping.Handler( + [Workspace.windowRemoved, Workspace.windowActivated] as const, + (windowRemovedArgs, windowActivatedArgs) => { + const kwinClient = windowRemovedArgs[0]; + world.do((clientManager, desktopManager) => { + clientManager.removeClient(kwinClient, FocusPassing.Type.Immediate); + }); + }, + ), + new SignalGrouping.Handler( + [Workspace.windowRemoved], + (windowRemovedArgs) => { + const kwinClient = windowRemovedArgs[0]; + world.do((clientManager, desktopManager) => { + clientManager.removeClient(kwinClient, FocusPassing.Type.Immediate); + }); + }, + ), + new SignalGrouping.Handler( + [Workspace.windowActivated], + (windowActivatedArgs) => { + const kwinClient = windowActivatedArgs[0]; + if (kwinClient === null) { + focusPasser.activate(); + } else { + focusPasser.clearIfDifferent(kwinClient); + world.do((clientManager, desktopManager) => { + clientManager.onClientFocused(kwinClient); + }); + } + }, + ), + ]).connect(manager); manager.connect(Workspace.currentDesktopChanged, () => { world.do(() => {}); // re-arrange desktop