fix(ags bar workspace): make sure highlight is always in the right place
This commit is contained in:
parent
2af7237e5c
commit
4e53263c7b
1 changed files with 62 additions and 49 deletions
|
@ -1,5 +1,5 @@
|
||||||
import Hyprland from 'resource:///com/github/Aylur/ags/service/hyprland.js';
|
import Hyprland from 'resource:///com/github/Aylur/ags/service/hyprland.js';
|
||||||
import { execAsync } from 'resource:///com/github/Aylur/ags/utils.js';
|
import { execAsync, timeout } from 'resource:///com/github/Aylur/ags/utils.js';
|
||||||
import { Box, Overlay, Revealer } from 'resource:///com/github/Aylur/ags/widget.js';
|
import { Box, Overlay, Revealer } from 'resource:///com/github/Aylur/ags/widget.js';
|
||||||
|
|
||||||
import EventBox from '../misc/cursorbox.js';
|
import EventBox from '../misc/cursorbox.js';
|
||||||
|
@ -28,60 +28,73 @@ const Workspace = ({ i } = {}) =>
|
||||||
}),
|
}),
|
||||||
});
|
});
|
||||||
|
|
||||||
export default () => Overlay({
|
export default () => {
|
||||||
setup: self => {
|
const updateHighlight = () => {
|
||||||
self.set_overlay_pass_through(
|
const currentId = Hyprland.active.workspace.id;
|
||||||
self.get_children()[1],
|
const indicators = highlight.get_parent().get_children()[0].child.children;
|
||||||
true,
|
const currentIndex = indicators.findIndex(w => w._id == currentId);
|
||||||
);
|
|
||||||
},
|
if (currentIndex < 0)
|
||||||
overlays: [Box({
|
return;
|
||||||
|
|
||||||
|
highlight.setStyle(`margin-left: ${16 + currentIndex * 30}px`);
|
||||||
|
};
|
||||||
|
const highlight = Box({
|
||||||
valign: 'center',
|
valign: 'center',
|
||||||
halign: 'start',
|
halign: 'start',
|
||||||
className: 'button active',
|
className: 'button active',
|
||||||
connections: [[Hyprland.active.workspace, self => {
|
connections: [[Hyprland.active.workspace, updateHighlight]],
|
||||||
const currentId = Hyprland.active.workspace.id;
|
});
|
||||||
const indicators = self.get_parent().get_children()[0].child.children;
|
|
||||||
const currentIndex = indicators.findIndex(w => w._id == currentId);
|
|
||||||
|
|
||||||
self.setStyle(`margin-left: ${16 + currentIndex * 30}px`);
|
const widget = Overlay({
|
||||||
}]],
|
setup: self => {
|
||||||
})],
|
self.set_overlay_pass_through(
|
||||||
child: EventBox({
|
self.get_children()[1],
|
||||||
child: Box({
|
true,
|
||||||
className: 'workspaces',
|
);
|
||||||
properties: [
|
},
|
||||||
['workspaces'],
|
overlays: [highlight],
|
||||||
|
child: EventBox({
|
||||||
|
child: Box({
|
||||||
|
className: 'workspaces',
|
||||||
|
properties: [
|
||||||
|
['workspaces'],
|
||||||
|
|
||||||
['refresh', self => {
|
['refresh', self => {
|
||||||
self.children.forEach(rev => rev.reveal_child = false);
|
self.children.forEach(rev => rev.reveal_child = false);
|
||||||
self._workspaces.forEach(ws => {
|
self._workspaces.forEach(ws => {
|
||||||
ws.revealChild = true;
|
ws.revealChild = true;
|
||||||
});
|
});
|
||||||
}],
|
}],
|
||||||
|
|
||||||
['updateWorkspaces', self => {
|
['updateWorkspaces', self => {
|
||||||
Hyprland.workspaces.forEach(ws => {
|
Hyprland.workspaces.forEach(ws => {
|
||||||
const currentWs = self.children.find(ch => ch._id == ws.id);
|
const currentWs = self.children.find(ch => ch._id == ws.id);
|
||||||
if (!currentWs && ws.id > 0)
|
if (!currentWs && ws.id > 0)
|
||||||
self.add(Workspace({ i: ws.id }));
|
self.add(Workspace({ i: ws.id }));
|
||||||
});
|
});
|
||||||
self.show_all();
|
self.show_all();
|
||||||
|
|
||||||
// Make sure the order is correct
|
// Make sure the order is correct
|
||||||
self._workspaces.forEach((workspace, i) => {
|
self._workspaces.forEach((workspace, i) => {
|
||||||
workspace.get_parent().reorder_child(workspace, i);
|
workspace.get_parent().reorder_child(workspace, i);
|
||||||
});
|
});
|
||||||
}],
|
}],
|
||||||
],
|
],
|
||||||
connections: [[Hyprland, self => {
|
connections: [[Hyprland, self => {
|
||||||
self._workspaces = self.children.filter(ch => {
|
self._workspaces = self.children.filter(ch => {
|
||||||
return Hyprland.workspaces.find(ws => ws.id == ch._id);
|
return Hyprland.workspaces.find(ws => ws.id == ch._id);
|
||||||
}).sort((a, b) => a._id - b._id);
|
}).sort((a, b) => a._id - b._id);
|
||||||
|
|
||||||
self._updateWorkspaces(self);
|
self._updateWorkspaces(self);
|
||||||
self._refresh(self);
|
self._refresh(self);
|
||||||
}]],
|
|
||||||
|
// Make sure the highlight doesn't go too far
|
||||||
|
timeout(10, updateHighlight);
|
||||||
|
}]],
|
||||||
|
}),
|
||||||
}),
|
}),
|
||||||
}),
|
});
|
||||||
});
|
|
||||||
|
return widget;
|
||||||
|
};
|
||||||
|
|
Loading…
Reference in a new issue