linux-presets/gui/gnome/autocustom-gnome-macos/res/extensions/search-light@icedman.github.../prefs.js

178 lines
4.6 KiB
JavaScript
Raw Normal View History

2024-07-08 22:46:35 +02:00
// loosely based on JustPerfection & Blur-My-Shell
import Gdk from 'gi://Gdk';
import Gtk from 'gi://Gtk';
import Gio from 'gi://Gio';
import { ShortcutSettingWidget } from './shortcuts.js';
const GETTEXT_DOMAIN = 'search-light';
import { schemaId, SettingsKeys } from './preferences/keys.js';
import { MonitorsConfig } from './monitors.js';
import {
ExtensionPreferences,
gettext as _,
} from 'resource:///org/gnome/Shell/Extensions/js/extensions/prefs.js';
export default class Preferences extends ExtensionPreferences {
constructor(metadata) {
super(metadata);
let iconTheme = Gtk.IconTheme.get_for_display(Gdk.Display.get_default());
let UIFolderPath = `${this.path}/ui`;
iconTheme.add_search_path(`${UIFolderPath}/icons`);
// ExtensionUtils.initTranslations(GETTEXT_DOMAIN);
}
find(n, name) {
if (n.get_name() == name) {
return n;
}
let c = n.get_first_child();
while (c) {
let cn = this.find(c, name);
if (cn) {
return cn;
}
c = c.get_next_sibling();
}
return null;
}
dump(n, l) {
let s = '';
for (let i = 0; i < l; i++) {
s += ' ';
}
print(`${s}${n.get_name()}`);
let c = n.get_first_child();
while (c) {
this.dump(c, l + 1);
c = c.get_next_sibling();
}
}
addMenu(window, builder) {
// let menu_util = builder.get_object('menu_util');
// window.add(menu_util);
// let gwc = this.find(window, 'GtkWindowControls');
// gwc.visible = false;
// console.log(gwc);
let headerbar = this.find(window, 'AdwHeaderBar');
if (!headerbar) {
return;
}
headerbar.pack_start(builder.get_object('info_menu'));
// setup menu actions
const actionGroup = new Gio.SimpleActionGroup();
window.insert_action_group('prefs', actionGroup);
// a list of actions with their associated link
const actions = [
{
name: 'open-bug-report',
link: 'https://github.com/icedman/search-light/issues',
},
{
name: 'open-readme',
link: 'https://github.com/icedman/search-light',
},
{
name: 'open-buy-coffee',
link: 'https://www.buymeacoffee.com/icedman',
},
{
name: 'open-license',
link: 'https://github.com/icedman/search-light/blob/master/LICENSE',
},
];
actions.forEach((action) => {
let act = new Gio.SimpleAction({ name: action.name });
act.connect('activate', (_) =>
Gtk.show_uri(window, action.link, Gdk.CURRENT_TIME)
);
actionGroup.add_action(act);
});
// window.remove(menu_util);
}
addButtonEvents(window, builder, settings) {
//
}
fillPreferencesWindow(window) {
let builder = new Gtk.Builder();
let UIFolderPath = `${this.path}/ui`;
builder.add_from_file(`${UIFolderPath}/general.ui`);
builder.add_from_file(`${UIFolderPath}/appearance.ui`);
builder.add_from_file(`${UIFolderPath}/accelerator.ui`);
builder.add_from_file(`${UIFolderPath}/menu.ui`);
window.add(builder.get_object('general'));
window.add(builder.get_object('appearance'));
window.set_search_enabled(true);
// builder.get_object("providers-group").visible = false;
let settings = this.getSettings(schemaId);
let settingsKeys = SettingsKeys();
settingsKeys.connectBuilder(builder);
settingsKeys.connectSettings(settings);
this.addButtonEvents(window, builder, settings);
this.addMenu(window, builder);
this._monitorsConfig = new MonitorsConfig();
this._monitorsConfig.connect('updated', () => this.updateMonitors());
// shortcuts widget
{
let placeholder = builder.get_object('shortcut-search-placeholder');
placeholder.append(
new ShortcutSettingWidget(
builder.get_object('accelerator'),
settings,
'shortcut-search',
window
)
);
}
{
let placeholder = builder.get_object(
'secondary-shortcut-search-placeholder'
);
placeholder.append(
new ShortcutSettingWidget(
builder.get_object('accelerator'),
settings,
'secondary-shortcut-search',
window
)
);
}
this._builder = builder;
this.updateMonitors();
}
updateMonitors() {
let monitors = this._monitorsConfig.monitors;
let count = monitors.length;
let list = new Gtk.StringList();
list.append('Primary Monitor');
for (let i = 0; i < count; i++) {
let m = monitors[i];
list.append(m.displayName);
}
this._builder.get_object('preferred-monitor').set_model(list);
}
}