summaryrefslogtreecommitdiff
path: root/utils
diff options
context:
space:
mode:
author2 * r + 2 * t <61896496+soramanew@users.noreply.github.com>2025-01-16 16:35:37 +1100
committer2 * r + 2 * t <61896496+soramanew@users.noreply.github.com>2025-01-16 16:35:37 +1100
commit02fd2e97f2c8a53bf2344e6fa8b14769cb15ee38 (patch)
tree5e2a56becf6ba6961995e541ce9688224f704773 /utils
parentpopupwindow: switch to class (diff)
downloadcaelestia-shell-02fd2e97f2c8a53bf2344e6fa8b14769cb15ee38.tar.gz
caelestia-shell-02fd2e97f2c8a53bf2344e6fa8b14769cb15ee38.tar.bz2
caelestia-shell-02fd2e97f2c8a53bf2344e6fa8b14769cb15ee38.zip
refactor: move ts to src
Also move popupwindow to own file
Diffstat (limited to 'utils')
-rw-r--r--utils/icons.ts86
-rw-r--r--utils/mpris.ts16
-rw-r--r--utils/strings.ts1
-rw-r--r--utils/system.ts21
-rw-r--r--utils/widgets.tsx84
5 files changed, 0 insertions, 208 deletions
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<string, number> = {
- 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<string, string> = {
- Firefox: "firefox",
-};
-
-const categoryIcons: Record<string, string> = {
- 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<string>) => {
- if (!text) return null;
-
- const window = (
- <window
- visible={false}
- namespace="caelestia-tooltip"
- keymode={Astal.Keymode.NONE}
- exclusivity={Astal.Exclusivity.IGNORE}
- anchor={Astal.WindowAnchor.TOP | Astal.WindowAnchor.LEFT}
- >
- <label className="tooltip" label={text} />
- </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 = <T,>(
- prop: T | Binding<T | undefined> | 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();
- }
-}