fix incorrect movement of transient windows (bug introduced in f4e9822f29)

This commit is contained in:
Peter Fajdiga
2023-09-09 15:01:59 +02:00
parent 9b32caafdc
commit 25b7507b30
2 changed files with 15 additions and 22 deletions

View File

@@ -3,7 +3,6 @@ class ClientWrapper {
public readonly stateManager: ClientState.Manager;
public transientFor: ClientWrapper | null;
private readonly transients: ClientWrapper[];
private readonly signalManager: SignalManager;
private readonly rulesSignalManager: SignalManager | null;
public preferredWidth: number;
private readonly manipulatingGeometry: Doer;
@@ -24,7 +23,6 @@ class ClientWrapper {
this.preferredWidth = kwinClient.frameGeometry.width;
this.manipulatingGeometry = new Doer();
this.stateManager = new ClientState.Manager(constructInitialState(this));
this.signalManager = ClientWrapper.initSignalManager(this);
}
public place(x: number, y: number, width: number, height: number) {
@@ -56,6 +54,12 @@ class ClientWrapper {
}
}
public moveTransients(dx: number, dy: number) {
for (const transient of this.transients) {
transient.moveTransient(dx, dy, this.kwinClient.desktop);
}
}
public focus() {
workspace.activeClient = this.kwinClient;
}
@@ -122,7 +126,6 @@ class ClientWrapper {
public destroy(passFocus: boolean) {
this.stateManager.destroy(passFocus);
this.signalManager.destroy();
if (this.rulesSignalManager !== null) {
this.rulesSignalManager.destroy();
}
@@ -133,23 +136,4 @@ class ClientWrapper {
transient.transientFor = null;
}
}
private static initSignalManager(client: ClientWrapper) {
const manager = new SignalManager();
manager.connect(client.kwinClient.frameGeometryChanged, (kwinClient: TopLevel, oldGeometry: QRect) => {
if (client.stateManager.getState() instanceof ClientState.Tiled) {
const newGeometry = client.kwinClient.frameGeometry;
const oldCenterX = oldGeometry.x + oldGeometry.width/2;
const oldCenterY = oldGeometry.y + oldGeometry.height/2;
const newCenterX = newGeometry.x + newGeometry.width/2;
const newCenterY = newGeometry.y + newGeometry.height/2;
const dx = Math.round(newCenterX - oldCenterX);
const dy = Math.round(newCenterY - oldCenterY);
for (const transient of client.transients) {
transient.moveTransient(dx, dy, client.kwinClient.desktop);
}
}
});
return manager;
}
}

View File

@@ -80,6 +80,15 @@ namespace ClientState {
});
manager.connect(kwinClient.frameGeometryChanged, (kwinClient: TopLevel, oldGeometry: QRect) => {
const newGeometry = client.kwinClient.frameGeometry;
const oldCenterX = oldGeometry.x + oldGeometry.width/2;
const oldCenterY = oldGeometry.y + oldGeometry.height/2;
const newCenterX = newGeometry.x + newGeometry.width/2;
const newCenterY = newGeometry.y + newGeometry.height/2;
const dx = Math.round(newCenterX - oldCenterX);
const dy = Math.round(newCenterY - oldCenterY);
client.moveTransients(dx, dy);
world.do((clientManager, desktopManager) => {
if (kwinClient.resize) {
window.onUserResize(oldGeometry, !cursorChangedAfterResizeStart);