Files
colorshell/ags/widget/bar/FocusedClient.ts
T

54 lines
2.3 KiB
TypeScript

import { bind } from "astal";
import { Gtk, Widget } from "astal/gtk3";
import AstalHyprland from "gi://AstalHyprland";
import { getAppIcon } from "../../scripts/apps";
const hyprland = AstalHyprland.get_default();
export function FocusedClient(): Gtk.Widget {
return new Widget.Box({
className: "focused-client",
visible: bind(hyprland, "focusedClient").as(fClient =>
!fClient ? false : (fClient?.initialClass == null ? false : true)),
children: bind(hyprland, "focusedClient").as(focusedClient => focusedClient ? [
new Widget.Icon({
className: "icon",
vexpand: true,
css: ".icon { font-size: 18px; }",
icon: bind(focusedClient, "class").as(clss =>
getAppIcon(clss) ?? "application-x-executable-symbolic")
}),
new Widget.Box({
className: "text-content",
orientation: Gtk.Orientation.VERTICAL,
homogeneous: false,
valign: Gtk.Align.CENTER,
children: [
new Widget.Label({
className: "class",
xalign: 0,
visible: bind(focusedClient, "class").as(Boolean),
maxWidthChars: 55,
truncate: true,
tooltipText: bind(focusedClient, "class").as(clientClass =>
clientClass ?? ""),
label: bind(focusedClient, "class").as(clientClass =>
clientClass ?? "no_class")
} as Widget.LabelProps),
new Widget.Label({
className: "title",
xalign: 0,
maxWidthChars: 50,
visible: bind(focusedClient, "title").as(Boolean),
truncate: true,
tooltipText: bind(focusedClient, "title").as((clientTitle: string) =>
clientTitle ?? ""),
label: bind(focusedClient, "title").as(title =>
title ?? "")
} as Widget.LabelProps)
]
})
]: [])
} as Widget.BoxProps);
}