-
Notifications
You must be signed in to change notification settings - Fork 24
/
prefs.js
92 lines (77 loc) · 2.94 KB
/
prefs.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
// Copyright(C) 2021 Emre Şenliyim
// 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 3 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 GObject from "gi://GObject";
import Gtk from "gi://Gtk";
import Gio from "gi://Gio";
import {
ExtensionPreferences,
gettext as _,
} from "resource:///org/gnome/Shell/Extensions/js/extensions/prefs.js";
import settingsFields from "./settingsFields.js";
const SpBuilderScope = GObject.registerClass(
{
Implements: [Gtk.BuilderScope],
},
class extends GObject.Object {
constructor(settings) {
super();
this.settings = settings;
settingsFields.forEach((field) => {
if (!field.resettable) {
return;
}
this[field.resetCallback] = (connectObject) => {
settings.reset(field.setting);
};
});
}
vfunc_create_closure(builder, handlerName, flags, connectObject) {
if (flags & Gtk.BuilderClosureFlags.SWAPPED) {
throw new Error('Unsupported template signal flag "swapped"');
}
if (typeof this[handlerName] === "undefined") {
throw new Error(`${handlerName} is undefined`);
}
return this[handlerName].bind(connectObject || this);
}
resetAllToDefault() {
settingsFields.forEach((field) => {
if (field.resettable) this.settings.reset(field.setting);
});
}
on_defaults_clicked(connectObject) {
this.resetAllToDefault();
}
},
);
export default class SpTrayPrefs extends ExtensionPreferences {
constructor(metadata) {
super(metadata);
}
getPreferencesWidget() {
const settings = this.getSettings();
const builder = new Gtk.Builder();
// builder.set_scope(new RegisteredClass(settings));
builder.set_scope(new SpBuilderScope(settings));
builder.add_from_file(this.path + "/prefs.xml");
// bind switches and text fields to their respective settings
settingsFields.forEach((field) =>
settings.bind(
field.setting,
builder.get_object(field.fieldId),
field.type,
Gio.SettingsBindFlags.DEFAULT,
),
);
return builder.get_object("prefs_widget");
}
}