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,