🔧 Use more robust preview logic
This commit is contained in:
+28
-9
@@ -215,18 +215,37 @@ class Extension {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Create a list of all currently enabled effects.
|
// Now we have to choose an effect.
|
||||||
const enabledEffects = ALL_EFFECTS.filter(Effect => {
|
this._effect = null;
|
||||||
return this._settings.get_boolean(`${Effect.getNick()}-close-effect`);
|
|
||||||
});
|
|
||||||
|
|
||||||
// Nothing is enabled...
|
// First we check if an effect is to be previewd.
|
||||||
if (enabledEffects.length == 0) {
|
const previewNick = this._settings.get_string('close-preview-effect');
|
||||||
return;
|
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.
|
// If nothing was enabled, we have to do nothing :)
|
||||||
this._effect = enabledEffects[Math.floor(Math.random() * enabledEffects.length)];
|
if (this._effect == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
// The effect usually will choose to override the present transitions on the actor.
|
// The effect usually will choose to override the present transitions on the actor.
|
||||||
const transitionConfig = this._effect.getCloseTransition(actor, this._settings);
|
const transitionConfig = this._effect.getCloseTransition(actor, this._settings);
|
||||||
|
|||||||
@@ -297,18 +297,9 @@ var PreferencesDialog = class PreferencesDialog {
|
|||||||
|
|
||||||
// Open the preview window once the preview button is clicked.
|
// Open the preview window once the preview button is clicked.
|
||||||
this._button.connect('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.
|
// Set the to-be-previewed effect.
|
||||||
enabledEffects.forEach(Effect => {
|
dialog.getSettings().set_string('close-preview-effect', Effect.getNick());
|
||||||
dialog.getSettings().set_boolean(`${Effect.getNick()}-close-effect`, false);
|
|
||||||
});
|
|
||||||
|
|
||||||
// Enable the to-be-previewed effect.
|
|
||||||
dialog.getSettings().set_boolean(`${Effect.getNick()}-close-effect`, true);
|
|
||||||
|
|
||||||
// Create the preview-window.
|
// Create the preview-window.
|
||||||
const window = new Gtk.Window({
|
const window = new Gtk.Window({
|
||||||
@@ -344,17 +335,6 @@ var PreferencesDialog = class PreferencesDialog {
|
|||||||
}
|
}
|
||||||
|
|
||||||
window.show();
|
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);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -13,6 +13,12 @@
|
|||||||
<description>Set to true to burn dialogs as well.</description>
|
<description>Set to true to burn dialogs as well.</description>
|
||||||
</key>
|
</key>
|
||||||
|
|
||||||
|
<key name="close-preview-effect" type="s">
|
||||||
|
<default>""</default>
|
||||||
|
<summary>Close Preview Effect</summary>
|
||||||
|
<description>The effect with this nick will be used for the next window-close animation.</description>
|
||||||
|
</key>
|
||||||
|
|
||||||
<!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
|
<!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
|
||||||
<!-- Fire Options -->
|
<!-- Fire Options -->
|
||||||
<!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
|
<!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
|
||||||
|
|||||||
Reference in New Issue
Block a user