kwin.d.ts: merge AbstractClient and TopLevel
This commit is contained in:
42
src/extern/kwin.d.ts
vendored
42
src/extern/kwin.d.ts
vendored
@@ -16,31 +16,36 @@ declare const workspace: {
|
||||
// Signals
|
||||
currentDesktopChanged: QSignal<[oldDesktopNumber: number]>
|
||||
clientAdded: QSignal<[KwinClient]>;
|
||||
clientRemoved: QSignal<[AbstractClient]>;
|
||||
clientMinimized: QSignal<[AbstractClient]>;
|
||||
clientUnminimized: QSignal<[AbstractClient]>;
|
||||
clientMaximizeSet: QSignal<[AbstractClient, horizontally: boolean, vertically: boolean]>;
|
||||
clientActivated: QSignal<[AbstractClient]>;
|
||||
clientRemoved: QSignal<[KwinClient]>;
|
||||
clientMinimized: QSignal<[KwinClient]>;
|
||||
clientUnminimized: QSignal<[KwinClient]>;
|
||||
clientMaximizeSet: QSignal<[KwinClient, horizontally: boolean, vertically: boolean]>;
|
||||
clientActivated: QSignal<[KwinClient]>;
|
||||
numberDesktopsChanged: QSignal<[oldNumberOfVirtualDesktops: number]>;
|
||||
currentActivityChanged: QSignal<[newActivity: string]>;
|
||||
virtualScreenSizeChanged: QSignal<[void]>;
|
||||
|
||||
// Functions
|
||||
clientArea(option: ClientAreaOption, screenNumber: number, desktopNumber: number);
|
||||
clientList(): TopLevel[];
|
||||
clientList(): KwinClient[];
|
||||
};
|
||||
|
||||
type Tile = any;
|
||||
|
||||
interface AbstractClient {
|
||||
interface KwinClient {
|
||||
// Read-only Properties
|
||||
readonly caption: string;
|
||||
readonly minSize: QSize;
|
||||
readonly transient: boolean;
|
||||
readonly transientFor: AbstractClient;
|
||||
readonly transientFor: KwinClient;
|
||||
readonly move: boolean;
|
||||
readonly resize: boolean;
|
||||
readonly resizeable: boolean;
|
||||
readonly screen: number;
|
||||
readonly resourceClass: QByteArray;
|
||||
readonly dock: boolean;
|
||||
readonly normalWindow: boolean;
|
||||
readonly managed: boolean;
|
||||
|
||||
// Read-write Properties
|
||||
fullScreen: boolean;
|
||||
@@ -49,6 +54,8 @@ interface AbstractClient {
|
||||
keepBelow: boolean;
|
||||
shade: boolean;
|
||||
minimized: boolean;
|
||||
frameGeometry: QRect;
|
||||
desktop: number; // -1 means all desktops
|
||||
tile: Tile;
|
||||
|
||||
// Signals
|
||||
@@ -60,25 +67,8 @@ interface AbstractClient {
|
||||
moveResizedChanged: QSignal<[void]>;
|
||||
moveResizeCursorChanged: QSignal<[void]>;
|
||||
clientStartUserMovedResized: QSignal<[void]>;
|
||||
frameGeometryChanged: QSignal<[KwinClient, oldGeometry: QRect]>;
|
||||
|
||||
// Functions
|
||||
setMaximize(vertically: boolean, horizontally: boolean): void;
|
||||
}
|
||||
|
||||
interface TopLevel extends AbstractClient {
|
||||
// Read-only Properties
|
||||
readonly screen: number;
|
||||
readonly resourceClass: QByteArray;
|
||||
readonly dock: boolean;
|
||||
readonly normalWindow: boolean;
|
||||
readonly managed: boolean;
|
||||
|
||||
// Read-write Properties
|
||||
frameGeometry: QRect;
|
||||
desktop: number; // -1 means all desktops
|
||||
|
||||
// Signals
|
||||
frameGeometryChanged: QSignal<[TopLevel, oldGeometry: QRect]>;
|
||||
}
|
||||
|
||||
interface KwinClient extends TopLevel {}
|
||||
|
||||
@@ -5,7 +5,7 @@ class ClientMatcher {
|
||||
this.rules = rules;
|
||||
}
|
||||
|
||||
public matches(kwinClient: TopLevel) {
|
||||
public matches(kwinClient: KwinClient) {
|
||||
const rule = this.rules.get(kwinClient.resourceClass);
|
||||
if (rule === undefined) {
|
||||
return false;
|
||||
|
||||
@@ -10,7 +10,7 @@ class WindowRuleEnforcer {
|
||||
this.followCaption = new Set([...mapFloat.keys(), ...mapTile.keys()]);
|
||||
}
|
||||
|
||||
public shouldTile(kwinClient: TopLevel) {
|
||||
public shouldTile(kwinClient: KwinClient) {
|
||||
return Clients.canTileNow(kwinClient) && (
|
||||
this.preferTiling.matches(kwinClient) || (
|
||||
kwinClient.normalWindow &&
|
||||
@@ -21,7 +21,7 @@ class WindowRuleEnforcer {
|
||||
);
|
||||
}
|
||||
|
||||
public initClientSignalManager(world: World, kwinClient: TopLevel) {
|
||||
public initClientSignalManager(world: World, kwinClient: KwinClient) {
|
||||
if (!this.followCaption.has(kwinClient.resourceClass)) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@@ -16,25 +16,25 @@ function initWorkspaceSignalHandlers(world: World) {
|
||||
});
|
||||
});
|
||||
|
||||
manager.connect(workspace.clientRemoved, (kwinClient: AbstractClient) => {
|
||||
manager.connect(workspace.clientRemoved, (kwinClient: KwinClient) => {
|
||||
world.do((clientManager, desktopManager) => {
|
||||
clientManager.removeClient(kwinClient, true);
|
||||
});
|
||||
});
|
||||
|
||||
manager.connect(workspace.clientMinimized, (kwinClient: AbstractClient) => {
|
||||
manager.connect(workspace.clientMinimized, (kwinClient: KwinClient) => {
|
||||
world.do((clientManager, desktopManager) => {
|
||||
clientManager.minimizeClient(kwinClient);
|
||||
});
|
||||
});
|
||||
|
||||
manager.connect(workspace.clientUnminimized, (kwinClient: AbstractClient) => {
|
||||
manager.connect(workspace.clientUnminimized, (kwinClient: KwinClient) => {
|
||||
world.do((clientManager, desktopManager) => {
|
||||
clientManager.unminimizeClient(kwinClient);
|
||||
});
|
||||
});
|
||||
|
||||
manager.connect(workspace.clientMaximizeSet, (kwinClient: AbstractClient, horizontally: boolean, vertically: boolean) => {
|
||||
manager.connect(workspace.clientMaximizeSet, (kwinClient: KwinClient, horizontally: boolean, vertically: boolean) => {
|
||||
if ((horizontally || vertically) && kwinClient.tile !== null) {
|
||||
kwinClient.tile = null;
|
||||
}
|
||||
@@ -43,7 +43,7 @@ function initWorkspaceSignalHandlers(world: World) {
|
||||
});
|
||||
});
|
||||
|
||||
manager.connect(workspace.clientActivated, (kwinClient: AbstractClient) => {
|
||||
manager.connect(workspace.clientActivated, (kwinClient: KwinClient) => {
|
||||
if (kwinClient === null) {
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -3,8 +3,8 @@ class ClientManager {
|
||||
private readonly config: ClientManager.Config;
|
||||
private readonly desktopManager: DesktopManager;
|
||||
private readonly pinManager: PinManager;
|
||||
private readonly clientMap: Map<AbstractClient, ClientWrapper>;
|
||||
private lastFocusedClient: AbstractClient|null;
|
||||
private readonly clientMap: Map<KwinClient, ClientWrapper>;
|
||||
private lastFocusedClient: KwinClient|null;
|
||||
private readonly windowRuleEnforcer: WindowRuleEnforcer;
|
||||
|
||||
constructor(config: Config, world: World, desktopManager: DesktopManager, pinManager: PinManager) {
|
||||
@@ -25,7 +25,7 @@ class ClientManager {
|
||||
this.windowRuleEnforcer = new WindowRuleEnforcer(parsedWindowRules);
|
||||
}
|
||||
|
||||
public addClient(kwinClient: TopLevel) {
|
||||
public addClient(kwinClient: KwinClient) {
|
||||
console.assert(!this.hasClient(kwinClient));
|
||||
|
||||
let constructState: (client: ClientWrapper) => ClientState.State;
|
||||
@@ -47,7 +47,7 @@ class ClientManager {
|
||||
this.clientMap.set(kwinClient, client);
|
||||
}
|
||||
|
||||
public removeClient(kwinClient: AbstractClient, passFocus: boolean) {
|
||||
public removeClient(kwinClient: KwinClient, passFocus: boolean) {
|
||||
console.assert(this.hasClient(kwinClient));
|
||||
const client = this.clientMap.get(kwinClient);
|
||||
if (client === undefined) {
|
||||
@@ -57,7 +57,7 @@ class ClientManager {
|
||||
this.clientMap.delete(kwinClient);
|
||||
}
|
||||
|
||||
private findTransientFor(kwinClient: AbstractClient) {
|
||||
private findTransientFor(kwinClient: KwinClient) {
|
||||
if (!kwinClient.transient) {
|
||||
return null;
|
||||
}
|
||||
@@ -70,7 +70,7 @@ class ClientManager {
|
||||
return transientFor;
|
||||
}
|
||||
|
||||
public minimizeClient(kwinClient: AbstractClient) {
|
||||
public minimizeClient(kwinClient: KwinClient) {
|
||||
const client = this.clientMap.get(kwinClient);
|
||||
if (client === undefined) {
|
||||
return;
|
||||
@@ -80,7 +80,7 @@ class ClientManager {
|
||||
}
|
||||
}
|
||||
|
||||
public unminimizeClient(kwinClient: AbstractClient) {
|
||||
public unminimizeClient(kwinClient: KwinClient) {
|
||||
const client = this.clientMap.get(kwinClient);
|
||||
if (client === undefined) {
|
||||
return;
|
||||
@@ -91,7 +91,7 @@ class ClientManager {
|
||||
}
|
||||
}
|
||||
|
||||
public tileClient(kwinClient: AbstractClient) {
|
||||
public tileClient(kwinClient: KwinClient) {
|
||||
const client = this.clientMap.get(kwinClient);
|
||||
if (client === undefined) {
|
||||
return;
|
||||
@@ -103,7 +103,7 @@ class ClientManager {
|
||||
client.stateManager.setState(() => new ClientState.Tiled(this.world, client, grid), false);
|
||||
}
|
||||
|
||||
public untileClient(kwinClient: TopLevel) {
|
||||
public untileClient(kwinClient: KwinClient) {
|
||||
const client = this.clientMap.get(kwinClient);
|
||||
if (client === undefined) {
|
||||
return;
|
||||
@@ -113,7 +113,7 @@ class ClientManager {
|
||||
}
|
||||
}
|
||||
|
||||
public pinClient(kwinClient: TopLevel, mode: Clients.QuickTileMode) {
|
||||
public pinClient(kwinClient: KwinClient, mode: Clients.QuickTileMode) {
|
||||
const client = this.clientMap.get(kwinClient);
|
||||
if (client === undefined) {
|
||||
return;
|
||||
@@ -125,7 +125,7 @@ class ClientManager {
|
||||
}
|
||||
}
|
||||
|
||||
public unpinClient(kwinClient: TopLevel) {
|
||||
public unpinClient(kwinClient: KwinClient) {
|
||||
const client = this.clientMap.get(kwinClient);
|
||||
if (client === undefined) {
|
||||
return;
|
||||
@@ -138,7 +138,7 @@ class ClientManager {
|
||||
}
|
||||
}
|
||||
|
||||
public toggleFloatingClient(kwinClient: TopLevel) {
|
||||
public toggleFloatingClient(kwinClient: KwinClient) {
|
||||
const client = this.clientMap.get(kwinClient);
|
||||
if (client === undefined) {
|
||||
return;
|
||||
@@ -154,11 +154,11 @@ class ClientManager {
|
||||
}
|
||||
}
|
||||
|
||||
public hasClient(kwinClient: AbstractClient) {
|
||||
public hasClient(kwinClient: KwinClient) {
|
||||
return this.clientMap.has(kwinClient);
|
||||
}
|
||||
|
||||
public onClientFocused(kwinClient: AbstractClient) {
|
||||
public onClientFocused(kwinClient: KwinClient) {
|
||||
this.lastFocusedClient = kwinClient;
|
||||
const window = this.findTiledWindow(kwinClient, true);
|
||||
if (window !== null) {
|
||||
@@ -166,7 +166,7 @@ class ClientManager {
|
||||
}
|
||||
}
|
||||
|
||||
public findTiledWindow(kwinClient: AbstractClient, followTransient: boolean) {
|
||||
public findTiledWindow(kwinClient: KwinClient, followTransient: boolean) {
|
||||
const client = this.clientMap.get(kwinClient);
|
||||
if (client === undefined) {
|
||||
return null;
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
class ClientWrapper {
|
||||
public readonly kwinClient: TopLevel;
|
||||
public readonly kwinClient: KwinClient;
|
||||
public readonly stateManager: ClientState.Manager;
|
||||
public transientFor: ClientWrapper | null;
|
||||
private readonly transients: ClientWrapper[];
|
||||
@@ -9,7 +9,7 @@ class ClientWrapper {
|
||||
private lastPlacement: QRect | null; // workaround for issue #19
|
||||
|
||||
constructor(
|
||||
kwinClient: TopLevel,
|
||||
kwinClient: KwinClient,
|
||||
constructInitialState: (client: ClientWrapper) => ClientState.State,
|
||||
transientFor: ClientWrapper | null,
|
||||
rulesSignalManager: SignalManager | null,
|
||||
|
||||
@@ -1,13 +1,13 @@
|
||||
namespace Clients {
|
||||
export function canTileEver(kwinClient: AbstractClient) {
|
||||
export function canTileEver(kwinClient: KwinClient) {
|
||||
return kwinClient.resizeable;
|
||||
}
|
||||
|
||||
export function canTileNow(kwinClient: TopLevel) {
|
||||
export function canTileNow(kwinClient: KwinClient) {
|
||||
return canTileEver(kwinClient) && !kwinClient.minimized && kwinClient.desktop > 0 && kwinClient.activities.length === 1;
|
||||
}
|
||||
|
||||
export function makeTileable(kwinClient: TopLevel) {
|
||||
export function makeTileable(kwinClient: KwinClient) {
|
||||
if (kwinClient.minimized) {
|
||||
kwinClient.minimized = false;
|
||||
}
|
||||
@@ -19,21 +19,21 @@ namespace Clients {
|
||||
}
|
||||
}
|
||||
|
||||
export function isMaximizedGeometry(kwinClient: TopLevel) {
|
||||
export function isMaximizedGeometry(kwinClient: KwinClient) {
|
||||
const maximizeArea = workspace.clientArea(ClientAreaOption.MaximizeArea, kwinClient.screen, kwinClient.desktop);
|
||||
return kwinClient.frameGeometry === maximizeArea;
|
||||
}
|
||||
|
||||
export function isFullScreenGeometry(kwinClient: TopLevel) {
|
||||
export function isFullScreenGeometry(kwinClient: KwinClient) {
|
||||
const fullScreenArea = workspace.clientArea(ClientAreaOption.FullScreenArea, kwinClient.screen, kwinClient.desktop);
|
||||
return kwinClient.frameGeometry === fullScreenArea;
|
||||
}
|
||||
|
||||
export function isOnVirtualDesktop(kwinClient: TopLevel, desktopNumber: number) {
|
||||
export function isOnVirtualDesktop(kwinClient: KwinClient, desktopNumber: number) {
|
||||
return kwinClient.desktop === desktopNumber || kwinClient.desktop === -1;
|
||||
}
|
||||
|
||||
export function guessQuickTileMode(kwinClient: TopLevel) {
|
||||
export function guessQuickTileMode(kwinClient: KwinClient) {
|
||||
const clientArea = workspace.clientArea(ClientAreaOption.PlacementArea, 0, kwinClient.desktop);
|
||||
const frame = kwinClient.frameGeometry;
|
||||
const top = frame.top === clientArea.top;
|
||||
|
||||
@@ -38,7 +38,7 @@ class DesktopManager {
|
||||
return this.getDesktop(workspace.currentActivity, desktopNumber);
|
||||
}
|
||||
|
||||
public getDesktopForClient(kwinClient: TopLevel) {
|
||||
public getDesktopForClient(kwinClient: KwinClient) {
|
||||
console.assert(kwinClient.activities.length === 1 && kwinClient.desktop > 0);
|
||||
return this.getDesktop(kwinClient.activities[0], kwinClient.desktop);
|
||||
}
|
||||
@@ -106,7 +106,7 @@ class DesktopManager {
|
||||
}
|
||||
}
|
||||
|
||||
public *getDesktopsForClient(kwinClient: TopLevel) {
|
||||
public *getDesktopsForClient(kwinClient: KwinClient) {
|
||||
const activities = kwinClient.activities.length > 0 ? kwinClient.activities : this.desktopsPerActivity.keys();
|
||||
for (const activity of activities) {
|
||||
if (!this.desktopsPerActivity.has(activity)) {
|
||||
|
||||
@@ -1,15 +1,15 @@
|
||||
class PinManager {
|
||||
private readonly pinnedClients: Map<TopLevel, Clients.QuickTileMode>;
|
||||
private readonly pinnedClients: Map<KwinClient, Clients.QuickTileMode>;
|
||||
|
||||
constructor() {
|
||||
this.pinnedClients = new Map();
|
||||
}
|
||||
|
||||
public setClient(kwinClient: TopLevel, mode: Clients.QuickTileMode) {
|
||||
public setClient(kwinClient: KwinClient, mode: Clients.QuickTileMode) {
|
||||
this.pinnedClients.set(kwinClient, mode);
|
||||
}
|
||||
|
||||
public removeClient(kwinClient: TopLevel) {
|
||||
public removeClient(kwinClient: KwinClient) {
|
||||
this.pinnedClients.delete(kwinClient);
|
||||
}
|
||||
|
||||
|
||||
@@ -68,7 +68,7 @@ class World {
|
||||
}
|
||||
|
||||
public doIfTiled(
|
||||
kwinClient: AbstractClient,
|
||||
kwinClient: KwinClient,
|
||||
followTransient: boolean,
|
||||
f: (clientManager: ClientManager, desktopManager: DesktopManager, window: Window, column: Column, grid: Grid) => void,
|
||||
) {
|
||||
|
||||
@@ -3,7 +3,7 @@ namespace ClientState {
|
||||
private readonly world: World;
|
||||
private readonly signalManager: SignalManager;
|
||||
|
||||
constructor(world: World, kwinClient: TopLevel) {
|
||||
constructor(world: World, kwinClient: KwinClient) {
|
||||
this.world = world;
|
||||
this.signalManager = Docked.initSignalManager(world, kwinClient);
|
||||
world.onScreenResized();
|
||||
@@ -14,9 +14,9 @@ namespace ClientState {
|
||||
this.world.onScreenResized();
|
||||
}
|
||||
|
||||
private static initSignalManager(world: World, kwinClient: TopLevel) {
|
||||
private static initSignalManager(world: World, kwinClient: KwinClient) {
|
||||
const manager = new SignalManager();
|
||||
manager.connect(kwinClient.frameGeometryChanged, (kwinClient: TopLevel, oldGeometry: QRect) => {
|
||||
manager.connect(kwinClient.frameGeometryChanged, (kwinClient: KwinClient, oldGeometry: QRect) => {
|
||||
world.onScreenResized();
|
||||
});
|
||||
return manager;
|
||||
|
||||
@@ -35,7 +35,7 @@ namespace ClientState {
|
||||
);
|
||||
}
|
||||
|
||||
private static initSignalManager(world: World, kwinClient: TopLevel) {
|
||||
private static initSignalManager(world: World, kwinClient: KwinClient) {
|
||||
const manager = new SignalManager();
|
||||
|
||||
manager.connect(kwinClient.tileChanged, () => {
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
namespace ClientState {
|
||||
export class Pinned implements State {
|
||||
private readonly kwinClient: TopLevel;
|
||||
private readonly kwinClient: KwinClient;
|
||||
private readonly pinManager: PinManager;
|
||||
private readonly desktopManager: DesktopManager;
|
||||
private readonly config: ClientManager.Config;
|
||||
private readonly signalManager: SignalManager;
|
||||
|
||||
constructor(world: World, pinManager: PinManager, desktopManager: DesktopManager, kwinClient: TopLevel, config: ClientManager.Config) {
|
||||
constructor(world: World, pinManager: PinManager, desktopManager: DesktopManager, kwinClient: KwinClient, config: ClientManager.Config) {
|
||||
this.kwinClient = kwinClient;
|
||||
this.pinManager = pinManager;
|
||||
this.desktopManager = desktopManager;
|
||||
@@ -28,7 +28,7 @@ namespace ClientState {
|
||||
}
|
||||
}
|
||||
|
||||
private static initSignalManager(world: World, pinManager: PinManager, kwinClient: TopLevel) {
|
||||
private static initSignalManager(world: World, pinManager: PinManager, kwinClient: KwinClient) {
|
||||
const manager = new SignalManager();
|
||||
let oldDesktopNumber = kwinClient.desktop;
|
||||
let oldActivities = kwinClient.activities;
|
||||
@@ -42,7 +42,7 @@ namespace ClientState {
|
||||
}
|
||||
});
|
||||
|
||||
manager.connect(kwinClient.frameGeometryChanged, (kwinClient: TopLevel, oldGeometry: QRect) => {
|
||||
manager.connect(kwinClient.frameGeometryChanged, (kwinClient: KwinClient, oldGeometry: QRect) => {
|
||||
const quickTileMode = Clients.guessQuickTileMode(kwinClient);
|
||||
if (quickTileMode === Clients.QuickTileMode.Untiled) {
|
||||
world.do((clientManager, desktopManager) => {
|
||||
|
||||
@@ -79,7 +79,7 @@ namespace ClientState {
|
||||
cursorChangedAfterResizeStart = false;
|
||||
});
|
||||
|
||||
manager.connect(kwinClient.frameGeometryChanged, (kwinClient: TopLevel, oldGeometry: QRect) => {
|
||||
manager.connect(kwinClient.frameGeometryChanged, (kwinClient: KwinClient, oldGeometry: QRect) => {
|
||||
// on Wayland, this fires after `tileChanged`
|
||||
if (kwinClient.tile !== null) {
|
||||
const quickTileMode = Clients.guessQuickTileMode(kwinClient);
|
||||
|
||||
Reference in New Issue
Block a user