6#include "KWayland/Client/dpms.h"
7#include "KWayland/Client/connection_thread.h"
8#include "KWayland/Client/output.h"
9#include "KWayland/Client/registry.h"
10#include <QApplication>
11#include <QDialogButtonBox>
20static QString modeToString(Dpms::Mode mode)
24 return QStringLiteral(
"On");
25 case Dpms::Mode::Standby:
26 return QStringLiteral(
"Standby");
27 case Dpms::Mode::Suspend:
28 return QStringLiteral(
"Suspend");
30 return QStringLiteral(
"Off");
38 return supported ? QStringLiteral(
"Yes") : QStringLiteral(
"No");
41static QLayout *setupOutput(Registry::AnnouncedInterface outputInterface, Registry *registry, DpmsManager *manager)
43 Output *output =
registry->createOutput(outputInterface.name, outputInterface.version, registry);
44 QLabel *label =
new QLabel(output->model());
50 label->setText(output->model());
52 Qt::QueuedConnection);
56 dpms = manager->getDpms(output, output);
59 QFormLayout *dpmsForm =
new QFormLayout;
60 bool supported = dpms ? dpms->isSupported() :
false;
62 dpmsForm->addRow(QStringLiteral(
"Supported:"), supportedLabel);
63 QLabel *modeLabel =
new QLabel(modeToString(dpms ? dpms->mode() : Dpms::Mode::On));
64 dpmsForm->addRow(QStringLiteral(
"Mode:"), modeLabel);
66 QPushButton *standbyButton =
new QPushButton(QStringLiteral(
"Standby"));
67 QPushButton *suspendButton =
new QPushButton(QStringLiteral(
"Suspend"));
68 QPushButton *offButton =
new QPushButton(QStringLiteral(
"Off"));
69 standbyButton->setEnabled(supported);
70 suspendButton->setEnabled(supported);
71 offButton->setEnabled(supported);
72 QDialogButtonBox *bg =
new QDialogButtonBox;
73 bg->addButton(standbyButton, QDialogButtonBox::ActionRole);
74 bg->addButton(suspendButton, QDialogButtonBox::ActionRole);
75 bg->addButton(offButton, QDialogButtonBox::ActionRole);
80 &Dpms::supportedChanged,
82 [supportedLabel, dpms, standbyButton, suspendButton, offButton] {
83 const bool supported = dpms->isSupported();
85 standbyButton->setEnabled(supported);
86 suspendButton->setEnabled(supported);
87 offButton->setEnabled(supported);
89 Qt::QueuedConnection);
95 modeLabel->setText(modeToString(dpms->mode()));
97 Qt::QueuedConnection);
98 QObject::connect(standbyButton, &QPushButton::clicked, dpms, [dpms] {
99 dpms->requestMode(Dpms::Mode::Standby);
101 QObject::connect(suspendButton, &QPushButton::clicked, dpms, [dpms] {
102 dpms->requestMode(Dpms::Mode::Suspend);
104 QObject::connect(offButton, &QPushButton::clicked, dpms, [dpms] {
105 dpms->requestMode(Dpms::Mode::Off);
109 QVBoxLayout *layout =
new QVBoxLayout;
110 layout->addWidget(label);
111 layout->addLayout(dpmsForm);
112 layout->addWidget(bg);
118 qputenv(
"QT_QPA_PLATFORM", QByteArrayLiteral(
"wayland"));
119 QApplication app(argc, argv);
123 ConnectionThread *connection = ConnectionThread::fromApplication();
125 registry.create(connection);
128 &Registry::interfacesAnnounced,
130 [®istry, &window] {
131 const bool hasDpms = registry.hasInterface(Registry::Interface::Dpms);
132 QLabel *hasDpmsLabel =
new QLabel(&window);
134 hasDpmsLabel->setText(QStringLiteral(
"Compositor provides a DpmsManager"));
136 hasDpmsLabel->setText(QStringLiteral(
"Compositor does not provide a DpmsManager"));
139 QVBoxLayout *layout =
new QVBoxLayout;
140 layout->addWidget(hasDpmsLabel);
141 QFrame *hline =
new QFrame;
142 hline->setFrameShape(QFrame::HLine);
143 layout->addWidget(hline);
145 DpmsManager *dpmsManager =
nullptr;
147 const auto dpmsData = registry.interface(Registry::Interface::Dpms);
148 dpmsManager = registry.createDpmsManager(dpmsData.name, dpmsData.version);
152 const auto outputs = registry.interfaces(Registry::Interface::Output);
153 for (
auto o : outputs) {
154 layout->addLayout(setupOutput(o, ®istry, dpmsManager));
155 QFrame *hline =
new QFrame;
156 hline->setFrameShape(QFrame::HLine);
157 layout->addWidget(hline);
160 window.setLayout(layout);
163 Qt::QueuedConnection);
QString supportedToString(bool supported)
KWayland::Client::Registry * registry