🔧 Make effect expander rows behave like an accordion
This commit is contained in:
@@ -120,14 +120,31 @@ var PreferencesDialog = class PreferencesDialog {
|
|||||||
const group = new Adw.PreferencesGroup({title: _('Effect Options')});
|
const group = new Adw.PreferencesGroup({title: _('Effect Options')});
|
||||||
this.gtkBoxAppend(this._widget, group);
|
this.gtkBoxAppend(this._widget, group);
|
||||||
|
|
||||||
|
// This stores all expander rows for the effects. We use this to implement the
|
||||||
|
// accordion-functionality of the effect settings.
|
||||||
|
this._effectRows = [];
|
||||||
|
|
||||||
this._ALL_EFFECTS.forEach(effect => {
|
this._ALL_EFFECTS.forEach(effect => {
|
||||||
const [minMajor, minMinor] = effect.getMinShellVersion();
|
const [minMajor, minMinor] = effect.getMinShellVersion();
|
||||||
if (utils.shellVersionIsAtLeast(minMajor, minMinor)) {
|
if (utils.shellVersionIsAtLeast(minMajor, minMinor)) {
|
||||||
const row = effect.getPreferences(this);
|
const row = effect.getPreferences(this);
|
||||||
row.set_title(effect.getLabel());
|
row.set_title(effect.getLabel());
|
||||||
|
|
||||||
|
// Un-expand any previously expanded effect row. This way we ensure that there
|
||||||
|
// is only one expanded row at any time.
|
||||||
|
row.connect('notify::expanded', (currentRow) => {
|
||||||
|
if (currentRow.get_expanded()) {
|
||||||
|
this._effectRows.forEach(row => {
|
||||||
|
if (row != currentRow) {
|
||||||
|
row.set_expanded(false);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
// Show a preview of the effect with a button in the effect row.
|
||||||
const previewButton = Gtk.Button.new_from_icon_name('eye-open-symbolic');
|
const previewButton = Gtk.Button.new_from_icon_name('eye-open-symbolic');
|
||||||
previewButton.add_css_class('flat');
|
previewButton.add_css_class('circular');
|
||||||
previewButton.set_tooltip_text(_('Preview this Effect'));
|
previewButton.set_tooltip_text(_('Preview this Effect'));
|
||||||
previewButton.set_valign(Gtk.Align.CENTER);
|
previewButton.set_valign(Gtk.Align.CENTER);
|
||||||
row.add_prefix(previewButton);
|
row.add_prefix(previewButton);
|
||||||
@@ -137,6 +154,8 @@ var PreferencesDialog = class PreferencesDialog {
|
|||||||
});
|
});
|
||||||
|
|
||||||
group.add(row);
|
group.add(row);
|
||||||
|
|
||||||
|
this._effectRows.push(row);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user