⚡ perf(bar/tray): use gtkbox instead of gtkmenubutton, use popover as gtkbox child
This commit is contained in:
+7
-17
@@ -9,13 +9,6 @@ import Gio from "gi://Gio?version=2.0";
|
||||
|
||||
const astalTray = AstalTray.get_default();
|
||||
|
||||
function popoverFromModel(model: Gio.MenuModel, actionGroup: Gio.ActionGroup | null): Gtk.PopoverMenu {
|
||||
const menu = Gtk.PopoverMenu.new_from_model(model);
|
||||
menu.insert_action_group("dbusmenu", actionGroup)
|
||||
|
||||
return menu;
|
||||
}
|
||||
|
||||
export const Tray = () => {
|
||||
const items = createBinding(astalTray, "items").as(items => items.filter(item => item?.gicon));
|
||||
|
||||
@@ -27,9 +20,11 @@ export const Tray = () => {
|
||||
createBinding(item, "menuModel")
|
||||
])}>
|
||||
{([actionGroup, menuModel]: [Gio.ActionGroup, Gio.MenuModel]) => {
|
||||
const popover = popoverFromModel(menuModel, actionGroup);
|
||||
const popover = Gtk.PopoverMenu.new_from_model(menuModel);
|
||||
popover.insert_action_group("dbusmenu", actionGroup);
|
||||
popover.hasArrow = false;
|
||||
|
||||
return <Gtk.MenuButton class={"item"} tooltipMarkup={
|
||||
return <Gtk.Box class={"item"} tooltipMarkup={
|
||||
createBinding(item, "tooltipMarkup")
|
||||
} tooltipText={
|
||||
createBinding(item, "tooltipText")
|
||||
@@ -48,18 +43,13 @@ export const Tray = () => {
|
||||
|
||||
if(gesture.get_current_button() === Gdk.BUTTON_SECONDARY) {
|
||||
item.about_to_show();
|
||||
self.set_popover(popover);
|
||||
const conn = self.popover!.connect("closed", (ppover) => {
|
||||
self.set_popover(null);
|
||||
ppover.disconnect(conn);
|
||||
});
|
||||
|
||||
self.popup();
|
||||
popover.popup();
|
||||
}
|
||||
}))
|
||||
}}>
|
||||
<Gtk.Image gicon={createBinding(item, "gicon")} pixelSize={16} />
|
||||
</Gtk.MenuButton>
|
||||
{popover}
|
||||
</Gtk.Box>;
|
||||
}}
|
||||
</With>
|
||||
</Gtk.Box>}
|
||||
|
||||
Reference in New Issue
Block a user