diff --git a/package/contents/ui/config.ui b/package/contents/ui/config.ui index bb8907b..366f184 100644 --- a/package/contents/ui/config.ui +++ b/package/contents/ui/config.ui @@ -183,6 +183,27 @@ + + + + + Obscured window opacity: + + + + + + + % + + + 100 + + + 0 + + + diff --git a/src/config/config.ts b/src/config/config.ts index 7d5497e..a8ac2a8 100644 --- a/src/config/config.ts +++ b/src/config/config.ts @@ -7,6 +7,7 @@ type Config = { gapsInnerVertical: number, overscroll: number, manualScrollStep: number, + offScreenOpacity: number, untileOnDrag: boolean, stackColumnsByDefault: boolean, resizeNeighborColumn: boolean, diff --git a/src/config/definition.ts b/src/config/definition.ts index 303d2c4..7c4ad5f 100644 --- a/src/config/definition.ts +++ b/src/config/definition.ts @@ -92,6 +92,11 @@ const configDef = [ "type": "UInt", "default": 200 }, + { + "name": "offScreenOpacity", + "type": "UInt", + "default": 100 + }, { "name": "untileOnDrag", "type": "Bool", diff --git a/src/extern/kwin.d.ts b/src/extern/kwin.d.ts index fe7604b..46ab0ad 100644 --- a/src/extern/kwin.d.ts +++ b/src/extern/kwin.d.ts @@ -47,6 +47,7 @@ interface KwinClient { readonly dock: boolean; readonly normalWindow: boolean; readonly managed: boolean; + opacity: number; // Read-write Properties fullScreen: boolean; diff --git a/src/layout/Column.ts b/src/layout/Column.ts index 852b690..848a451 100644 --- a/src/layout/Column.ts +++ b/src/layout/Column.ts @@ -181,6 +181,13 @@ class Column { } public arrange(x: number) { + if (this.grid.config.offScreenOpacity < 1.0) { + const opacity = this.isVisible(this.grid.desktop.getCurrentVisibleRange(), true) ? 100 : this.grid.config.offScreenOpacity; + for (const window of this.windows.iterator()) { + window.client.kwinClient.opacity = opacity; + } + } + if (this.stacked && this.windows.length() >= 2 && this.canStack()) { this.arrangeStacked(x); return; diff --git a/src/layout/LayoutConfig.ts b/src/layout/LayoutConfig.ts index 8acdc47..6cb934d 100644 --- a/src/layout/LayoutConfig.ts +++ b/src/layout/LayoutConfig.ts @@ -1,6 +1,7 @@ type LayoutConfig = { gapsInnerHorizontal: number, gapsInnerVertical: number, + offScreenOpacity: number, stackColumnsByDefault: boolean, resizeNeighborColumn: boolean, reMaximize: boolean, diff --git a/src/world/World.ts b/src/world/World.ts index caf2bc9..16c6ebb 100644 --- a/src/world/World.ts +++ b/src/world/World.ts @@ -24,6 +24,7 @@ class World { const layoutConfig = { gapsInnerHorizontal: config.gapsInnerHorizontal, gapsInnerVertical: config.gapsInnerVertical, + offScreenOpacity: config.offScreenOpacity / 100.0, stackColumnsByDefault: config.stackColumnsByDefault, resizeNeighborColumn: config.resizeNeighborColumn, reMaximize: config.reMaximize,