nixos-configs/modules/ags/config/widgets/bar/items/bluetooth.tsx

68 lines
2.3 KiB
TypeScript
Raw Normal View History

2024-12-04 00:18:11 -05:00
import { bind, Variable } from 'astal';
import { App, Gtk } from 'astal/gtk3';
import AstalBluetooth from 'gi://AstalBluetooth';
import PopupWindow from '../../misc/popup-window';
export default () => {
const bluetooth = AstalBluetooth.get_default();
const Hovered = Variable(false);
return (
<button
className="bar-item bluetooth"
cursor="pointer"
onHover={() => Hovered.set(true)}
onHoverLost={() => Hovered.set(false)}
onButtonReleaseEvent={(self) => {
const win = App.get_window('win-bluetooth') as PopupWindow;
win.set_x_pos(
self.get_allocation(),
'right',
);
win.visible = !win.visible;
}}
>
{bind(bluetooth, 'isPowered').as((isPowered) => {
if (!isPowered) {
return (<icon icon="bluetooth-disabled-symbolic" />);
}
else {
return (
<box>
{bind(bluetooth, 'isConnected').as((isConnected) => {
const device = bluetooth.get_devices().find((dev) => dev.connected);
if (!isConnected || !device) {
return (<icon icon="bluetooth-active-symbolic" />);
}
else {
return (
<>
<icon icon={bind(device, 'icon')} />
<revealer
revealChild={bind(Hovered)}
transitionType={Gtk.RevealerTransitionType.SLIDE_LEFT}
>
<label label={bind(device, 'name')} />
</revealer>
</>
);
}
})}
</box>
);
}
})}
</button>
);
};