chore: lots of improvements, exec apps with uwsm if in usage

also, started using `AstalWp.Endpoint.description` instead of the `name` property when showing device names, thanks to @NotMephisto in #9
This commit is contained in:
retrozinndev
2025-06-15 20:29:16 -03:00
parent 1e0a158b39
commit a669e1acc3
21 changed files with 119 additions and 100 deletions
+2 -2
View File
@@ -3,10 +3,10 @@ import { Gtk, Widget } from "astal/gtk3";
import AstalBluetooth from "gi://AstalBluetooth";
import { Page, PageButton } from "./Page";
import { tr } from "../../../i18n/intl";
import AstalHyprland from "gi://AstalHyprland";
import { Windows } from "../../../windows";
import { Notifications } from "../../../scripts/notifications";
import AstalNotifd from "gi://AstalNotifd";
import { execApp } from "../../../scripts/apps";
export const BluetoothPage: (() => Page) = () => new Page({
id: "bluetooth",
@@ -42,7 +42,7 @@ export const BluetoothPage: (() => Page) = () => new Page({
title: tr("control_center.pages.more_settings"),
onClick: () => {
Windows.close("control-center");
AstalHyprland.get_default().dispatch("exec", "[float; animation slide right] overskride");
execApp("overskride", "[float; animation slide right]");
}
}],
spacing: 2,
@@ -21,7 +21,7 @@ export function PageMicrophone(): Page {
className: bind(microphone, "isDefault").as(isDefault => isDefault ? "default" : ""),
icon: bind(microphone, "icon").as(icon =>
Astal.Icon.lookup_icon(icon) ? icon : "audio-input-microphone-symbolic"),
title: bind(microphone, "name").as(name => name ?? "Microphone"),
title: bind(microphone, "description").as(desc => desc ?? "Microphone"),
onClick: () => microphone.set_is_default(true),
endWidget: new Widget.Icon({
icon: "object-select-symbolic",
+6 -6
View File
@@ -4,8 +4,8 @@ import AstalNetwork from "gi://AstalNetwork";
import { bind } from "astal";
import NM from "gi://NM";
import { Windows } from "../../../windows";
import AstalHyprland from "gi://AstalHyprland";
import { tr } from "../../../i18n/intl";
import { execApp } from "../../../scripts/apps";
export const PageNetwork: (() => Page) = () => new Page({
id: "network",
@@ -27,7 +27,7 @@ export const PageNetwork: (() => Page) = () => new Page({
title: tr("control_center.pages.more_settings"),
onClick: () => {
Windows.close("control-center");
AstalHyprland.get_default().dispatch("exec", "[animationstyle gnomed] nm-connection-editor");
execApp("nm-connection-editor", "[animationstyle gnomed]");
}
}],
children: [
@@ -60,10 +60,10 @@ export const PageNetwork: (() => Page) = () => new Page({
} as Widget.IconProps),
onClick: () => {
Windows.close("control-center");
AstalHyprland.get_default().dispatch("exec",
`[animationstyle gnomed; float] nm-connection-editor --edit ${
dev.activeConnection?.connection.get_uuid()
}`);
execApp(
`nm-connection-editor --edit ${dev.activeConnection?.connection.get_uuid()}`,
"[animationstyle gnomed; float]"
);
}
} as Widget.ButtonProps)
]
@@ -25,7 +25,7 @@ export const PageNightLight: (() => Page) = () => new Page({
value: bind(NightLight.getDefault(), "temperature"),
tooltipText: bind(NightLight.getDefault(), "temperature").as((temp) => `${temp}K`),
min: 1000,
max: bind(NightLight.getDefault(), "maxTemperature"),
max: NightLight.getDefault().maxTemperature,
onDragged: (slider) =>
NightLight.getDefault().temperature = (Math.floor(slider.value)),
} as Widget.SliderProps),
@@ -42,7 +42,7 @@ export const PageNightLight: (() => Page) = () => new Page({
addSliderMarksFromMinMax(slider, 5, "{}%");
},
value: bind(NightLight.getDefault(), "gamma"),
max: bind(NightLight.getDefault(), "maxGamma"),
max: NightLight.getDefault().maxGamma,
tooltipText: bind(NightLight.getDefault(), "gamma").as((gamma) => `${gamma}%`),
onDragged: (slider) =>
NightLight.getDefault().gamma = (Math.floor(slider.value)),
+14 -4
View File
@@ -172,7 +172,7 @@ class Page extends Widget.Box {
}
}
export function PageButton(props: {
export function PageButton({ onDestroy, ...props }: {
className?: string | Binding<string>;
icon?: string | Binding<string>;
title: string | Binding<string>;
@@ -185,7 +185,7 @@ export function PageButton(props: {
tooltipMarkup?: string | Binding<string>;
}): Gtk.Widget {
return new Widget.Box({
onDestroy: props.onDestroy,
onDestroy,
children: [
new Widget.Button({
onClick: props.onClick,
@@ -202,17 +202,26 @@ export function PageButton(props: {
className: "icon",
icon: props.icon,
visible: props.icon,
hexpand: false,
css: "font-size: 20px; margin-right: 6px;"
} as Widget.IconProps),
new Widget.Box({
orientation: Gtk.Orientation.VERTICAL,
expand: true,
hexpand: true,
vexpand: false,
children: [
new Widget.Label({
className: "title",
xalign: 0,
// truncating is not working, so I had to do this
label: (props.title instanceof Binding) ?
props.title.as((title) =>
`${title.substring(0, 35)}${
title.length > 35 ? '…' : ""}`)
: `${props.title.substring(0, 35)}${
props.title.length > 35 ? '…' : ""}`,
tooltipText: props.title,
truncate: true,
label: props.title
} as Widget.LabelProps),
new Widget.Label({
className: "description",
@@ -230,6 +239,7 @@ export function PageButton(props: {
visible: (props.endWidget instanceof Binding) ?
props.endWidget.as(Boolean)
: props.endWidget,
halign: Gtk.Align.END,
child: props.endWidget
} as Widget.BoxProps)
]
+1 -1
View File
@@ -27,7 +27,7 @@ export function PageSound(): Page {
className: bind(speaker, "isDefault").as(isDefault => isDefault ? "default" : ""),
icon: bind(speaker, "icon").as(icon =>
Astal.Icon.lookup_icon(icon)? icon : "audio-card-symbolic"),
title: speaker.name ?? "Speaker",
title: bind(speaker, "description").as(desc => desc ?? "Speaker"),
onClick: () => speaker.set_is_default(true),
endWidget: new Widget.Icon({
icon: "object-select-symbolic",