Merging upstream version 20231210.
Signed-off-by: Daniel Baumann <daniel@debian.org>
This commit is contained in:
parent
18ff17dcf8
commit
9657f2cada
273 changed files with 25892 additions and 8304 deletions
108
extensions/45/middleclickclose/src/prefs.js
Normal file
108
extensions/45/middleclickclose/src/prefs.js
Normal file
|
@ -0,0 +1,108 @@
|
|||
/**
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
**/
|
||||
|
||||
import Adw from 'gi://Adw';
|
||||
import Gtk from 'gi://Gtk';
|
||||
import GLib from 'gi://GLib';
|
||||
import GObject from 'gi://GObject';
|
||||
|
||||
import { ExtensionPreferences, gettext as _ } from 'resource:///org/gnome/Shell/Extensions/js/extensions/prefs.js';
|
||||
|
||||
export default class MiddleClickClosePreferences extends ExtensionPreferences {
|
||||
getPreferencesWidget() {
|
||||
let page = new Adw.PreferencesPage();
|
||||
let group = new Adw.PreferencesGroup();
|
||||
|
||||
group.add(this.buildPreference("close-button", {
|
||||
nicks: {
|
||||
left: _("Left"),
|
||||
middle: _("Middle"),
|
||||
right: _("Right"),
|
||||
'button 4': _("Button 4"),
|
||||
'button 5': _("Button 5"),
|
||||
'button 6': _("Button 6"),
|
||||
'button 7': _("Button 7"),
|
||||
'button 8': _("Button 8"),
|
||||
'button 9': _("Button 9"),
|
||||
},
|
||||
}));
|
||||
|
||||
group.add(this.buildPreference("rearrange-delay", {
|
||||
step: 50,
|
||||
}));
|
||||
|
||||
page.add(group);
|
||||
return page;
|
||||
}
|
||||
|
||||
buildPreference(key, opts) {
|
||||
opts ??= {}
|
||||
|
||||
const settings = this.getSettings();
|
||||
const setting = settings.create_action(key);
|
||||
const schema = settings.settings_schema.get_key(key);
|
||||
|
||||
opts.title ??= schema.get_summary() || schema.get_name();
|
||||
opts.subtitle ??= schema.get_description();
|
||||
|
||||
const ty = schema.get_value_type().dup_string();
|
||||
const [range_ty, range] = schema.get_range().recursiveUnpack();
|
||||
|
||||
if (range_ty == "enum") {
|
||||
opts.nicks ??= {};
|
||||
let row = new Adw.ComboRow({
|
||||
title: opts.title,
|
||||
subtitle: opts.subtitle,
|
||||
model: new Gtk.StringList({ strings: range.map(nick => opts.nicks[nick]) }),
|
||||
selected: range.indexOf(setting.state.unpack()),
|
||||
});
|
||||
|
||||
row.connect('notify::selected', () => {
|
||||
setting.activate(GLib.Variant.new_string(range[row.selected]));
|
||||
});
|
||||
|
||||
return row;
|
||||
} else if (range_ty == "range") {
|
||||
opts.lower ??= range[0]
|
||||
opts.upper ??= range[1]
|
||||
}
|
||||
|
||||
if (["i"].includes(ty)) {
|
||||
let adjustment = new Gtk.Adjustment({
|
||||
lower: opts.lower,
|
||||
upper: opts.upper,
|
||||
step_increment: opts.step,
|
||||
value: setting.state.unpack(),
|
||||
});
|
||||
|
||||
let row = new Adw.SpinRow({
|
||||
title: opts.title,
|
||||
subtitle: opts.subtitle,
|
||||
numeric: true,
|
||||
adjustment,
|
||||
});
|
||||
|
||||
adjustment.connect("value-changed", adj => {
|
||||
setting.activate(GLib.Variant.new_int32(adj.value));
|
||||
});
|
||||
|
||||
return row;
|
||||
}
|
||||
|
||||
// Yeah... I'm not gonna implement a full introspector here. Just add whatever is required
|
||||
// when needed.
|
||||
throw new GObject.NotImplementedError();
|
||||
}
|
||||
};
|
Loading…
Add table
Add a link
Reference in a new issue