From 5cf36b005814ee254271648691513d5361096649 Mon Sep 17 00:00:00 2001 From: 2 * r + 2 * t <61896496+soramanew@users.noreply.github.com> Date: Fri, 28 Feb 2025 12:48:42 +1100 Subject: launcher: apps mode --- src/modules/launcher.tsx | 82 ++++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 72 insertions(+), 10 deletions(-) (limited to 'src/modules') diff --git a/src/modules/launcher.tsx b/src/modules/launcher.tsx index 356b6d4..b6af58e 100644 --- a/src/modules/launcher.tsx +++ b/src/modules/launcher.tsx @@ -1,6 +1,11 @@ +import { Apps as AppsService } from "@/services/apps"; +import { getAppCategoryIcon } from "@/utils/icons"; +import { launch } from "@/utils/system"; +import { FlowBox } from "@/utils/widgets"; import PopupWindow from "@/widgets/popupwindow"; import { bind, register, Variable } from "astal"; -import { Astal, Gtk, Widget } from "astal/gtk3"; +import { App, Astal, Gtk, Widget } from "astal/gtk3"; +import type AstalApps from "gi://AstalApps"; type Mode = "apps" | "files" | "math" | "windows"; @@ -9,25 +14,77 @@ interface ModeContent { handleActivate(search: string): void; } +const close = () => App.get_window("launcher")?.hide(); + +const getModeIcon = (mode: Mode) => { + if (mode === "apps") return "apps"; + if (mode === "files") return "folder"; + if (mode === "math") return "calculate"; + if (mode === "windows") return "select_window"; + return "search"; +}; + +const getPrettyMode = (mode: Mode) => { + if (mode === "apps") return "Apps"; + if (mode === "files") return "Files"; + if (mode === "math") return "Math"; + if (mode === "windows") return "Windows"; + return mode; +}; + +const AppResult = ({ app }: { app: AstalApps.Application }) => ( + + + +); + @register() class Apps extends Widget.Box implements ModeContent { + #content: FlowBox; + constructor() { - super({ name: "apps" }); + super({ name: "apps", className: "apps" }); + + this.#content = () as FlowBox; + + this.add( + + {this.#content} + + ); } updateContent(search: string): void { - throw new Error("Method not implemented."); + this.#content.foreach(c => c.destroy()); + AppsService.fuzzy_query(search).forEach(app => this.#content.add()); } - handleActivate(search: string): void { - throw new Error("Method not implemented."); + handleActivate(): void { + this.#content.get_child_at_index(0)?.get_child()?.grab_focus(); + this.#content.get_child_at_index(0)?.get_child()?.activate(); } } @register() class Files extends Widget.Box implements ModeContent { constructor() { - super({ name: "files" }); + super({ name: "files", className: "files" }); } updateContent(search: string): void { @@ -42,7 +99,7 @@ class Files extends Widget.Box implements ModeContent { @register() class Math extends Widget.Box implements ModeContent { constructor() { - super({ name: "math" }); + super({ name: "math", className: "math" }); } updateContent(search: string): void { @@ -57,7 +114,7 @@ class Math extends Widget.Box implements ModeContent { @register() class Windows extends Widget.Box implements ModeContent { constructor() { - super({ name: "windows" }); + super({ name: "windows", className: "windows" }); } updateContent(search: string): void { @@ -83,8 +140,12 @@ const ModeSwitcher = ({ mode, modes }: { mode: Variable; modes: Mode[] }) className={bind(mode).as(c => `mode ${c === m ? "selected" : ""}`)} cursor="pointer" onClicked={() => mode.set(m)} - label={m} - /> + > + + + ))} ); @@ -144,6 +205,7 @@ export default class Launcher extends PopupWindow { this.mode = mode; + content[mode.get()].updateContent(entry.get_text()); this.hook(mode, (_, v: Mode) => { entry.set_text(""); content[v].updateContent(entry.get_text()); -- cgit v1.2.3-freya