diff --git a/extension.js b/extension.js
index 128251d..4e28932 100644
--- a/extension.js
+++ b/extension.js
@@ -215,18 +215,37 @@ class Extension {
return;
}
- // Create a list of all currently enabled effects.
- const enabledEffects = ALL_EFFECTS.filter(Effect => {
- return this._settings.get_boolean(`${Effect.getNick()}-close-effect`);
- });
+ // Now we have to choose an effect.
+ this._effect = null;
- // Nothing is enabled...
- if (enabledEffects.length == 0) {
- return;
+ // First we check if an effect is to be previewd.
+ const previewNick = this._settings.get_string('close-preview-effect');
+ if (previewNick != '') {
+ this._effect = ALL_EFFECTS.find(Effect => {
+ return Effect.getNick() == previewNick;
+ });
+
+ // Only preview the effect once.
+ this._settings.set_string('close-preview-effect', '');
+
+ } else {
+
+ // Else we choose a random effect from all enabled effects. Therefore, we first
+ // create a list of all currently enabled effects.
+ const enabled = ALL_EFFECTS.filter(Effect => {
+ return this._settings.get_boolean(`${Effect.getNick()}-close-effect`);
+ });
+
+ // And then choose a random effect.
+ if (enabled.length > 0) {
+ this._effect = enabled[Math.floor(Math.random() * enabled.length)];
+ }
}
- // Choose a random effect.
- this._effect = enabledEffects[Math.floor(Math.random() * enabledEffects.length)];
+ // If nothing was enabled, we have to do nothing :)
+ if (this._effect == null) {
+ return;
+ }
// The effect usually will choose to override the present transitions on the actor.
const transitionConfig = this._effect.getCloseTransition(actor, this._settings);
diff --git a/prefs.js b/prefs.js
index 78d2b3a..2182911 100644
--- a/prefs.js
+++ b/prefs.js
@@ -297,18 +297,9 @@ var PreferencesDialog = class PreferencesDialog {
// Open the preview window once the preview button is clicked.
this._button.connect('clicked', () => {
- // Create a list of all currently enabled effects.
- const enabledEffects = ALL_EFFECTS.filter(Effect => {
- return dialog.getSettings().get_boolean(`${Effect.getNick()}-close-effect`);
- });
- // Disable all enabled effects temporarily.
- enabledEffects.forEach(Effect => {
- dialog.getSettings().set_boolean(`${Effect.getNick()}-close-effect`, false);
- });
-
- // Enable the to-be-previewed effect.
- dialog.getSettings().set_boolean(`${Effect.getNick()}-close-effect`, true);
+ // Set the to-be-previewed effect.
+ dialog.getSettings().set_string('close-preview-effect', Effect.getNick());
// Create the preview-window.
const window = new Gtk.Window({
@@ -344,17 +335,6 @@ var PreferencesDialog = class PreferencesDialog {
}
window.show();
-
- // Restore settings when the window gets closed.
- window.connect('unrealize', () => {
- // Disable the to-be-previewed effect again.
- dialog.getSettings().set_boolean(`${Effect.getNick()}-close-effect`, false);
-
- // Enable all previously enabled effects again.
- enabledEffects.forEach(Effect => {
- dialog.getSettings().set_boolean(`${Effect.getNick()}-close-effect`, true);
- });
- });
});
}
});
diff --git a/schemas/org.gnome.shell.extensions.burn-my-windows.gschema.xml b/schemas/org.gnome.shell.extensions.burn-my-windows.gschema.xml
index d5e9a29..ee796fc 100644
--- a/schemas/org.gnome.shell.extensions.burn-my-windows.gschema.xml
+++ b/schemas/org.gnome.shell.extensions.burn-my-windows.gschema.xml
@@ -13,6 +13,12 @@
Set to true to burn dialogs as well.
+
+ ""
+ Close Preview Effect
+ The effect with this nick will be used for the next window-close animation.
+
+