From fa40de97c9265345f167bfa5d6d43ca4580d888d Mon Sep 17 00:00:00 2001 From: retrozinndev Date: Wed, 30 Jul 2025 18:42:12 -0300 Subject: [PATCH] :zap: perf(bar/tray): use gtkbox instead of gtkmenubutton, use popover as gtkbox child --- ags/widget/bar/Tray.tsx | 64 +++++++++++++++++------------------------ 1 file changed, 27 insertions(+), 37 deletions(-) diff --git a/ags/widget/bar/Tray.tsx b/ags/widget/bar/Tray.tsx index ecd88a4..e3e6734 100644 --- a/ags/widget/bar/Tray.tsx +++ b/ags/widget/bar/Tray.tsx @@ -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,39 +20,36 @@ 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 { + const conns: Map = new Map(); + const gestureClick = Gtk.GestureClick.new(); + gestureClick.set_button(0); - return { - const conns: Map = new Map(); - const gestureClick = Gtk.GestureClick.new(); - gestureClick.set_button(0); + self.add_controller(gestureClick); - self.add_controller(gestureClick); + conns.set(gestureClick, gestureClick.connect("released", (gesture, _, x, y) => { + if(gesture.get_current_button() === Gdk.BUTTON_PRIMARY) { + item.activate(x, y); + return; + } - conns.set(gestureClick, gestureClick.connect("released", (gesture, _, x, y) => { - if(gesture.get_current_button() === Gdk.BUTTON_PRIMARY) { - item.activate(x, y); - return; - } - - 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(); - } - })) - }}> - - + if(gesture.get_current_button() === Gdk.BUTTON_SECONDARY) { + item.about_to_show(); + popover.popup(); + } + })) + }}> + + {popover} + ; }} }