From 8475ae29ba521148355a08faf34ad8e8f024959c Mon Sep 17 00:00:00 2001 From: Simon Schneegans Date: Sun, 23 Jan 2022 13:13:55 +0100 Subject: [PATCH] :wrench: Use more robust preview logic --- extension.js | 37 ++++++++++++++----- prefs.js | 24 +----------- ...ell.extensions.burn-my-windows.gschema.xml | 6 +++ 3 files changed, 36 insertions(+), 31 deletions(-) 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. + +