A machine without a GPU, like most VMs, renders through llvmpipe on the CPU, where every animated frame and every translucent window costs. In a VM, opening and closing a terminal took ~5s of CPU; a panel ~3.4s. omarchy toggle animations (also under Toggle > Animations) places a Hyprland flag that turns off animations, blur and shadows and makes windows opaque. The shell follows Hyprland's animations:enabled, rereading it on every config reload: its one-shot animations run for Style.duration(ms), which is then 0, and its spinners, pulses and title marquee hold still. A new install in a VM starts with the flag in place. Measured in the ISO test VM (llvmpipe), CPU per interaction: terminal open+close 5000ms -> 481ms, workspace switch 1670ms -> 409ms, audio panel 3446ms -> 796ms, volume OSD 2324ms -> 584ms, menu 2028ms -> 1241ms. Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
65 lines
1.8 KiB
QML
65 lines
1.8 KiB
QML
import QtQuick
|
|
import Quickshell
|
|
import Quickshell.Wayland
|
|
import qs.Commons
|
|
import qs.Ui
|
|
|
|
BarWidget {
|
|
id: root
|
|
moduleName: "omarchy.active-window"
|
|
|
|
|
|
readonly property var toplevel: ToplevelManager.activeToplevel
|
|
readonly property string title: toplevel ? (toplevel.title || toplevel.appId || "") : ""
|
|
readonly property int maxLabelWidth: Number(setting("maxWidth", 280))
|
|
|
|
visible: title !== "" && !vertical
|
|
implicitWidth: visible ? Math.min(maxLabelWidth, labelText.implicitWidth) + Style.spacing.controlPaddingX * 2 : 0
|
|
implicitHeight: barSize
|
|
|
|
Behavior on implicitWidth {
|
|
NumberAnimation { duration: Style.duration(180); easing.type: Easing.OutCubic }
|
|
}
|
|
|
|
Item {
|
|
anchors.fill: parent
|
|
anchors.leftMargin: Style.space(8)
|
|
anchors.rightMargin: Style.space(8)
|
|
clip: true
|
|
|
|
Text {
|
|
id: labelText
|
|
textFormat: Text.PlainText
|
|
anchors.verticalCenter: parent.verticalCenter
|
|
anchors.left: parent.left
|
|
width: parent.width
|
|
text: root.title
|
|
color: root.bar ? root.bar.barForeground : Color.foreground
|
|
font.family: root.bar ? root.bar.fontFamily : Style.font.family
|
|
font.pixelSize: Style.font.body
|
|
elide: Text.ElideRight
|
|
opacity: 0.85
|
|
}
|
|
}
|
|
|
|
MouseArea {
|
|
anchors.fill: parent
|
|
hoverEnabled: true
|
|
acceptedButtons: Qt.LeftButton | Qt.MiddleButton | Qt.RightButton
|
|
cursorShape: Qt.PointingHandCursor
|
|
|
|
onClicked: function(mouse) {
|
|
if (!root.toplevel) return
|
|
if (mouse.button === Qt.MiddleButton) {
|
|
root.toplevel.close()
|
|
} else if (mouse.button === Qt.RightButton) {
|
|
root.toplevel.close()
|
|
} else {
|
|
root.toplevel.activate()
|
|
}
|
|
}
|
|
onEntered: if (root.bar) root.bar.showTooltip(root, root.title)
|
|
onExited: if (root.bar) root.bar.hideTooltip(root)
|
|
}
|
|
}
|