62 lines
2.7 KiB
QML
62 lines
2.7 KiB
QML
import Quickshell
|
|
import Quickshell.Io
|
|
import QtQuick
|
|
|
|
import qs.config
|
|
import qs.services
|
|
|
|
ShellRoot {
|
|
IpcHandler {
|
|
target: "displays-test"
|
|
|
|
function status(): string {
|
|
const monitor = Displays.monitors.length > 0 ? Displays.monitors[0] : null;
|
|
return JSON.stringify({
|
|
count: Displays.monitors.length,
|
|
name: monitor ? monitor.name : "",
|
|
width: monitor ? monitor.width : 0,
|
|
height: monitor ? monitor.height : 0,
|
|
refresh: monitor ? Math.round(monitor.refreshRate) : 0,
|
|
scale: monitor ? monitor.scale : 0,
|
|
transform: monitor ? monitor.transform : -1,
|
|
modes: monitor ? monitor.modes.length : 0,
|
|
awaiting: Displays.awaitingConfirmation,
|
|
canConfirm: Displays.canConfirm,
|
|
secondsLeft: Displays.secondsLeft,
|
|
lastError: Displays.lastError,
|
|
overridden: monitor ? Displays.isOverridden(monitor.name) : false
|
|
});
|
|
}
|
|
|
|
function applyScale(scale: real): bool {
|
|
const monitor = Displays.monitors[0];
|
|
if (!monitor) return false;
|
|
const mode = monitor.width + "x" + monitor.height + "@" + Math.round(monitor.refreshRate);
|
|
return Displays.apply(monitor.name, mode, scale, monitor.transform);
|
|
}
|
|
|
|
function applyBad(kind: string): bool {
|
|
const monitor = Displays.monitors[0];
|
|
if (!monitor) return false;
|
|
const mode = monitor.width + "x" + monitor.height + "@" + Math.round(monitor.refreshRate);
|
|
if (kind === "mode") return Displays.apply(monitor.name, "9999x9999@240", monitor.scale, monitor.transform);
|
|
if (kind === "scale") return Displays.apply(monitor.name, mode, 1.37, monitor.transform);
|
|
if (kind === "dirtyScale") {
|
|
const dirty = Displays.scales.find(scale => !Displays.isScaleClean(mode, scale));
|
|
return dirty === undefined ? false : Displays.apply(monitor.name, mode, dirty, monitor.transform);
|
|
}
|
|
if (kind === "transform") return Displays.apply(monitor.name, mode, monitor.scale, 9);
|
|
if (kind === "output") return Displays.apply("NOPE-1", mode, monitor.scale, monitor.transform);
|
|
return false;
|
|
}
|
|
|
|
function confirmChange(): bool { return Displays.confirm(); }
|
|
function revertChange(): void { Displays.revert(); }
|
|
function forget(): void {
|
|
const monitor = Displays.monitors[0];
|
|
if (monitor) Displays.forget(monitor.name);
|
|
}
|
|
function refresh(): void { Displays.refresh(); }
|
|
}
|
|
}
|