mirror of
https://github.com/danbulant/dots-hyprland
synced 2026-05-24 12:22:09 +00:00
248 lines
9.5 KiB
QML
248 lines
9.5 KiB
QML
import "./weather"
|
|
import QtQuick
|
|
import QtQuick.Layouts
|
|
import Quickshell
|
|
import Quickshell.Io
|
|
import Quickshell.Wayland
|
|
import Quickshell.Hyprland
|
|
import Quickshell.Services.UPower
|
|
import qs
|
|
import qs.services
|
|
import qs.modules.common
|
|
import qs.modules.common.widgets
|
|
import qs.modules.common.functions
|
|
|
|
Scope {
|
|
id: bar
|
|
|
|
readonly property int osdHideMouseMoveThreshold: 20
|
|
property bool showBarBackground: Config.options.bar.showBackground
|
|
|
|
Variants {
|
|
// For each monitor
|
|
model: {
|
|
const screens = Quickshell.screens;
|
|
const list = Config.options.bar.screenList;
|
|
if (!list || list.length === 0)
|
|
return screens;
|
|
return screens.filter(screen => list.includes(screen.name));
|
|
}
|
|
LazyLoader {
|
|
id: barLoader
|
|
active: GlobalStates.barOpen && !GlobalStates.screenLocked
|
|
required property ShellScreen modelData
|
|
component: PanelWindow { // Bar window
|
|
id: barRoot
|
|
screen: barLoader.modelData
|
|
|
|
property var brightnessMonitor: Brightness.getMonitorForScreen(barLoader.modelData)
|
|
|
|
Timer {
|
|
id: showBarTimer
|
|
interval: (Config?.options.bar.autoHide.showWhenPressingSuper.delay ?? 100)
|
|
repeat: false
|
|
onTriggered: {
|
|
barRoot.superShow = true
|
|
}
|
|
}
|
|
Connections {
|
|
target: GlobalStates
|
|
function onSuperDownChanged() {
|
|
if (!Config?.options.bar.autoHide.showWhenPressingSuper.enable) return;
|
|
if (GlobalStates.superDown) showBarTimer.restart();
|
|
else {
|
|
showBarTimer.stop();
|
|
barRoot.superShow = false;
|
|
}
|
|
}
|
|
}
|
|
property bool superShow: false
|
|
property bool mustShow: hoverRegion.containsMouse || superShow
|
|
exclusionMode: ExclusionMode.Ignore
|
|
exclusiveZone: (Config?.options.bar.autoHide.enable && (!mustShow || !Config?.options.bar.autoHide.pushWindows)) ? 0 :
|
|
Appearance.sizes.baseVerticalBarWidth + (Config.options.bar.cornerStyle === 1 ? Appearance.sizes.hyprlandGapsOut : 0)
|
|
WlrLayershell.namespace: "quickshell:verticalBar"
|
|
// WlrLayershell.layer: WlrLayer.Overlay // TODO enable this when bar can hide when fullscreen
|
|
implicitWidth: Appearance.sizes.verticalBarWidth + Appearance.rounding.screenRounding
|
|
mask: Region {
|
|
item: hoverMaskRegion
|
|
}
|
|
color: "transparent"
|
|
|
|
anchors {
|
|
left: !Config.options.bar.bottom
|
|
right: Config.options.bar.bottom
|
|
top: true
|
|
bottom: true
|
|
}
|
|
|
|
MouseArea {
|
|
id: hoverRegion
|
|
hoverEnabled: true
|
|
anchors.fill: parent
|
|
|
|
Item {
|
|
id: hoverMaskRegion
|
|
anchors {
|
|
fill: barContent
|
|
leftMargin: -1
|
|
rightMargin: -1
|
|
}
|
|
}
|
|
|
|
VerticalBarContent {
|
|
id: barContent
|
|
|
|
implicitWidth: Appearance.sizes.verticalBarWidth
|
|
anchors {
|
|
top: parent.top
|
|
bottom: parent.bottom
|
|
left: parent.left
|
|
right: undefined
|
|
leftMargin: (Config?.options.bar.autoHide.enable && !mustShow) ? -Appearance.sizes.verticalBarWidth : 0
|
|
rightMargin: 0
|
|
}
|
|
Behavior on anchors.leftMargin {
|
|
animation: Appearance.animation.elementMoveFast.numberAnimation.createObject(this)
|
|
}
|
|
Behavior on anchors.rightMargin {
|
|
animation: Appearance.animation.elementMoveFast.numberAnimation.createObject(this)
|
|
}
|
|
|
|
states: State {
|
|
name: "right"
|
|
when: Config.options.bar.bottom
|
|
AnchorChanges {
|
|
target: barContent
|
|
anchors {
|
|
top: parent.top
|
|
bottom: parent.bottom
|
|
left: undefined
|
|
right: parent.right
|
|
}
|
|
}
|
|
PropertyChanges {
|
|
target: barContent
|
|
anchors.topMargin: 0
|
|
anchors.rightMargin: (Config?.options.bar.autoHide.enable && !mustShow) ? -Appearance.sizes.barHeight : 0
|
|
}
|
|
}
|
|
}
|
|
|
|
// Round decorators
|
|
Loader {
|
|
id: roundDecorators
|
|
anchors {
|
|
top: parent.top
|
|
bottom: parent.bottom
|
|
left: barContent.right
|
|
right: undefined
|
|
}
|
|
width: Appearance.rounding.screenRounding
|
|
active: showBarBackground && Config.options.bar.cornerStyle === 0 // Hug
|
|
|
|
states: State {
|
|
name: "right"
|
|
when: Config.options.bar.bottom
|
|
AnchorChanges {
|
|
target: roundDecorators
|
|
anchors {
|
|
top: parent.top
|
|
bottom: parent.bottom
|
|
left: undefined
|
|
right: barContent.left
|
|
}
|
|
}
|
|
}
|
|
|
|
sourceComponent: Item {
|
|
implicitHeight: Appearance.rounding.screenRounding
|
|
RoundCorner {
|
|
id: topCorner
|
|
anchors {
|
|
left: parent.left
|
|
right: parent.right
|
|
top: parent.top
|
|
}
|
|
|
|
implicitSize: Appearance.rounding.screenRounding
|
|
color: showBarBackground ? Appearance.colors.colLayer0 : "transparent"
|
|
|
|
corner: RoundCorner.CornerEnum.TopLeft
|
|
states: State {
|
|
name: "bottom"
|
|
when: Config.options.bar.bottom
|
|
PropertyChanges {
|
|
topCorner.corner: RoundCorner.CornerEnum.TopRight
|
|
}
|
|
}
|
|
}
|
|
RoundCorner {
|
|
id: bottomCorner
|
|
anchors {
|
|
bottom: parent.bottom
|
|
left: !Config.options.bar.bottom ? parent.left : undefined
|
|
right: Config.options.bar.bottom ? parent.right : undefined
|
|
}
|
|
implicitSize: Appearance.rounding.screenRounding
|
|
color: showBarBackground ? Appearance.colors.colLayer0 : "transparent"
|
|
|
|
corner: RoundCorner.CornerEnum.BottomLeft
|
|
states: State {
|
|
name: "bottom"
|
|
when: Config.options.bar.bottom
|
|
PropertyChanges {
|
|
bottomCorner.corner: RoundCorner.CornerEnum.BottomRight
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
IpcHandler {
|
|
target: "bar"
|
|
|
|
function toggle(): void {
|
|
GlobalStates.barOpen = !GlobalStates.barOpen
|
|
}
|
|
|
|
function close(): void {
|
|
GlobalStates.barOpen = false
|
|
}
|
|
|
|
function open(): void {
|
|
GlobalStates.barOpen = true
|
|
}
|
|
}
|
|
|
|
GlobalShortcut {
|
|
name: "barToggle"
|
|
description: "Toggles bar on press"
|
|
|
|
onPressed: {
|
|
GlobalStates.barOpen = !GlobalStates.barOpen;
|
|
}
|
|
}
|
|
|
|
GlobalShortcut {
|
|
name: "barOpen"
|
|
description: "Opens bar on press"
|
|
|
|
onPressed: {
|
|
GlobalStates.barOpen = true;
|
|
}
|
|
}
|
|
|
|
GlobalShortcut {
|
|
name: "barClose"
|
|
description: "Closes bar on press"
|
|
|
|
onPressed: {
|
|
GlobalStates.barOpen = false;
|
|
}
|
|
}
|
|
}
|