diff --git a/src/app.ts b/src/app.ts index ad743d3..ab91ed3 100644 --- a/src/app.ts +++ b/src/app.ts @@ -23,7 +23,7 @@ import { Clipboard } from "./modules/clipboard"; import { Config } from "./modules/config"; import { Gdk, Gtk } from "ags/gtk4"; import { createRoot, getScope } from "ags"; -import { OSDModes, triggerOSD } from "./window/OSD"; +import { OSDModes, triggerOSD } from "./window/osd"; import { programArgs, programInvocationName } from "system"; import { setConsoleLogDomain } from "console"; import { initPlayer } from "./modules/media"; diff --git a/src/modules/arg-handler.ts b/src/modules/arg-handler.ts index f565bbc..7b7252a 100644 --- a/src/modules/arg-handler.ts +++ b/src/modules/arg-handler.ts @@ -1,16 +1,16 @@ +import { Gtk } from "ags/gtk4"; import { Wireplumber } from "./volume"; import { Windows } from "../windows"; import { restartInstance } from "./reload-handler"; import { timeout } from "ags/time"; import { Runner } from "../runner/Runner"; -import { showWorkspaceNumber } from "../widget/bar/Workspaces"; +import { showWorkspaceNumber } from "../window/bar/widgets/Workspaces"; import { playSystemBell } from "./utils"; import { player, setPlayer } from "./media"; import { generalConfig, Shell } from "../app"; import AstalIO from "gi://AstalIO"; import AstalMpris from "gi://AstalMpris"; -import { Gtk } from "ags/gtk4"; export type RemoteCaller = { diff --git a/src/modules/bluetooth.ts b/src/modules/bluetooth.ts index 881bfdd..b835e8d 100644 --- a/src/modules/bluetooth.ts +++ b/src/modules/bluetooth.ts @@ -32,6 +32,11 @@ export class Bluetooth extends GObject.Object { createRoot((_) => { this.#scope = getScope(); + if(this.astalBl.adapters.length > 0) { + this.#isAvailable = true; + this.notify("is-available"); + } + this.#connections.set( AstalBluetooth.get_default(), AstalBluetooth.get_default().connect("adapter-added", (self, adapter) => { diff --git a/src/window/AppsWindow.tsx b/src/window/apps-window/index.tsx similarity index 94% rename from src/window/AppsWindow.tsx rename to src/window/apps-window/index.tsx index fcddcb0..54a3d6b 100644 --- a/src/window/AppsWindow.tsx +++ b/src/window/apps-window/index.tsx @@ -1,11 +1,11 @@ import { Astal, Gdk, Gtk } from "ags/gtk4"; -import { execApp, getAppIcon, getApps, getAstalApps } from "../modules/apps"; -import { getPopupWindowContainer, PopupWindow } from "../widget/PopupWindow"; +import { execApp, getAppIcon, getApps, getAstalApps } from "../../modules/apps"; +import { getPopupWindowContainer, PopupWindow } from "../../widget/PopupWindow"; import AstalApps from "gi://AstalApps"; import Pango from "gi://Pango?version=1.0"; import { createState, For } from "ags"; -import { escapeUnintendedMarkup } from "../modules/utils"; +import { escapeUnintendedMarkup } from "../../modules/utils"; const ignoredKeys = [ diff --git a/src/window/Bar.tsx b/src/window/bar/index.tsx similarity index 80% rename from src/window/Bar.tsx rename to src/window/bar/index.tsx index 42e1825..b103004 100644 --- a/src/window/Bar.tsx +++ b/src/window/bar/index.tsx @@ -1,11 +1,11 @@ import { Astal, Gtk } from "ags/gtk4"; -import { Tray } from "../widget/bar/Tray"; -import { Workspaces } from "../widget/bar/Workspaces"; -import { FocusedClient } from "../widget/bar/FocusedClient"; -import { Apps } from "../widget/bar/Apps"; -import { Clock } from "../widget/bar/Clock"; -import { Status } from "../widget/bar/Status"; -import { Media } from "../widget/bar/Media"; +import { Tray } from "./widgets/Tray"; +import { Workspaces } from "./widgets/Workspaces"; +import { FocusedClient } from "./widgets/FocusedClient"; +import { Apps } from "./widgets/Apps"; +import { Clock } from "./widgets/Clock"; +import { Status } from "./widgets/Status"; +import { Media } from "./widgets/Media"; export const Bar = (mon: number) => { diff --git a/src/widget/bar/Apps.tsx b/src/window/bar/widgets/Apps.tsx similarity index 84% rename from src/widget/bar/Apps.tsx rename to src/window/bar/widgets/Apps.tsx index 92f1abd..fcf8cea 100644 --- a/src/widget/bar/Apps.tsx +++ b/src/window/bar/widgets/Apps.tsx @@ -1,7 +1,8 @@ import { Gtk } from "ags/gtk4"; -import { Windows } from "../../windows"; +import { Windows } from "../../../windows"; import { createBinding } from "ags"; -import { tr } from "../../i18n/intl"; +import { tr } from "../../../i18n/intl"; + export const Apps = () => diff --git a/src/widget/bar/Clock.tsx b/src/window/bar/widgets/Clock.tsx similarity index 83% rename from src/widget/bar/Clock.tsx rename to src/window/bar/widgets/Clock.tsx index ed1bb97..a90e273 100644 --- a/src/widget/bar/Clock.tsx +++ b/src/window/bar/widgets/Clock.tsx @@ -1,8 +1,8 @@ import { Gtk } from "ags/gtk4"; -import { Windows } from "../../windows"; +import { Windows } from "../../../windows"; import { createBinding } from "ags"; -import { time } from "../../modules/utils"; -import { generalConfig } from "../../app"; +import { time } from "../../../modules/utils"; +import { generalConfig } from "../../../app"; export const Clock = () => diff --git a/src/widget/bar/FocusedClient.tsx b/src/window/bar/widgets/FocusedClient.tsx similarity index 93% rename from src/widget/bar/FocusedClient.tsx rename to src/window/bar/widgets/FocusedClient.tsx index a459b35..877dded 100644 --- a/src/widget/bar/FocusedClient.tsx +++ b/src/window/bar/widgets/FocusedClient.tsx @@ -1,7 +1,7 @@ import { Gtk } from "ags/gtk4"; import { createBinding, With } from "ags"; -import { variableToBoolean } from "../../modules/utils"; -import { getAppIcon, getSymbolicIcon } from "../../modules/apps"; +import { variableToBoolean } from "../../../modules/utils"; +import { getAppIcon, getSymbolicIcon } from "../../../modules/apps"; import Pango from "gi://Pango?version=1.0"; import AstalHyprland from "gi://AstalHyprland"; diff --git a/src/widget/bar/Media.tsx b/src/window/bar/widgets/Media.tsx similarity index 95% rename from src/widget/bar/Media.tsx rename to src/window/bar/widgets/Media.tsx index 0365a89..f3c1f8f 100644 --- a/src/widget/bar/Media.tsx +++ b/src/window/bar/widgets/Media.tsx @@ -1,10 +1,10 @@ import { createBinding, onCleanup, With } from "ags"; import { Gtk } from "ags/gtk4"; -import { Separator } from "../Separator"; -import { Windows } from "../../windows"; -import { Clipboard } from "../../modules/clipboard"; -import { getPlayerIconFromBusName, variableToBoolean } from "../../modules/utils"; -import { accessMediaUrl, player, setPlayer } from "../../modules/media"; +import { Separator } from "../../../widget/Separator"; +import { Windows } from "../../../windows"; +import { Clipboard } from "../../../modules/clipboard"; +import { getPlayerIconFromBusName, variableToBoolean } from "../../../modules/utils"; +import { accessMediaUrl, player, setPlayer } from "../../../modules/media"; import GObject from "ags/gobject"; import AstalMpris from "gi://AstalMpris"; diff --git a/src/widget/bar/Status.tsx b/src/window/bar/widgets/Status.tsx similarity index 94% rename from src/widget/bar/Status.tsx rename to src/window/bar/widgets/Status.tsx index 6633330..554452b 100644 --- a/src/widget/bar/Status.tsx +++ b/src/window/bar/widgets/Status.tsx @@ -1,16 +1,16 @@ import { Gtk } from "ags/gtk4"; -import { Wireplumber } from "../../modules/volume"; -import { Notifications } from "../../modules/notifications"; -import { Windows } from "../../windows"; -import { Recording } from "../../modules/recording"; +import { Wireplumber } from "../../../modules/volume"; +import { Notifications } from "../../../modules/notifications"; +import { Windows } from "../../../windows"; +import { Recording } from "../../../modules/recording"; import { Accessor, createBinding, createComputed, With } from "ags"; -import { time, variableToBoolean } from "../../modules/utils"; +import { variableToBoolean } from "../../../modules/utils"; +import { Bluetooth } from "../../../modules/bluetooth"; import GObject from "ags/gobject"; import AstalBluetooth from "gi://AstalBluetooth"; import AstalNetwork from "gi://AstalNetwork"; import AstalWp from "gi://AstalWp"; -import { Bluetooth } from "../../modules/bluetooth"; export const Status = () => diff --git a/src/widget/bar/Tray.tsx b/src/window/bar/widgets/Tray.tsx similarity index 97% rename from src/widget/bar/Tray.tsx rename to src/window/bar/widgets/Tray.tsx index 7121163..16defae 100644 --- a/src/widget/bar/Tray.tsx +++ b/src/window/bar/widgets/Tray.tsx @@ -1,6 +1,6 @@ import { createBinding, createComputed, For, With } from "ags"; import { Gdk, Gtk } from "ags/gtk4"; -import { variableToBoolean } from "../../modules/utils"; +import { variableToBoolean } from "../../../modules/utils"; import GObject from "gi://GObject?version=2.0"; import AstalTray from "gi://AstalTray" diff --git a/src/widget/bar/Workspaces.tsx b/src/window/bar/widgets/Workspaces.tsx similarity index 97% rename from src/widget/bar/Workspaces.tsx rename to src/window/bar/widgets/Workspaces.tsx index 2f746c7..e69aa74 100644 --- a/src/widget/bar/Workspaces.tsx +++ b/src/window/bar/widgets/Workspaces.tsx @@ -1,9 +1,9 @@ import { Gtk } from "ags/gtk4"; -import { getAppIcon, getSymbolicIcon } from "../../modules/apps"; -import { Separator } from "../Separator"; -import { generalConfig } from "../../app"; +import { getAppIcon, getSymbolicIcon } from "../../../modules/apps"; +import { Separator } from "../../../widget/Separator"; +import { generalConfig } from "../../../app"; import { createBinding, createComputed, createState, For, With } from "ags"; -import { variableToBoolean } from "../../modules/utils"; +import { variableToBoolean } from "../../../modules/utils"; import AstalHyprland from "gi://AstalHyprland"; diff --git a/src/window/CenterWindow.tsx b/src/window/center-window/index.tsx similarity index 85% rename from src/window/CenterWindow.tsx rename to src/window/center-window/index.tsx index e781733..5efde94 100644 --- a/src/window/CenterWindow.tsx +++ b/src/window/center-window/index.tsx @@ -1,12 +1,12 @@ import { Gdk, Gtk } from "ags/gtk4"; -import { Separator } from "../widget/Separator"; -import { PopupWindow } from "../widget/PopupWindow"; -import { BigMedia } from "../widget/center-window/BigMedia"; -import { time, variableToBoolean } from "../modules/utils"; +import { Separator } from "../../widget/Separator"; +import { PopupWindow } from "../../widget/PopupWindow"; +import { BigMedia } from "./widgets/BigMedia"; +import { time, variableToBoolean } from "../../modules/utils"; import { createBinding } from "ags"; +import { player } from "../../modules/media"; import AstalMpris from "gi://AstalMpris"; -import { player } from "../modules/media"; export const CenterWindow = (mon: number) => diff --git a/src/widget/control-center/NotifHistory.tsx b/src/window/control-center/widgets/NotifHistory.tsx similarity index 89% rename from src/widget/control-center/NotifHistory.tsx rename to src/window/control-center/widgets/NotifHistory.tsx index 5f43207..f047851 100644 --- a/src/widget/control-center/NotifHistory.tsx +++ b/src/window/control-center/widgets/NotifHistory.tsx @@ -1,9 +1,10 @@ import { Gtk } from "ags/gtk4"; -import { HistoryNotification, Notifications } from "../../modules/notifications"; -import { NotificationWidget } from "../Notification"; -import { tr } from "../../i18n/intl"; +import { HistoryNotification, Notifications } from "../../../modules/notifications"; +import { NotificationWidget } from "../../../widget/Notification"; +import { tr } from "../../../i18n/intl"; import { createBinding, For } from "ags"; -import AstalNotifd from "gi://AstalNotifd?version=0.1"; + +import AstalNotifd from "gi://AstalNotifd"; export const NotifHistory = () => diff --git a/src/widget/control-center/pages/Page.tsx b/src/window/control-center/widgets/Page.tsx similarity index 99% rename from src/widget/control-center/pages/Page.tsx rename to src/window/control-center/widgets/Page.tsx index 33badca..369235f 100644 --- a/src/widget/control-center/pages/Page.tsx +++ b/src/window/control-center/widgets/Page.tsx @@ -1,5 +1,5 @@ import { Gtk } from "ags/gtk4"; -import { Separator } from "../../Separator"; +import { Separator } from "../../../widget/Separator"; import { Accessor, createRoot } from "ags"; import { transformWidget, variableToBoolean, WidgetNodeType } from "../../../modules/utils"; diff --git a/src/widget/control-center/QuickActions.tsx b/src/window/control-center/widgets/QuickActions.tsx similarity index 95% rename from src/widget/control-center/QuickActions.tsx rename to src/window/control-center/widgets/QuickActions.tsx index 6122943..869316b 100644 --- a/src/widget/control-center/QuickActions.tsx +++ b/src/window/control-center/widgets/QuickActions.tsx @@ -1,7 +1,7 @@ import { Gtk } from "ags/gtk4"; -import { Windows } from "../../windows"; -import { Wallpaper } from "../../modules/wallpaper"; -import { execApp } from "../../modules/apps"; +import { Windows } from "../../../windows"; +import { Wallpaper } from "../../../modules/wallpaper"; +import { execApp } from "../../../modules/apps"; import { Accessor } from "ags"; import { createPoll } from "ags/time"; diff --git a/src/widget/control-center/Sliders.tsx b/src/window/control-center/widgets/Sliders.tsx similarity index 96% rename from src/widget/control-center/Sliders.tsx rename to src/window/control-center/widgets/Sliders.tsx index 9d2341d..06180bb 100644 --- a/src/widget/control-center/Sliders.tsx +++ b/src/window/control-center/widgets/Sliders.tsx @@ -1,13 +1,13 @@ import { Astal, Gtk } from "ags/gtk4"; -import { Wireplumber } from "../../modules/volume"; -import { Pages } from "./Pages"; +import { Wireplumber } from "../../../modules/volume"; +import { Pages } from "./pages"; import { PageSound } from "./pages/Sound"; import { PageMicrophone } from "./pages/Microphone"; import { createBinding, With } from "ags"; -import { Backlights } from "../../modules/backlight"; +import { Backlights } from "../../../modules/backlight"; +import { PageBacklight } from "./pages/Backlight"; import AstalWp from "gi://AstalWp"; -import { PageBacklight } from "./pages/Backlight"; export let slidersPages: Pages|undefined; diff --git a/src/widget/control-center/pages/Backlight.tsx b/src/window/control-center/widgets/pages/Backlight.tsx similarity index 93% rename from src/widget/control-center/pages/Backlight.tsx rename to src/window/control-center/widgets/pages/Backlight.tsx index d083a7f..3135ed0 100644 --- a/src/widget/control-center/pages/Backlight.tsx +++ b/src/window/control-center/widgets/pages/Backlight.tsx @@ -1,10 +1,10 @@ import { Astal, Gtk } from "ags/gtk4"; -import { tr } from "../../../i18n/intl"; -import { Backlights } from "../../../modules/backlight"; -import { Page, PageButton } from "./Page"; +import { tr } from "../../../../i18n/intl"; +import { Backlights } from "../../../../modules/backlight"; +import { Page, PageButton } from "../Page"; import { createBinding, For, With } from "ags"; -import { addSliderMarksFromMinMax } from "../../../modules/utils"; -import { userData } from "../../../app"; +import { addSliderMarksFromMinMax } from "../../../../modules/utils"; +import { userData } from "../../../../app"; export const PageBacklight = new Page({ diff --git a/src/widget/control-center/pages/Bluetooth.tsx b/src/window/control-center/widgets/pages/Bluetooth.tsx similarity index 85% rename from src/widget/control-center/pages/Bluetooth.tsx rename to src/window/control-center/widgets/pages/Bluetooth.tsx index 38def28..af467c9 100644 --- a/src/widget/control-center/pages/Bluetooth.tsx +++ b/src/window/control-center/widgets/pages/Bluetooth.tsx @@ -1,16 +1,17 @@ import { Gtk } from "ags/gtk4"; -import { Page, PageButton } from "./Page"; -import { tr } from "../../../i18n/intl"; -import { Windows } from "../../../windows"; -import { Notifications } from "../../../modules/notifications"; -import { execApp } from "../../../modules/apps"; +import { Page, PageButton } from "../Page"; +import { tr } from "../../../../i18n/intl"; +import { Windows } from "../../../../windows"; +import { Notifications } from "../../../../modules/notifications"; +import { execApp } from "../../../../modules/apps"; import { execAsync } from "ags/process"; import { createBinding, createComputed, For, With } from "ags"; -import { Bluetooth } from "../../../modules/bluetooth"; +import { Bluetooth } from "../../../../modules/bluetooth"; import AstalNotifd from "gi://AstalNotifd"; import AstalBluetooth from "gi://AstalBluetooth"; import Adw from "gi://Adw?version=1"; +import Gio from "gi://Gio?version=2.0"; export const BluetoothPage = new Page({ @@ -122,6 +123,13 @@ export const BluetoothPage = new Page({ }); function DeviceWidget({ device }: { device: AstalBluetooth.Device }): Gtk.Widget { + const pair = async () => { + if(device.paired) return; + + device.pair(); + device.set_trusted(true); + }; + return conn ? "selected" : "")} title={ createBinding(device, "alias").as(alias => alias ?? "Unknown Device")} @@ -132,27 +140,28 @@ function DeviceWidget({ device }: { device: AstalBluetooth.Device }): Gtk.Widget } actionClicked={() => { if(device.connected) return; - let skipConnection: boolean = false; - if(!device.paired) - (async () => device.pair())().catch((err: Error) => { - skipConnection = true; - Notifications.getDefault().sendNotification({ - appName: "bluetooth", - summary: "Device pairing error", - body: `Couldn't connect to ${device.alias ?? device.name}, an error occurred: ${err.message || err.stack}`, - urgency: AstalNotifd.Urgency.NORMAL - }) - }).then(() => device.set_trusted(true)); + pair().then(() => { + device.connect_device((_, res) => { - if(!skipConnection) - (async () => device.connect_device(null))().catch((err: Error) => - Notifications.getDefault().sendNotification({ - appName: "bluetooth", - summary: "Device connection error", - body: `Couldn't connect to ${device.alias ?? device.name}, an error occurred: ${err.message || err.stack}`, - urgency: AstalNotifd.Urgency.NORMAL - }) - ); + // get error + try { device.connect_device_finish(res); } + catch(e: any) { + Notifications.getDefault().sendNotification({ + appName: "bluetooth", + summary: "Connection Error", + body: `An error occurred while attempting to connect to ${ + device.alias ?? device.name}: ${(e as Gio.IOErrorEnum).message}` + }); + } + }); + }).catch((err: Gio.IOErrorEnum) => + Notifications.getDefault().sendNotification({ + appName: "bluetooth", + summary: "Pairing Error", + body: `Couldn't pair with ${device.alias ?? device.name}: ${err.message}`, + urgency: AstalNotifd.Urgency.NORMAL + }) + ); }} endWidget={ diff --git a/src/widget/control-center/pages/Microphone.tsx b/src/window/control-center/widgets/pages/Microphone.tsx similarity index 87% rename from src/widget/control-center/pages/Microphone.tsx rename to src/window/control-center/widgets/pages/Microphone.tsx index 16497f9..455bd21 100644 --- a/src/widget/control-center/pages/Microphone.tsx +++ b/src/window/control-center/widgets/pages/Microphone.tsx @@ -1,9 +1,9 @@ -import { Page, PageButton } from "./Page"; -import { Wireplumber } from "../../../modules/volume"; +import { Page, PageButton } from "../Page"; +import { Wireplumber } from "../../../../modules/volume"; import { Gtk } from "ags/gtk4"; -import { tr } from "../../../i18n/intl"; +import { tr } from "../../../../i18n/intl"; import { createBinding, For } from "ags"; -import { lookupIcon } from "../../../modules/apps"; +import { lookupIcon } from "../../../../modules/apps"; import AstalWp from "gi://AstalWp?version=0.1"; diff --git a/src/widget/control-center/pages/Network.tsx b/src/window/control-center/widgets/pages/Network.tsx similarity index 95% rename from src/widget/control-center/pages/Network.tsx rename to src/window/control-center/widgets/pages/Network.tsx index 62cb4fa..714653e 100644 --- a/src/widget/control-center/pages/Network.tsx +++ b/src/window/control-center/widgets/pages/Network.tsx @@ -1,11 +1,11 @@ import { Gtk } from "ags/gtk4"; -import { Page, PageButton } from "./Page"; -import { Windows } from "../../../windows"; -import { tr } from "../../../i18n/intl"; -import { execApp } from "../../../modules/apps"; -import { Notifications } from "../../../modules/notifications"; -import { AskPopup, AskPopupProps } from "../../AskPopup"; -import { encoder, variableToBoolean } from "../../../modules/utils"; +import { Page, PageButton } from "../Page"; +import { Windows } from "../../../../windows"; +import { tr } from "../../../../i18n/intl"; +import { execApp } from "../../../../modules/apps"; +import { Notifications } from "../../../../modules/notifications"; +import { AskPopup, AskPopupProps } from "../../../../widget/AskPopup"; +import { encoder, variableToBoolean } from "../../../../modules/utils"; import { createBinding, For, With } from "ags"; import GLib from "gi://GLib?version=2.0"; diff --git a/src/widget/control-center/pages/NightLight.tsx b/src/window/control-center/widgets/pages/NightLight.tsx similarity index 89% rename from src/widget/control-center/pages/NightLight.tsx rename to src/window/control-center/widgets/pages/NightLight.tsx index 5a06d7c..d894878 100644 --- a/src/widget/control-center/pages/NightLight.tsx +++ b/src/window/control-center/widgets/pages/NightLight.tsx @@ -1,8 +1,8 @@ -import { Page } from "./Page"; -import { NightLight } from "../../../modules/nightlight"; -import { tr } from "../../../i18n/intl"; +import { Page } from "../Page"; +import { NightLight } from "../../../../modules/nightlight"; +import { tr } from "../../../../i18n/intl"; import { Astal, Gtk } from "ags/gtk4"; -import { addSliderMarksFromMinMax } from "../../../modules/utils"; +import { addSliderMarksFromMinMax } from "../../../../modules/utils"; import { createBinding } from "ags"; export const PageNightLight = new Page({ diff --git a/src/widget/control-center/pages/Sound.tsx b/src/window/control-center/widgets/pages/Sound.tsx similarity index 94% rename from src/widget/control-center/pages/Sound.tsx rename to src/window/control-center/widgets/pages/Sound.tsx index c7dd904..7bba0d7 100644 --- a/src/widget/control-center/pages/Sound.tsx +++ b/src/window/control-center/widgets/pages/Sound.tsx @@ -1,10 +1,10 @@ -import { Page, PageButton } from "./Page"; +import { Page, PageButton } from "../Page"; import { Astal, Gtk } from "ags/gtk4"; -import { getAppIcon, lookupIcon } from "../../../modules/apps"; -import { Wireplumber } from "../../../modules/volume"; -import { tr } from "../../../i18n/intl"; +import { getAppIcon, lookupIcon } from "../../../../modules/apps"; +import { Wireplumber } from "../../../../modules/volume"; +import { tr } from "../../../../i18n/intl"; import { createBinding, For } from "ags"; -import { variableToBoolean } from "../../../modules/utils"; +import { variableToBoolean } from "../../../../modules/utils"; import AstalWp from "gi://AstalWp"; import GObject from "gi://GObject?version=2.0"; diff --git a/src/widget/control-center/Pages.tsx b/src/window/control-center/widgets/pages/index.tsx similarity index 98% rename from src/widget/control-center/Pages.tsx rename to src/window/control-center/widgets/pages/index.tsx index 7bdb7ec..1485366 100644 --- a/src/widget/control-center/Pages.tsx +++ b/src/window/control-center/widgets/pages/index.tsx @@ -1,6 +1,6 @@ import { register } from "ags/gobject"; import { Gtk } from "ags/gtk4"; -import { Page } from "./pages/Page"; +import { Page } from "../Page"; import { timeout } from "ags/time"; import AstalIO from "gi://AstalIO"; diff --git a/src/widget/control-center/tiles/Bluetooth.tsx b/src/window/control-center/widgets/tiles/Bluetooth.tsx similarity index 80% rename from src/widget/control-center/tiles/Bluetooth.tsx rename to src/window/control-center/widgets/tiles/Bluetooth.tsx index 3bc7514..fcad5f6 100644 --- a/src/widget/control-center/tiles/Bluetooth.tsx +++ b/src/window/control-center/widgets/tiles/Bluetooth.tsx @@ -1,15 +1,15 @@ import { Tile } from "./Tile"; -import AstalBluetooth from "gi://AstalBluetooth"; import { BluetoothPage } from "../pages/Bluetooth"; -import { TilesPages } from "../Tiles"; +import { TilesPages } from "../tiles"; import { createBinding, createComputed } from "ags"; -import { Bluetooth } from "../../../modules/bluetooth"; +import { Bluetooth } from "../../../../modules/bluetooth"; + +import AstalBluetooth from "gi://AstalBluetooth"; export const TileBluetooth = () => - { + { if(!connected) return ""; const connectedDevs = AstalBluetooth.get_default().devices.filter(dev => dev.connected); diff --git a/src/widget/control-center/tiles/DoNotDisturb.tsx b/src/window/control-center/widgets/tiles/DoNotDisturb.tsx similarity index 85% rename from src/widget/control-center/tiles/DoNotDisturb.tsx rename to src/window/control-center/widgets/tiles/DoNotDisturb.tsx index 8985d36..e663469 100644 --- a/src/widget/control-center/tiles/DoNotDisturb.tsx +++ b/src/window/control-center/widgets/tiles/DoNotDisturb.tsx @@ -1,6 +1,6 @@ -import { Notifications } from "../../../modules/notifications"; +import { Notifications } from "../../../../modules/notifications"; import { Tile } from "./Tile"; -import { tr } from "../../../i18n/intl"; +import { tr } from "../../../../i18n/intl"; import { createBinding } from "ags"; export const TileDND = () => diff --git a/src/widget/control-center/tiles/Network.tsx b/src/window/control-center/widgets/tiles/Network.tsx similarity index 98% rename from src/widget/control-center/tiles/Network.tsx rename to src/window/control-center/widgets/tiles/Network.tsx index 5dcbd22..2a5c233 100644 --- a/src/widget/control-center/tiles/Network.tsx +++ b/src/window/control-center/widgets/tiles/Network.tsx @@ -1,12 +1,14 @@ import { execAsync } from "ags/process"; import { Tile } from "./Tile"; -import AstalNetwork from "gi://AstalNetwork"; import { PageNetwork } from "../pages/Network"; -import { tr } from "../../../i18n/intl"; -import { TilesPages } from "../Tiles"; +import { tr } from "../../../../i18n/intl"; +import { TilesPages } from "../tiles"; import { Gtk } from "ags/gtk4"; import { createBinding, createComputed, With } from "ags"; +import AstalNetwork from "gi://AstalNetwork"; + + export const TileNetwork = () => { + createBinding(Recording.getDefault(), "recordingTime") + ], (recording, time) => { if(!recording || !Recording.getDefault().startedAt) return tr("control_center.tiles.recording.disabled_desc") || "Start recording"; - const startedAtSeconds = dateTime.to_unix() - Recording.getDefault().startedAt!; - if(startedAtSeconds <= 0) return "00:00"; - - const minutes = Math.floor(startedAtSeconds / 60); - const seconds = Math.floor(startedAtSeconds % 60); - - return `${ minutes < 10 ? `0${minutes}` : minutes }:${ seconds < 10 ? `0${seconds}` : seconds }`; + return time; })} icon={"media-record-symbolic"} visible={isInstalled("wf-recorder")} diff --git a/src/widget/control-center/tiles/Tile.tsx b/src/window/control-center/widgets/tiles/Tile.tsx similarity index 97% rename from src/widget/control-center/tiles/Tile.tsx rename to src/window/control-center/widgets/tiles/Tile.tsx index 11c85dc..86ba3e4 100644 --- a/src/widget/control-center/tiles/Tile.tsx +++ b/src/window/control-center/widgets/tiles/Tile.tsx @@ -1,15 +1,13 @@ import { Gtk } from "ags/gtk4"; import { createBinding } from "ags"; -import { omitObjectKeys, variableToBoolean } from "../../../modules/utils"; +import { omitObjectKeys, variableToBoolean } from "../../../../modules/utils"; import { property, register, signal } from "ags/gobject"; + import Pango from "gi://Pango?version=1.0"; -export { Tile }; - - @register({ GTypeName: "Tile" }) -class Tile extends Gtk.Box { +export class Tile extends Gtk.Box { @signal(Boolean) toggled(_state: boolean) {} @signal() enabled() {} @signal() disabled() {} diff --git a/src/widget/control-center/Tiles.tsx b/src/window/control-center/widgets/tiles/index.tsx similarity index 73% rename from src/widget/control-center/Tiles.tsx rename to src/window/control-center/widgets/tiles/index.tsx index 2a6f43c..8744a34 100644 --- a/src/widget/control-center/Tiles.tsx +++ b/src/window/control-center/widgets/tiles/index.tsx @@ -1,10 +1,10 @@ import { Gtk } from "ags/gtk4"; -import { TileNetwork } from "./tiles/Network"; -import { TileBluetooth } from "./tiles/Bluetooth"; -import { TileDND } from "./tiles/DoNotDisturb"; -import { TileRecording } from "./tiles/Recording"; -import { TileNightLight } from "./tiles/NightLight"; -import { Pages } from "./Pages"; +import { TileNetwork } from "./Network"; +import { TileBluetooth } from "./Bluetooth"; +import { TileDND } from "./DoNotDisturb"; +import { TileRecording } from "./Recording"; +import { TileNightLight } from "./NightLight"; +import { Pages } from "../pages"; export let TilesPages: Pages|undefined; diff --git a/src/window/FloatingNotifications.tsx b/src/window/floating-notifications/index.tsx similarity index 95% rename from src/window/FloatingNotifications.tsx rename to src/window/floating-notifications/index.tsx index 43e511e..5729ca1 100644 --- a/src/window/FloatingNotifications.tsx +++ b/src/window/floating-notifications/index.tsx @@ -1,12 +1,13 @@ import { Astal, Gtk } from "ags/gtk4"; import { createBinding, createComputed, For } from "ags"; -import { Notifications } from "../modules/notifications"; -import { NotificationWidget } from "../widget/Notification"; -import { generalConfig } from "../app"; +import { Notifications } from "../../modules/notifications"; +import { NotificationWidget } from "../../widget/Notification"; +import { generalConfig } from "../../app"; import AstalNotifd from "gi://AstalNotifd"; import Adw from "gi://Adw?version=1"; + const size = 450; export const FloatingNotifications = (mon: number) => diff --git a/src/window/LogoutMenu.tsx b/src/window/logout-menu/index.tsx similarity index 95% rename from src/window/LogoutMenu.tsx rename to src/window/logout-menu/index.tsx index 9153bfb..bee0a92 100644 --- a/src/window/LogoutMenu.tsx +++ b/src/window/logout-menu/index.tsx @@ -1,10 +1,10 @@ import { Astal, Gdk, Gtk } from "ags/gtk4"; import { execAsync } from "ags/process"; -import { generalConfig } from "../app"; -import { AskPopup } from "../widget/AskPopup"; -import { Notifications } from "../modules/notifications"; -import { NightLight } from "../modules/nightlight"; -import { time } from "../modules/utils"; +import { generalConfig } from "../../app"; +import { AskPopup } from "../../widget/AskPopup"; +import { Notifications } from "../../modules/notifications"; +import { NightLight } from "../../modules/nightlight"; +import { time } from "../../modules/utils"; import GObject from "ags/gobject"; import AstalNotifd from "gi://AstalNotifd"; diff --git a/src/window/OSD.tsx b/src/window/osd/index.tsx similarity index 94% rename from src/window/OSD.tsx rename to src/window/osd/index.tsx index 8264482..9c8d72b 100644 --- a/src/window/OSD.tsx +++ b/src/window/osd/index.tsx @@ -1,9 +1,9 @@ import { Astal, Gtk } from "ags/gtk4"; import { Accessor, createBinding, createState, With } from "ags"; -import { Wireplumber } from "../modules/volume"; -import { Windows } from "../windows"; -import { Backlights } from "../modules/backlight"; -import { construct, variableToBoolean } from "../modules/utils"; +import { Wireplumber } from "../../modules/volume"; +import { Windows } from "../../windows"; +import { Backlights } from "../../modules/backlight"; +import { construct, variableToBoolean } from "../../modules/utils"; import GObject, { ParamSpec, property, register } from "ags/gobject"; import Pango from "gi://Pango?version=1.0"; diff --git a/src/windows.ts b/src/windows.ts index 47e6d11..3eb3fbe 100644 --- a/src/windows.ts +++ b/src/windows.ts @@ -1,21 +1,19 @@ import { Astal } from "ags/gtk4"; -import { Bar } from "./window/Bar"; -import { variableToBoolean } from "./modules/utils"; -import { OSD } from "./window/OSD"; -import { ControlCenter } from "./window/ControlCenter"; -import { FloatingNotifications } from "./window/FloatingNotifications"; -import { CenterWindow } from "./window/CenterWindow"; -import { LogoutMenu } from "./window/LogoutMenu"; -import { AppsWindow } from "./window/AppsWindow"; -import { createRoot, getScope, onCleanup } from "ags"; import { Shell } from "./app"; import GObject, { getter, register, signal } from "ags/gobject"; +import { variableToBoolean } from "./modules/utils"; +import { createRoot, getScope, onCleanup } from "ags"; +import { Bar } from "./window/bar"; +import { OSD } from "./window/osd"; +import { ControlCenter } from "./window/control-center"; +import { FloatingNotifications } from "./window/floating-notifications"; +import { CenterWindow } from "./window/center-window"; +import { LogoutMenu } from "./window/logout-menu"; +import { AppsWindow } from "./window/apps-window"; import AstalHyprland from "gi://AstalHyprland"; -export { Windows }; - export type WindowInstance = { instance?: Astal.Window, connections: Array }; export type WindowData = { create: () => (Astal.Window | Array); @@ -32,7 +30,7 @@ export type WindowData = { * monitor, or all available monitors! */ @register({ GTypeName: "Windows" }) -class Windows extends GObject.Object { +export class Windows extends GObject.Object { private static instance: (Windows | null); declare $signals: GObject.Object.SignalSignatures & {