osd: separate, make keybinds prefer qs over ags

This commit is contained in:
end-4
2025-04-21 18:15:01 +02:00
parent 0faf9287ba
commit 0728557b04
7 changed files with 185 additions and 59 deletions
+14 -11
View File
@@ -23,14 +23,18 @@ Scope {
command: ["qs", "ipc", "call", "sidebarLeft", "open"]
}
Process {
id: hideOsd
command: ["qs", "ipc", "call", "osd", "hide"]
id: hideOsdBrightness
command: ["qs", "ipc", "call", "osdBrightness", "hide"]
}
Process {
id: hideOsdVolume
command: ["qs", "ipc", "call", "osdVolume", "hide"]
}
Variants {
Variants { // For each monitor
model: Quickshell.screens
PanelWindow {
PanelWindow { // Bar window
id: barRoot
property var modelData
@@ -49,15 +53,15 @@ Scope {
right: true
}
Rectangle {
Rectangle { // Bar background
id: barContent
anchors.right: parent.right
anchors.left: parent.left
anchors.top: parent.top
color: Appearance.colors.colLayer0
height: barHeight
// Left section
RowLayout {
RowLayout { // Left section
id: leftSection
anchors.left: parent.left
implicitHeight: barHeight
@@ -67,8 +71,7 @@ Scope {
}
}
// Middle section
RowLayout {
RowLayout { // Middle section
id: middleSection
anchors.centerIn: parent
spacing: 8
@@ -210,7 +213,7 @@ Scope {
const dx = mouse.x - barLeftSideMouseArea.lastScrollX;
const dy = mouse.y - barLeftSideMouseArea.lastScrollY;
if (Math.sqrt(dx*dx + dy*dy) > osdHideMouseMoveThreshold) {
hideOsd.running = true;
hideOsdBrightness.running = true;
barLeftSideMouseArea.trackingScroll = false;
}
}
@@ -260,7 +263,7 @@ Scope {
const dx = mouse.x - barRightSideMouseArea.lastScrollX;
const dy = mouse.y - barRightSideMouseArea.lastScrollY;
if (Math.sqrt(dx*dx + dy*dy) > osdHideMouseMoveThreshold) {
hideOsd.running = true;
hideOsdVolume.running = true;
barRightSideMouseArea.trackingScroll = false;
}
}
@@ -0,0 +1,127 @@
import "root:/services/"
import "root:/modules/common"
import "root:/modules/common/widgets"
import QtQuick
import QtQuick.Controls
import QtQuick.Layouts
import Quickshell
import Quickshell.Io
import Quickshell.Wayland
Scope {
id: root
property bool showOsdValues: false
function triggerOsd() {
showOsdValues = true
osdTimeout.restart()
}
Timer {
id: osdTimeout
interval: ConfigOptions.osd.timeout
repeat: false
running: false
onTriggered: {
showOsdValues = false
}
}
Connections {
target: Brightness
function onValueChanged() {
if (!Brightness.ready) return
root.triggerOsd()
}
}
Connections {
target: Audio.sink.audio
function onVolumeChanged() {
if (!Audio.ready) return
root.showOsdValues = false
}
}
Variants {
model: Quickshell.screens
PanelWindow {
property var modelData
screen: modelData
exclusionMode: ExclusionMode.Normal
WlrLayershell.namespace: "quickshell:onScreenDisplay"
WlrLayershell.layer: WlrLayer.Overlay
color: "transparent"
anchors {
top: true
left: true
right: true
}
mask: Region {
item: osdValuesWrapper
}
width: columnLayout.implicitWidth
height: columnLayout.implicitHeight
visible: showOsdValues
ColumnLayout {
id: columnLayout
anchors.horizontalCenter: parent.horizontalCenter
Item {
height: 1 // Prevent Wayland protocol error
}
Item {
id: osdValuesWrapper
// Extra space for shadow
implicitHeight: true ? (osdValues.implicitHeight + Appearance.sizes.elevationMargin * 2) : 0
implicitWidth: osdValues.implicitWidth + Appearance.sizes.elevationMargin * 2
clip: true
MouseArea {
anchors.fill: parent
hoverEnabled: true
onEntered: root.showOsdValues = false
}
Behavior on implicitHeight {
NumberAnimation {
duration: Appearance.animation.menuDecel.duration
easing.type: Appearance.animation.menuDecel.type
}
}
OsdValueIndicator {
id: osdValues
anchors.centerIn: parent
value: Brightness.value
icon: "light_mode"
name: "Brightness"
}
}
}
}
}
IpcHandler {
target: "osdBrightness"
function trigger() {
root.triggerOsd()
}
function hide() {
showOsdValues = false
}
function toggle() {
showOsdValues = !showOsdValues
}
}
}
@@ -28,18 +28,18 @@ Scope {
}
Connections {
target: Brightness
function onValueChanged() {
if (!Brightness.ready) return
target: Audio.sink.audio
function onVolumeChanged() {
if (!Audio.ready) return
root.triggerOsd()
}
}
Connections {
target: Audio.sink.audio
function onVolumeChanged() {
if (!Audio.ready) return
root.triggerOsd()
target: Brightness
function onValueChanged() {
if (!Brightness.ready) return
root.showOsdValues = false
}
}
@@ -61,7 +61,7 @@ Scope {
right: true
}
mask: Region {
item: columnLayout
item: osdValuesWrapper
}
width: columnLayout.implicitWidth
@@ -75,10 +75,18 @@ Scope {
height: 1 // Prevent Wayland protocol error
}
Item {
implicitHeight: true ? osdValues.implicitHeight : 0
implicitWidth: osdValues.implicitWidth
id: osdValuesWrapper
// Extra space for shadow
implicitHeight: true ? (osdValues.implicitHeight + Appearance.sizes.elevationMargin * 2) : 0
implicitWidth: osdValues.implicitWidth + Appearance.sizes.elevationMargin * 2
clip: true
MouseArea {
anchors.fill: parent
hoverEnabled: true
onEntered: root.showOsdValues = false
}
Behavior on implicitHeight {
NumberAnimation {
duration: Appearance.animation.menuDecel.duration
@@ -86,11 +94,12 @@ Scope {
}
}
OsdValues {
OsdValueIndicator {
id: osdValues
anchors.bottom: parent.bottom
// height: showOsdValues ? implicitHeight : 0
// implicitHeight: 0
anchors.centerIn: parent
value: Audio.sink.audio.volume
icon: "volume_up"
name: "Volume"
}
}
}
@@ -100,7 +109,7 @@ Scope {
}
IpcHandler {
target: "osd"
target: "osdVolume"
function trigger() {
root.triggerOsd()
@@ -1,24 +0,0 @@
import "root:/services"
import "root:/modules/common"
import "root:/modules/common/widgets"
import QtQuick
import QtQuick.Controls
import QtQuick.Layouts
import Quickshell
import Quickshell.Widgets
import Qt5Compat.GraphicalEffects
RowLayout {
spacing: -5
OsdValueIndicator {
value: Brightness.value
icon: "light_mode"
name: "Brightness"
}
OsdValueIndicator {
value: Audio.sink.audio.volume
icon: "volume_up"
name: "Volume"
}
}