nixos-configs/nixosModules/ags/config/widgets/bar/items/current-client.tsx

96 lines
2.7 KiB
TypeScript
Raw Normal View History

import { bind, Variable } from 'astal';
2024-11-21 10:32:18 -05:00
import { Gtk } from 'astal/gtk3';
2024-09-27 16:35:32 -04:00
2024-10-22 13:09:39 -04:00
import AstalApps from 'gi://AstalApps';
import AstalHyprland from 'gi://AstalHyprland';
2024-09-27 16:35:32 -04:00
import Separator from '../../misc/separator';
import { hyprMessage } from '../../../lib';
2024-09-27 16:35:32 -04:00
export default () => {
const applications = AstalApps.Apps.new();
const hyprland = AstalHyprland.get_default();
const visibleIcon = Variable<boolean>(false);
const focusedIcon = Variable<string>('');
const focusedTitle = Variable<string>('');
// FIXME: readd this once client titles are fixed
// let lastFocusedAddress: string | null;
2024-11-21 10:32:18 -05:00
const updateVars = (
client: AstalHyprland.Client | null = hyprland.get_focused_client(),
) => {
// lastFocusedAddress = client ? client.address : null;
2024-11-21 10:32:18 -05:00
const app = applications.fuzzy_query(
client?.class ?? '',
)[0];
const icon = app?.iconName;
if (icon) {
visibleIcon.set(true);
focusedIcon.set(icon);
}
else {
visibleIcon.set(false);
}
focusedTitle.set(client?.title ?? '');
/* const id = client?.connect('notify::title', (c) => {
2024-11-21 10:32:18 -05:00
if (c.get_address() !== lastFocusedAddress) {
c.disconnect(id);
}
console.log(c.get_title());
focusedTitle.set(c.get_title());
});*/
};
updateVars();
// hyprland.connect('notify::focused-client', () => updateVars());
hyprland.connect('event', async() => {
2024-10-16 22:33:15 -04:00
try {
updateVars(JSON.parse(await hyprMessage('j/activewindow')));
2024-10-16 22:33:15 -04:00
}
catch (e) {
console.log(e);
}
});
2024-09-27 16:35:32 -04:00
return (
2024-11-21 10:32:18 -05:00
<revealer
transitionType={Gtk.RevealerTransitionType.SLIDE_RIGHT}
revealChild={bind(focusedTitle).as((title) => title !== '')}
2024-09-27 16:35:32 -04:00
>
2024-11-21 10:35:20 -05:00
<box>
<Separator size={8} />
<box className="bar-item current-window">
<revealer
transitionType={Gtk.RevealerTransitionType.SLIDE_RIGHT}
revealChild={bind(visibleIcon)}
>
<box>
<icon
css="font-size: 32px;"
icon={bind(focusedIcon)}
/>
<Separator size={8} />
</box>
</revealer>
<label
label={bind(focusedTitle)}
truncate
maxWidthChars={45}
2024-11-21 10:35:20 -05:00
/>
</box>
2024-11-21 10:32:18 -05:00
</box>
</revealer>
2024-09-27 16:35:32 -04:00
);
};