summaryrefslogtreecommitdiff
path: root/widget/bar
diff options
context:
space:
mode:
authorLibravatar Mora Unie Youer <[email protected]>2025-03-02 22:42:23 +0300
committerLibravatar Mora Unie Youer <[email protected]>2025-03-02 22:42:23 +0300
commit48074e7168bbb8d833b2d7a30175b6385cdc8745 (patch)
tree830f0901e24f88e70657b712f15ade9d629aa6ce /widget/bar
parentfix: clamp audio slider volume (diff)
downloadags-config-48074e7168bbb8d833b2d7a30175b6385cdc8745.tar.gz
ags-config-48074e7168bbb8d833b2d7a30175b6385cdc8745.tar.bz2
ags-config-48074e7168bbb8d833b2d7a30175b6385cdc8745.tar.lz
ags-config-48074e7168bbb8d833b2d7a30175b6385cdc8745.tar.xz
ags-config-48074e7168bbb8d833b2d7a30175b6385cdc8745.tar.zst
ags-config-48074e7168bbb8d833b2d7a30175b6385cdc8745.zip
fix: CSS transition on workspace buttons
Diffstat (limited to 'widget/bar')
-rw-r--r--widget/bar/Bar.tsx27
1 files changed, 18 insertions, 9 deletions
diff --git a/widget/bar/Bar.tsx b/widget/bar/Bar.tsx
index aa96db1..41dc0e2 100644
--- a/widget/bar/Bar.tsx
+++ b/widget/bar/Bar.tsx
@@ -31,15 +31,25 @@ function focusWorkspace(idx: number) {
type WorkspaceButtonArguments = {
idx: number,
- isActive: boolean,
- isFocused: boolean,
+ workspaces: Variable<NiriWorkspace[]>,
};
function WorkspaceButton(args: WorkspaceButtonArguments) {
- const classes: string[] = [];
- args.isActive && classes.push("active");
- args.isFocused && classes.push("focused");
- return <button cssClasses={classes} onClicked={() => focusWorkspace(args.idx)} />
+ const classes: Variable<string[]> = Variable.derive([args.workspaces], workspaces => {
+ const classes: string[] = [];
+ const workspace = workspaces.find(v => v.idx == args.idx);
+
+ workspace !== undefined && classes.push("used");
+ workspace?.is_active && classes.push("active");
+ workspace?.is_focused && classes.push("focused");
+
+ return classes;
+ });
+
+ // TODO: this solution make me to have 9 workspace buttons no matter what
+ // I'd like to dynamically hide/show some of them, but I guess this will cause rerenders
+ // Maybe I just need to transform them in CSS
+ return <button cssClasses={classes()} onClicked={() => focusWorkspace(args.idx)} />
}
type WorkspacesArguments = {
@@ -52,10 +62,9 @@ function Workspaces(args: WorkspacesArguments) {
const workspaces: Variable<NiriWorkspace[]> = Variable(getWorkspacesByOutput(args.connector))
.poll(1000, () => getWorkspacesByOutput(args.connector));
- // BUG: on workspace change there's no CSS transition
- // I guess it is due to rerender here
+ const workspaceIndices = [...Array(10).keys()];
return <box cssClasses={["Workspaces"]}>
- {workspaces(v => v.map(workspace => <WorkspaceButton idx={workspace.idx} isActive={workspace.is_active} isFocused={workspace.is_focused} />))}
+ {workspaceIndices.map(i => <WorkspaceButton idx={i + 1} workspaces={workspaces} />)}
</box>
}