186 lines
5.4 KiB
JavaScript
Executable File
186 lines
5.4 KiB
JavaScript
Executable File
import Adw from 'gi://Adw';
|
|
import GLib from 'gi://GLib';
|
|
import GObject from 'gi://GObject';
|
|
import Gio from 'gi://Gio';
|
|
|
|
import { ApplicationRow } from './applications_management/application_row.js';
|
|
|
|
|
|
const make_array = prefs_group => {
|
|
let list_box = prefs_group
|
|
.get_first_child()
|
|
.get_last_child()
|
|
.get_first_child();
|
|
|
|
let elements = [];
|
|
let i = 0;
|
|
let element = list_box.get_row_at_index(i);
|
|
while (element) {
|
|
elements.push(element);
|
|
i++;
|
|
element = list_box.get_row_at_index(i);
|
|
}
|
|
|
|
return elements;
|
|
};
|
|
|
|
|
|
export const Applications = GObject.registerClass({
|
|
GTypeName: 'Applications',
|
|
Template: GLib.uri_resolve_relative(import.meta.url, '../ui/applications.ui', GLib.UriFlags.NONE),
|
|
InternalChildren: [
|
|
'blur',
|
|
'sigma',
|
|
'brightness',
|
|
'opacity',
|
|
'dynamic_opacity',
|
|
'blur_on_overview',
|
|
'enable_all',
|
|
'whitelist',
|
|
'add_window_whitelist',
|
|
'blacklist',
|
|
'add_window_blacklist'
|
|
],
|
|
}, class Applications extends Adw.PreferencesPage {
|
|
constructor(preferences, preferences_window) {
|
|
super({});
|
|
this._preferences_window = preferences_window;
|
|
|
|
this.preferences = preferences;
|
|
|
|
this.preferences.applications.settings.bind(
|
|
'blur', this._blur, 'active',
|
|
Gio.SettingsBindFlags.DEFAULT
|
|
);
|
|
this.preferences.applications.settings.bind(
|
|
'opacity', this._opacity, 'value',
|
|
Gio.SettingsBindFlags.DEFAULT
|
|
);
|
|
this.preferences.applications.settings.bind(
|
|
'dynamic-opacity', this._dynamic_opacity, 'active',
|
|
Gio.SettingsBindFlags.DEFAULT
|
|
);
|
|
this.preferences.applications.settings.bind(
|
|
'blur-on-overview', this._blur_on_overview, 'active',
|
|
Gio.SettingsBindFlags.DEFAULT
|
|
);
|
|
this.preferences.applications.settings.bind(
|
|
'enable-all', this._enable_all, 'active',
|
|
Gio.SettingsBindFlags.DEFAULT
|
|
);
|
|
this.preferences.applications.settings.bind(
|
|
'sigma', this._sigma, 'value',
|
|
Gio.SettingsBindFlags.DEFAULT
|
|
);
|
|
this.preferences.applications.settings.bind(
|
|
'brightness', this._brightness, 'value',
|
|
Gio.SettingsBindFlags.DEFAULT
|
|
);
|
|
|
|
// connect 'enable all' button to whitelist/blacklist visibility
|
|
this._enable_all.bind_property(
|
|
'active', this._whitelist, 'visible',
|
|
GObject.BindingFlags.INVERT_BOOLEAN
|
|
);
|
|
this._enable_all.bind_property(
|
|
'active', this._blacklist, 'visible',
|
|
GObject.BindingFlags.DEFAULT
|
|
);
|
|
|
|
// make sure that blacklist / whitelist is correctly hidden
|
|
if (this._enable_all.active)
|
|
this._whitelist.visible = false;
|
|
this._blacklist.visible = !this._whitelist.visible;
|
|
|
|
// listen to app row addition
|
|
this._add_window_whitelist.connect('clicked',
|
|
() => this.add_to_whitelist()
|
|
);
|
|
this._add_window_blacklist.connect('clicked',
|
|
() => this.add_to_blacklist()
|
|
);
|
|
|
|
// add initial applications
|
|
this.add_widgets_from_lists();
|
|
|
|
this.preferences.connect('reset', () => {
|
|
this.remove_all_widgets();
|
|
this.add_widgets_from_lists();
|
|
});
|
|
}
|
|
|
|
// A way to retriew the whitelist widgets.
|
|
get _whitelist_elements() {
|
|
return make_array(this._whitelist);
|
|
}
|
|
|
|
// A way to retriew the blacklist widgets.
|
|
get _blacklist_elements() {
|
|
return make_array(this._blacklist);
|
|
}
|
|
|
|
add_widgets_from_lists() {
|
|
this.preferences.applications.WHITELIST.forEach(
|
|
app_name => this.add_to_whitelist(app_name)
|
|
);
|
|
|
|
this.preferences.applications.BLACKLIST.forEach(
|
|
app_name => this.add_to_blacklist(app_name)
|
|
);
|
|
|
|
}
|
|
|
|
close_all_expanded_rows() {
|
|
this._whitelist_elements.forEach(
|
|
element => element.set_expanded(false)
|
|
);
|
|
this._blacklist_elements.forEach(
|
|
element => element.set_expanded(false)
|
|
);
|
|
}
|
|
|
|
remove_all_widgets() {
|
|
this._whitelist_elements.forEach(
|
|
element => this._whitelist.remove(element)
|
|
);
|
|
this._blacklist_elements.forEach(
|
|
element => this._blacklist.remove(element)
|
|
);
|
|
}
|
|
|
|
add_to_whitelist(app_name = null) {
|
|
let window_row = new ApplicationRow('whitelist', this, app_name);
|
|
this._whitelist.add(window_row);
|
|
}
|
|
|
|
add_to_blacklist(app_name = null) {
|
|
let window_row = new ApplicationRow('blacklist', this, app_name);
|
|
this._blacklist.add(window_row);
|
|
}
|
|
|
|
update_whitelist_titles() {
|
|
let titles = this._whitelist_elements
|
|
.map(element => element._window_class.buffer.text)
|
|
.filter(title => title != "");
|
|
|
|
this.preferences.applications.WHITELIST = titles;
|
|
}
|
|
|
|
update_blacklist_titles() {
|
|
let titles = this._blacklist_elements
|
|
.map(element => element._window_class.buffer.text)
|
|
.filter(title => title != "");
|
|
|
|
this.preferences.applications.BLACKLIST = titles;
|
|
}
|
|
|
|
remove_from_whitelist(widget) {
|
|
this._whitelist.remove(widget);
|
|
this.update_whitelist_titles();
|
|
}
|
|
|
|
remove_from_blacklist(widget) {
|
|
this._blacklist.remove(widget);
|
|
this.update_blacklist_titles();
|
|
}
|
|
}); |