30 lines
970 B
TypeScript
30 lines
970 B
TypeScript
|
import { hook } from "astal/gtk4";
|
||
|
import { bind } from "astal";
|
||
|
|
||
|
import Tray from "gi://AstalTray";
|
||
|
|
||
|
export default function TrayView() {
|
||
|
const tray = Tray.get_default();
|
||
|
const items = bind(tray, "items");
|
||
|
|
||
|
return <box spacing={items.as(items => items.length)} cssClasses={["tray"]}>
|
||
|
{items.as(items => items.map(item => {
|
||
|
const button = <menubutton
|
||
|
cssClasses={["item"]}
|
||
|
tooltipMarkup={bind(item, "tooltipMarkup")}
|
||
|
menuModel={bind(item, "menuModel")}
|
||
|
hasFrame={false}
|
||
|
primary
|
||
|
setup={self => self.insert_action_group("dbusmenu", item.actionGroup)}
|
||
|
>
|
||
|
<image gicon={item.gicon} />
|
||
|
</menubutton>;
|
||
|
|
||
|
hook(button, item, "notify::action-group", self => {
|
||
|
self.insert_action_group("dbusmenu", item.actionGroup);
|
||
|
});
|
||
|
|
||
|
return button;
|
||
|
}))}
|
||
|
</box>
|
||
|
}
|