create-gtk
Version:
npm initializer for gtk apps using gjs
48 lines (43 loc) • 1.23 kB
text/typescript
import Gtk from "gi://Gtk?version=4.0";
import GObject from "gi://GObject";
import Gio from "gi://Gio";
const APP_MENU = `
<?xml version="1.0" encoding="UTF-8"?>
<interface>
<menu id='app-menu'>
<section>
<item>
<attribute name='label' translatable='yes'>_About</attribute>
<attribute name='action'>win.about</attribute>
</item>
<item>
<attribute name='label' translatable='yes'>_Quit</attribute>
<attribute name='action'>win.quit</attribute>
</item>
</section>
</menu>
</interface>
`;
/**
* Wrapper class for at Gtk.Menubutton with a menu defined
* in a Gtk.Builder xml string
*/
export class IMenuButton extends Gtk.MenuButton {
constructor(config: Partial<Gtk.MenuButton.ConstructorProps> = {}) {
super(config);
const xml = APP_MENU;
const name = "app-menu";
const icon_name = "open-menu-symbolic";
const builder = new Gtk.Builder();
builder.add_from_string(xml, xml.length);
const menu = builder.get_object(name) as Gio.MenuModel; // TODO: ts-for-gir: Use Generics here
this.set_menu_model(menu);
this.set_icon_name(icon_name);
}
}
export const MenuButton = GObject.registerClass(
{
GTypeName: "MenuButton",
},
IMenuButton
);