linux-presets/gui/gnome/autocustom-gnome-macos/res/extensions/blur-my-shell@aunetx/preferences/menu.js

69 lines
2.2 KiB
JavaScript
Raw Normal View History

2024-07-08 22:46:35 +02:00
import Gdk from 'gi://Gdk';
import Gtk from 'gi://Gtk';
import Gio from 'gi://Gio';
import GLib from 'gi://GLib';
export function addMenu(window) {
const builder = new Gtk.Builder();
// add a dummy page and remove it immediately, to access headerbar
builder.add_from_file(GLib.filename_from_uri(GLib.uri_resolve_relative(import.meta.url, '../ui/menu.ui', GLib.UriFlags.NONE))[0]);
let menu_util = builder.get_object('menu_util');
window.add(menu_util);
try {
addMenuToHeader(window, builder);
} catch (error) {
// could not add menu... not so bad
}
window.remove(menu_util);
}
function addMenuToHeader(window, builder) {
// a little hack to get to the headerbar
const page = builder.get_object('menu_util');
const pages_stack = page.get_parent(); // AdwViewStack
const content_stack = pages_stack.get_parent().get_parent(); // GtkStack
const preferences = content_stack.get_parent(); // GtkBox
const headerbar = preferences.get_first_child().get_next_sibling()
.get_first_child().get_first_child().get_first_child(); // AdwHeaderBar
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/aunetx/blur-my-shell/issues'
},
{
name: 'open-readme',
link: 'https://github.com/aunetx/blur-my-shell'
},
{
name: 'open-license',
link: 'https://github.com/aunetx/blur-my-shell/blob/master/LICENSE'
},
{
name: 'donate-github',
link: 'https://github.com/sponsors/aunetx'
},
{
name: 'donate-kofi',
link: 'https://ko-fi.com/aunetx'
},
];
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);
});
}