69 lines
2.2 KiB
JavaScript
69 lines
2.2 KiB
JavaScript
|
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);
|
||
|
});
|
||
|
}
|