From 02fd2e97f2c8a53bf2344e6fa8b14769cb15ee38 Mon Sep 17 00:00:00 2001 From: 2 * r + 2 * t <61896496+soramanew@users.noreply.github.com> Date: Thu, 16 Jan 2025 16:35:37 +1100 Subject: refactor: move ts to src Also move popupwindow to own file --- utils/icons.ts | 86 ------------------------------------------------------- utils/mpris.ts | 16 ----------- utils/strings.ts | 1 - utils/system.ts | 21 -------------- utils/widgets.tsx | 84 ----------------------------------------------------- 5 files changed, 208 deletions(-) delete mode 100644 utils/icons.ts delete mode 100644 utils/mpris.ts delete mode 100644 utils/strings.ts delete mode 100644 utils/system.ts delete mode 100644 utils/widgets.tsx (limited to 'utils') diff --git a/utils/icons.ts b/utils/icons.ts deleted file mode 100644 index f12aee0..0000000 --- a/utils/icons.ts +++ /dev/null @@ -1,86 +0,0 @@ -import { Gio } from "astal"; -import type AstalApps from "gi://AstalApps"; -import { Apps } from "../services/apps"; - -// Code points from https://www.github.com/lukas-w/font-logos -export const osIcons: Record = { - almalinux: 0xf31d, - alpine: 0xf300, - arch: 0xf303, - arcolinux: 0xf346, - centos: 0x304, - debian: 0xf306, - elementary: 0xf309, - endeavouros: 0xf322, - fedora: 0xf30a, - gentoo: 0xf30d, - kali: 0xf327, - linuxmint: 0xf30e, - mageia: 0xf310, - manjaro: 0xf312, - nixos: 0xf313, - opensuse: 0xf314, - suse: 0xf314, - sles: 0xf314, - sles_sap: 0xf314, - pop: 0xf32a, - raspbian: 0xf315, - rhel: 0xf316, - rocky: 0xf32b, - slackware: 0xf318, - ubuntu: 0xf31b, -}; - -export const desktopEntrySubs: Record = { - Firefox: "firefox", -}; - -const categoryIcons: Record = { - WebBrowser: "web", - Printing: "print", - Security: "security", - Network: "chat", - Archiving: "archive", - Compression: "archive", - Development: "code", - IDE: "code", - TextEditor: "edit_note", - Audio: "music_note", - Music: "music_note", - Player: "music_note", - Recorder: "mic", - Game: "sports_esports", - FileTools: "files", - FileManager: "files", - Filesystem: "files", - FileTransfer: "files", - Settings: "settings", - DesktopSettings: "settings", - HardwareSettings: "settings", - TerminalEmulator: "terminal", - ConsoleOnly: "terminal", - Utility: "build", - Monitor: "monitor_heart", - Midi: "graphic_eq", - Mixer: "graphic_eq", - AudioVideoEditing: "video_settings", - AudioVideo: "music_video", - Video: "videocam", - Building: "construction", - Graphics: "photo_library", - "2DGraphics": "photo_library", - RasterGraphics: "photo_library", - TV: "tv", - System: "host", -}; - -export const getAppCategoryIcon = (nameOrApp: string | AstalApps.Application) => { - const categories = - typeof nameOrApp === "string" - ? Gio.DesktopAppInfo.new(`${nameOrApp}.desktop`)?.get_categories()?.split(";") ?? - Apps.fuzzy_query(nameOrApp)[0]?.categories - : nameOrApp.categories; - if (categories) - for (const [key, value] of Object.entries(categoryIcons)) if (categories.includes(key)) return value; - return "terminal"; -}; diff --git a/utils/mpris.ts b/utils/mpris.ts deleted file mode 100644 index e0cc111..0000000 --- a/utils/mpris.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { GLib } from "astal"; -import AstalMpris from "gi://AstalMpris"; - -const hasPlasmaIntegration = GLib.find_program_in_path("plasma-browser-integration-host") !== null; - -export const isRealPlayer = (player?: AstalMpris.Player) => - player !== undefined && - // Player closed - player.identity !== null && - // Remove unecessary native buses from browsers if there's plasma integration - !(hasPlasmaIntegration && player.busName.startsWith("org.mpris.MediaPlayer2.firefox")) && - !(hasPlasmaIntegration && player.busName.startsWith("org.mpris.MediaPlayer2.chromium")) && - // playerctld just copies other buses and we don't need duplicates - !player.busName.startsWith("org.mpris.MediaPlayer2.playerctld") && - // Non-instance mpd bus - !(player.busName.endsWith(".mpd") && !player.busName.endsWith("MediaPlayer2.mpd")); diff --git a/utils/strings.ts b/utils/strings.ts deleted file mode 100644 index e5bc43e..0000000 --- a/utils/strings.ts +++ /dev/null @@ -1 +0,0 @@ -export const ellipsize = (str: string, len = 40) => (str.length > len ? `${str.slice(0, len - 1)}…` : str); diff --git a/utils/system.ts b/utils/system.ts deleted file mode 100644 index 5d77908..0000000 --- a/utils/system.ts +++ /dev/null @@ -1,21 +0,0 @@ -import { execAsync, GLib } from "astal"; -import type AstalApps from "gi://AstalApps"; -import { osIcons } from "./icons"; - -export const launch = (app: AstalApps.Application) => { - execAsync(["uwsm", "app", "--", app.entry]).catch(() => { - app.frequency--; // Decrement frequency cause launch also increments it - app.launch(); - }); - app.frequency++; -}; - -export const osId = GLib.get_os_info("ID") ?? "unknown"; -export const osIdLike = GLib.get_os_info("ID_LIKE"); -export const osIcon = String.fromCodePoint( - (() => { - if (osIcons.hasOwnProperty(osId)) return osIcons[osId]; - if (osIdLike) for (const id of osIdLike.split(" ")) if (osIcons.hasOwnProperty(id)) return osIcons[id]; - return 0xf31a; - })() -); diff --git a/utils/widgets.tsx b/utils/widgets.tsx deleted file mode 100644 index 7b16075..0000000 --- a/utils/widgets.tsx +++ /dev/null @@ -1,84 +0,0 @@ -import { Binding, register } from "astal"; -import { App, Astal, Gdk, Widget } from "astal/gtk3"; -import AstalHyprland from "gi://AstalHyprland"; - -export const setupCustomTooltip = (self: any, text: string | Binding) => { - if (!text) return null; - - const window = ( - - - ) as Widget.Window; - self.set_tooltip_window(window); - - let dirty = true; - let lastX = 0; - self.connect("size-allocate", () => (dirty = true)); - window.connect("size-allocate", () => { - window.marginLeft = lastX + (self.get_allocated_width() - window.get_preferred_width()[1]) / 2; - }); - if (text instanceof Binding) self.hook(text, (_: any, v: string) => !v && window.hide()); - - self.connect("query-tooltip", (_: any, x: number, y: number) => { - if (text instanceof Binding && !text.get()) return false; - if (dirty) { - const { width, height } = self.get_allocation(); - const { x: cx, y: cy } = AstalHyprland.get_default().get_cursor_position(); - window.marginLeft = cx + ((width - window.get_preferred_width()[1]) / 2 - x); - window.marginTop = cy + (height - y); - lastX = cx - x; - dirty = false; - } - return true; - }); - - self.connect("destroy", () => window.destroy()); - - return window; -}; - -export const setupChildClickthrough = (self: any) => - self.connect("size-allocate", () => self.get_window()?.set_child_input_shapes()); - -const extendProp = ( - prop: T | Binding | undefined, - override: (prop: T | undefined) => T | undefined -) => prop && (prop instanceof Binding ? prop.as(override) : override(prop)); - -@register() -export class PopupWindow extends Widget.Window { - constructor(props: Widget.WindowProps) { - super({ - keymode: Astal.Keymode.ON_DEMAND, - exclusivity: Astal.Exclusivity.IGNORE, - ...props, - visible: false, - application: App, - name: props.monitor ? extendProp(props.name, n => (n ? n + props.monitor : undefined)) : props.name, - namespace: extendProp(props.name, n => `caelestia-${n}`), - onKeyPressEvent: (self, event) => { - // Close window on escape - if (event.get_keyval()[1] === Gdk.KEY_Escape) self.hide(); - - return props.onKeyPressEvent?.(self, event); - }, - borderWidth: 20, // To allow shadow, cause if not it gets cut off - }); - } - - popup_at_widget(widget: JSX.Element, event: Gdk.Event) { - const { width, height } = widget.get_allocation(); - const [_, x, y] = event.get_coords(); - const { x: cx, y: cy } = AstalHyprland.get_default().get_cursor_position(); - this.marginLeft = cx + ((width - this.get_preferred_width()[1]) / 2 - x); - this.marginTop = cy + (height - y); - this.show(); - } -} -- cgit v1.2.3-freya