aboutsummaryrefslogtreecommitdiff
path: root/.config/ags/widget/overview/Workspace.ts
diff options
context:
space:
mode:
authorsrdusr <trevorgray@srdusr.com>2025-08-30 19:22:59 +0200
committersrdusr <trevorgray@srdusr.com>2025-08-30 19:22:59 +0200
commit19120d4f9761c67d99ed1ce3da6084b83f5a49c9 (patch)
treef234cad1bdad88114a63c9702144da487024967a /.config/ags/widget/overview/Workspace.ts
parent5928998af5404ae2be84c6cecc10ebf84bd3f3ed (diff)
downloaddotfiles-19120d4f9761c67d99ed1ce3da6084b83f5a49c9.tar.gz
dotfiles-19120d4f9761c67d99ed1ce3da6084b83f5a49c9.zip
Linux-specific dotfiles
Diffstat (limited to '.config/ags/widget/overview/Workspace.ts')
-rw-r--r--.config/ags/widget/overview/Workspace.ts76
1 files changed, 0 insertions, 76 deletions
diff --git a/.config/ags/widget/overview/Workspace.ts b/.config/ags/widget/overview/Workspace.ts
deleted file mode 100644
index 1b8d60b..0000000
--- a/.config/ags/widget/overview/Workspace.ts
+++ /dev/null
@@ -1,76 +0,0 @@
-import Window from "./Window"
-import Gdk from "gi://Gdk"
-import Gtk from "gi://Gtk?version=3.0"
-import options from "options"
-
-const TARGET = [Gtk.TargetEntry.new("text/plain", Gtk.TargetFlags.SAME_APP, 0)]
-const scale = (size: number) => (options.overview.scale.value / 100) * size
-const hyprland = await Service.import("hyprland")
-
-const dispatch = (args: string) => hyprland.messageAsync(`dispatch ${args}`)
-
-const size = (id: number) => {
- const def = { h: 1080, w: 1920 }
- const ws = hyprland.getWorkspace(id)
- if (!ws)
- return def
-
- const mon = hyprland.getMonitor(ws.monitorID)
- return mon ? { h: mon.height, w: mon.width } : def
-}
-
-export default (id: number) => {
- const fixed = Widget.Fixed()
-
- // TODO: early return if position is unchaged
- async function update() {
- const json = await hyprland.messageAsync("j/clients").catch(() => null)
- if (!json)
- return
-
- fixed.get_children().forEach(ch => ch.destroy())
- const clients = JSON.parse(json) as typeof hyprland.clients
- clients
- .filter(({ workspace }) => workspace.id === id)
- .forEach(c => {
- const x = c.at[0] - (hyprland.getMonitor(c.monitor)?.x || 0)
- const y = c.at[1] - (hyprland.getMonitor(c.monitor)?.y || 0)
- c.mapped && fixed.put(Window(c), scale(x), scale(y))
- })
- fixed.show_all()
- }
-
- return Widget.Box({
- attribute: { id },
- tooltipText: `${id}`,
- class_name: "workspace",
- vpack: "center",
- css: options.overview.scale.bind().as(v => `
- min-width: ${(v / 100) * size(id).w}px;
- min-height: ${(v / 100) * size(id).h}px;
- `),
- setup(box) {
- box.hook(options.overview.scale, update)
- box.hook(hyprland, update, "notify::clients")
- box.hook(hyprland.active.client, update)
- box.hook(hyprland.active.workspace, () => {
- box.toggleClassName("active", hyprland.active.workspace.id === id)
- })
- },
- child: Widget.EventBox({
- expand: true,
- on_primary_click: () => {
- App.closeWindow("overview")
- dispatch(`workspace ${id}`)
- },
- setup: eventbox => {
- eventbox.drag_dest_set(Gtk.DestDefaults.ALL, TARGET, Gdk.DragAction.COPY)
- eventbox.connect("drag-data-received", (_w, _c, _x, _y, data) => {
- const address = new TextDecoder().decode(data.get_data())
- dispatch(`movetoworkspacesilent ${id},address:${address}`)
- })
- },
- child: fixed,
- }),
- })
-}