mirror of
https://github.com/belsabbagh/dotfiles.git
synced 2026-04-11 17:47:09 +00:00
55 lines
1.5 KiB
QML
55 lines
1.5 KiB
QML
import QtQuick
|
|
import Quickshell
|
|
import Quickshell.Io
|
|
pragma Singleton
|
|
|
|
/*
|
|
|
|
Why use this service? Good question.
|
|
:- Cause xrandr works with all compositors to fetch monitor data.
|
|
|
|
*/
|
|
|
|
Item {
|
|
id: root
|
|
|
|
// Array of monitor objects: { name, width, height, x, y, physWidth, physHeight }
|
|
property var monitors: []
|
|
|
|
// Refresh monitors every 5 seconds
|
|
Timer {
|
|
interval: 5000
|
|
running: true
|
|
repeat: true
|
|
onTriggered: xrandrProc.running = true
|
|
}
|
|
|
|
Process {
|
|
id: xrandrProc
|
|
command: ["bash", "-c", "xrandr --query | grep ' connected '"]
|
|
running: true
|
|
|
|
stdout: StdioCollector {
|
|
onStreamFinished: { // I don't even know wtf is this I can't explain shit
|
|
const lines = text.trim().split("\n")
|
|
root.monitors = lines.map(line => {
|
|
const m = line.match(/^(\S+)\sconnected\s(\d+)x(\d+)\+(\d+)\+(\d+).*?(\d+)mm\sx\s(\d+)mm$/)
|
|
if (!m) return null
|
|
return {
|
|
name: m[1],
|
|
width: parseInt(m[2]),
|
|
height: parseInt(m[3]),
|
|
x: parseInt(m[4]),
|
|
y: parseInt(m[5]),
|
|
physWidth: parseInt(m[6]),
|
|
physHeight: parseInt(m[7])
|
|
}
|
|
}).filter(m => m)
|
|
}
|
|
}
|
|
}
|
|
|
|
function getMonitor(name) {
|
|
return monitors.find(m => m.name === name) || null
|
|
}
|
|
} |