diff --git a/src/plugin-qt/shortcut/tools/dde-shortcut-tool/powercontroller.cpp b/src/plugin-qt/shortcut/tools/dde-shortcut-tool/powercontroller.cpp index a4b59ca..078ecad 100644 --- a/src/plugin-qt/shortcut/tools/dde-shortcut-tool/powercontroller.cpp +++ b/src/plugin-qt/shortcut/tools/dde-shortcut-tool/powercontroller.cpp @@ -410,7 +410,30 @@ void PowerController::systemTurnOffScreen() qInfo() << "PowerController: turn off screen"; if (isWaylandSession()) { - // TODO: adapt screen-off for Treeland Wayland (DPMS path TBD). + // Wayland/Treeland: use Power1 TurnOffScreen which calls + // wlr-output-power-management-v1 to set outputs off. + doPrepareSuspend(); + + DConfig *config = createPowerConfig(this); + const bool screenBlackLock = shouldLockOnScreenBlack(config); + if (screenBlackLock) { + doLock(true); + QThread::msleep(500); + } + + QDBusInterface power("org.deepin.dde.Power1", "/org/deepin/dde/Power1", + "org.deepin.dde.Power1", QDBusConnection::systemBus()); + if (power.isValid()) { + power.call("TurnOffScreen"); + } else { + qWarning() << "PowerController: Power1 unavailable for TurnOffScreen"; + } + + undoPrepareSuspend(); + + QFile dpmsState("/tmp/dpms-state"); + if (dpmsState.open(QIODevice::WriteOnly | QIODevice::Truncate)) + dpmsState.write("1"); return; }