when toggling float->tile, unset all-desktops/multiple-activities

This commit is contained in:
Peter Fajdiga
2023-05-02 18:18:50 +02:00
parent 224a5d7bb8
commit d90a5e90f2
3 changed files with 21 additions and 5 deletions

View File

@@ -318,7 +318,22 @@ function gridScroll(world: World, amount: number) {
grid.arrange();
}
function canTile(kwinClient: AbstractClient) {
// TODO: support windows on all desktops
return kwinClient.resizeable && !kwinClient.minimized && kwinClient.desktop > 0 && kwinClient.activities.length === 1;
function canTileEver(kwinClient: AbstractClient) {
return kwinClient.resizeable;
}
function canTileNow(kwinClient: AbstractClient) {
return canTileEver(kwinClient) && !kwinClient.minimized && kwinClient.desktop > 0 && kwinClient.activities.length === 1;
}
function makeTileable(kwinClient: AbstractClient) {
if (kwinClient.minimized) {
kwinClient.minimized = false;
}
if (kwinClient.desktop <= 0) {
kwinClient.desktop = workspace.currentDesktop;
}
if (kwinClient.activities.length !== 1) {
kwinClient.activities = [workspace.currentActivity];
}
}

View File

@@ -11,7 +11,7 @@ class WindowRuleEnforcer {
}
shouldTile(kwinClient: AbstractClient) {
return canTile(kwinClient) && (
return canTileNow(kwinClient) && (
this.preferTiling.matches(kwinClient) ||
kwinClient.normalWindow && kwinClient.managed && !this.preferFloating.matches(kwinClient)
);

View File

@@ -128,7 +128,8 @@ class World {
}
const clientState = clientData.getState();
if (clientState instanceof ClientStateFloating && canTile(kwinClient)) {
if (clientState instanceof ClientStateFloating && canTileEver(kwinClient)) {
makeTileable(kwinClient);
clientData.setState(new ClientStateTiled(this, kwinClient), false);
} else if (clientState instanceof ClientStateTiled) {
clientData.setState(new ClientStateFloating(), false);