12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667 |
- 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(); // 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);
- });
- }
|