From bc2b851573550a8b78f62e838393d00a22ad07ed Mon Sep 17 00:00:00 2001 From: retrozinndev Date: Mon, 25 Aug 2025 21:30:51 -0300 Subject: [PATCH] :wrench: chore(widget/bar/workspaces): add new feature to hide if there's only a single workspace available --- src/widget/bar/Media.tsx | 87 +++++++++++++---------------------- src/widget/bar/Workspaces.tsx | 59 ++++++++++-------------- 2 files changed, 56 insertions(+), 90 deletions(-) diff --git a/src/widget/bar/Media.tsx b/src/widget/bar/Media.tsx index 6cc4936..403ecc4 100644 --- a/src/widget/bar/Media.tsx +++ b/src/widget/bar/Media.tsx @@ -20,68 +20,45 @@ export const Media = () => { : obj.disconnect(id) )); - return pl.available)} - $={(self) => { - const gestureClick = Gtk.GestureClick.new(), - controllerMotion = Gtk.EventControllerMotion.new(), - controllerScroll = Gtk.EventControllerScroll.new( - Gtk.EventControllerScrollFlags.VERTICAL - ); + return pl.available)}> + { + self.set_flags(Gtk.EventControllerScrollFlags.VERTICAL) + }} onScroll={(_, __, dy) => { + if(AstalMpris.get_default().players.length === 1 && + player.get()?.busName === AstalMpris.get_default().players[0].busName) + return true; - self.add_controller(gestureClick); - self.add_controller(controllerMotion); - self.add_controller(controllerScroll); + const players = AstalMpris.get_default().players; - connections.set(gestureClick, gestureClick.connect("released", () => - Windows.getDefault().toggle("center-window"))); + for(let i = 0; i < players.length; i++) { + const pl = players[i]; - connections.set(controllerScroll, - controllerScroll.connect("scroll", (_, _dx, dy) => { - if(AstalMpris.get_default().players.length === 1 && - player.get()?.busName === AstalMpris.get_default().players[0].busName) - return true; + if(pl.busName !== player.get().busName) + continue; - const players = AstalMpris.get_default().players; - - for(let i = 0; i < players.length; i++) { - const pl = players[i]; - - if(pl.busName !== player.get().busName) - continue; - - if(dy > 0 && players[i-1]) { - setPlayer(players[i-1]); - break; - } - - if(dy < 0 && players[i+1]) { - setPlayer(players[i+1]); - break; - } + if(dy > 0 && players[i-1]) { + setPlayer(players[i-1]); + break; } - return true; - }) - ); - - connections.set(controllerMotion, [ - controllerMotion.connect("enter", () => { - const revealer = self.get_last_child() as Gtk.Revealer; - revealer.set_reveal_child(true); - }), - controllerMotion.connect("leave", () => { - const revealer = self.get_last_child() as Gtk.Revealer; - revealer.set_reveal_child(false); - }) - ]); - - connections.set(self, self.connect("destroy", () => - connections.forEach((ids, obj) => Array.isArray(ids) ? - ids.forEach(id => obj.disconnect(id)) - : obj.disconnect(ids)) - )); - }}> + if(dy < 0 && players[i+1]) { + setPlayer(players[i+1]); + break; + } + } + return true; + }} + /> + Windows.getDefault().toggle("center-window")} /> + { + const revealer = self.get_widget()!.get_last_child() as Gtk.Revealer; + revealer.set_reveal_child(true); + }} onLeave={(self) => { + const revealer = self.get_widget()!.get_last_child() as Gtk.Revealer; + revealer.set_reveal_child(false); + }} + /> pl.available)}> pl.available)}> {(available: boolean) => available && diff --git a/src/widget/bar/Workspaces.tsx b/src/widget/bar/Workspaces.tsx index 1107fac..2f746c7 100644 --- a/src/widget/bar/Workspaces.tsx +++ b/src/widget/bar/Workspaces.tsx @@ -1,12 +1,11 @@ import { Gtk } from "ags/gtk4"; -import AstalHyprland from "gi://AstalHyprland"; import { getAppIcon, getSymbolicIcon } from "../../modules/apps"; import { Separator } from "../Separator"; import { generalConfig } from "../../app"; import { createBinding, createComputed, createState, For, With } from "ags"; import { variableToBoolean } from "../../modules/utils"; -import GObject from "ags/gobject"; +import AstalHyprland from "gi://AstalHyprland"; const [showNumbers, setShowNumbers] = createState(false); @@ -19,10 +18,15 @@ export const Workspaces = () => { defaultWorkspaces = workspaces.as(wss => wss.filter(ws => ws.id > 0).sort((a, b) => a.id - b.id)), specialWorkspaces = workspaces.as(wss => - wss.filter(ws => ws.id < 0).sort((a, b) => a.id - b.id)); + wss.filter(ws => ws.id < 0).sort((a, b) => a.id - b.id)), + focusedWorkspace = createBinding(AstalHyprland.get_default(), "focusedWorkspace"); - return + return wss.length <= 1), + generalConfig.bindProperty("workspaces.hide_if_single", "boolean") + ], (hideable, enabled) => enabled && hideable ? false : true + )}> {(ws: AstalHyprland.Workspace) => @@ -54,34 +58,19 @@ export const Workspaces = () => { margin={12} spacing={8} visible={variableToBoolean(specialWorkspaces)} /> - { - const conns: Map|number> = new Map(); - const controllerScroll = Gtk.EventControllerScroll.new( - Gtk.EventControllerScrollFlags.VERTICAL - ), controllerMotion = Gtk.EventControllerMotion.new(); - - self.add_controller(controllerScroll); - self.add_controller(controllerMotion); - - conns.set(controllerScroll, controllerScroll.connect("scroll", (_, _dx, dy) => { + + self.set_flags(Gtk.EventControllerScrollFlags.VERTICAL)} + onScroll={(_, __, dy) => { dy > 0 ? AstalHyprland.get_default().dispatch("workspace", "e-1") : AstalHyprland.get_default().dispatch("workspace", "e+1"); return true; - })); - - conns.set(controllerMotion, [ - controllerMotion.connect("enter", () => setShowNumbers(true)), - controllerMotion.connect("leave", () => setShowNumbers(false)) - ]); - - conns.set(self, self.connect("destroy", () => conns.forEach((ids, obj) => - Array.isArray(ids) ? - ids.forEach(id => obj.disconnect(id)) - : obj.disconnect(ids) - ))); - }}> + }} + /> + setShowNumbers(true)} + onLeave={() => setShowNumbers(false)} + /> {(ws: AstalHyprland.Workspace, i) => { const showId = createComputed([ @@ -122,20 +111,20 @@ export const Workspaces = () => { `${lastClient.get_class()}: ` : "" } ${lastClient.title}` : "" }` - )} onClicked={() => ws.focus()}> - + )} onClicked={() => focusedWorkspace.get()?.id !== ws.id && ws.focus()}> {(lastClient: AstalHyprland.Client) => fws.id !== ws.id ? - Gtk.RevealerTransitionType.SLIDE_LEFT - : Gtk.RevealerTransitionType.SLIDE_RIGHT)}> - + transitionType={focusedWorkspace.as( + fws => fws.id !== ws.id ? + Gtk.RevealerTransitionType.SLIDE_LEFT + : Gtk.RevealerTransitionType.SLIDE_RIGHT + )}> + class={"id"} hexpand + /> {lastClient &&