fix incorrect movement of transient windows (bug introduced in f4e9822f29)
This commit is contained in:
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user