diff --git a/resources/ui/applications.ui b/resources/ui/applications.ui
index 452a6b6d..9beb69df 100644
--- a/resources/ui/applications.ui
+++ b/resources/ui/applications.ui
@@ -95,6 +95,21 @@ To get the best results possible, although with reduced performances, you can ch
+
+
+
+
Blur on overview
diff --git a/schemas/org.gnome.shell.extensions.blur-my-shell.gschema.xml b/schemas/org.gnome.shell.extensions.blur-my-shell.gschema.xml
index 5708ca36..450014b0 100644
--- a/schemas/org.gnome.shell.extensions.blur-my-shell.gschema.xml
+++ b/schemas/org.gnome.shell.extensions.blur-my-shell.gschema.xml
@@ -149,7 +149,8 @@
1
- Enum to select the style of the components in overview (0 not styled, 1 light, 2 dark, 3 transparent)
+ Enum to select the style of the components in overview (0 not styled, 1 light, 2 dark, 3
+ transparent)
@@ -391,6 +392,11 @@
true
Wether or not to make the focused window opaque
+
+
+ false
+ Wether or not to make fullscreen windows opaque
+
false
diff --git a/src/components/applications.js b/src/components/applications.js
index e2a8bdf9..7cc82f78 100644
--- a/src/components/applications.js
+++ b/src/components/applications.js
@@ -145,6 +145,12 @@ export const ApplicationsBlur = class ApplicationsBlur {
_ => this.check_blur(meta_window)
);
+ // update the blur when wm-class is changed
+ this.connections.connect(
+ meta_window, 'notify::fullscreen',
+ _ => this.update_opacity_for(meta_window, pid)
+ );
+
// update the position and size when the window size changes
this.connections.connect(
meta_window, 'size-changed',
@@ -310,7 +316,7 @@ export const ApplicationsBlur = class ApplicationsBlur {
// if we remove the focus and have blur, show it and make the window transparent
else if (blur_actor) {
blur_actor.show();
- this.set_window_opacity(window_actor, this.settings.applications.OPACITY);
+ this.set_window_opacity(window_actor, this.get_opacity_for_window(meta_window));
}
}
@@ -346,16 +352,29 @@ export const ApplicationsBlur = class ApplicationsBlur {
});
}
- /// Update the opacity of all window actors.
- set_opacity() {
- let opacity = this.settings.applications.OPACITY;
+ /// Get the opacity for a given meta window; taking into account whether or it is fullscreen
+ /// and needs to be opaque.
+ get_opacity_for_window(meta_window) {
+ if (this.settings.applications.OPAQUE_FULLSCREEN_WINDOW && meta_window.fullscreen)
+ return 255;
+ else
+ return this.settings.applications.OPACITY;
+ }
- this.meta_window_map.forEach(((meta_window, pid) => {
- if (pid != this.focused_window_pid && meta_window.blur_actor) {
- let window_actor = meta_window.get_compositor_private();
- this.set_window_opacity(window_actor, opacity);
- }
- }));
+ /// Update the opacity of a given window actor.
+ update_opacity_for(meta_window, pid) {
+ if (pid != this.focused_window_pid && meta_window.blur_actor) {
+ let window_actor = meta_window.get_compositor_private();
+ let opacity = this.get_opacity_for_window(meta_window);
+ this.set_window_opacity(window_actor, opacity);
+ }
+ }
+
+ /// Update the opacity of all window actors.
+ update_opacity() {
+ this.meta_window_map.forEach(
+ (meta_window, pid) => this.update_opacity_for(meta_window, pid)
+ );
}
/// Compute the size and position for a blur actor.
diff --git a/src/conveniences/keys.js b/src/conveniences/keys.js
index 1e1dba84..0d3ac640 100644
--- a/src/conveniences/keys.js
+++ b/src/conveniences/keys.js
@@ -57,6 +57,7 @@ export const KEYS = [
{ type: Type.D, name: "brightness" },
{ type: Type.I, name: "opacity" },
{ type: Type.B, name: "dynamic-opacity" },
+ { type: Type.B, name: "opaque-fullscreen-window" },
{ type: Type.B, name: "blur-on-overview" },
{ type: Type.B, name: "enable-all" },
{ type: Type.AS, name: "whitelist" },
diff --git a/src/extension.js b/src/extension.js
index 443d7b6b..e963e46e 100644
--- a/src/extension.js
+++ b/src/extension.js
@@ -466,9 +466,7 @@ export default class BlurMyShell extends Extension {
// application opacity changed
this._settings.applications.OPACITY_changed(() => {
if (this._settings.applications.BLUR)
- this._applications_blur.set_opacity(
- this._settings.applications.OPACITY
- );
+ this._applications_blur.update_opacity();
});
// application dynamic-opacity changed
@@ -477,6 +475,12 @@ export default class BlurMyShell extends Extension {
this._applications_blur.init_dynamic_opacity();
});
+ // application opaque-fullscreen-window changed
+ this._settings.applications.OPAQUE_FULLSCREEN_WINDOW_changed(() => {
+ if (this._settings.applications.BLUR)
+ this._applications_blur.init_dynamic_opacity();
+ });
+
// application blur-on-overview changed
this._settings.applications.BLUR_ON_OVERVIEW_changed(() => {
if (this._settings.applications.BLUR)
diff --git a/src/preferences/applications.js b/src/preferences/applications.js
index 620d59e9..d2f958e9 100644
--- a/src/preferences/applications.js
+++ b/src/preferences/applications.js
@@ -34,6 +34,7 @@ export const Applications = GObject.registerClass({
'brightness',
'opacity',
'dynamic_opacity',
+ 'opaque_fullscreen_window',
'blur_on_overview',
'enable_all',
'whitelist',
@@ -60,6 +61,10 @@ export const Applications = GObject.registerClass({
'dynamic-opacity', this._dynamic_opacity, 'active',
Gio.SettingsBindFlags.DEFAULT
);
+ this.preferences.applications.settings.bind(
+ 'opaque-fullscreen-window', this._opaque_fullscreen_window, 'active',
+ Gio.SettingsBindFlags.DEFAULT
+ );
this.preferences.applications.settings.bind(
'blur-on-overview', this._blur_on_overview, 'active',
Gio.SettingsBindFlags.DEFAULT