7 #include "event_queue.h"
9 #include "wayland_pointer_p.h"
11 #include <wayland-client-protocol.h>
12 #include <wayland-dpms-client-protocol.h>
18 class Q_DECL_HIDDEN DpmsManager::Private
21 WaylandPointer<org_kde_kwin_dpms_manager, org_kde_kwin_dpms_manager_destroy> manager;
22 EventQueue *queue =
nullptr;
31 DpmsManager::~DpmsManager()
48 return d->manager.isValid();
54 Q_ASSERT(!d->manager.isValid());
55 d->manager.setup(manager);
73 auto w = org_kde_kwin_dpms_manager_get(d->manager, *output);
75 d->queue->addProxy(w);
81 DpmsManager::operator org_kde_kwin_dpms_manager *()
const
86 DpmsManager::operator org_kde_kwin_dpms_manager *()
91 class Q_DECL_HIDDEN Dpms::Private
95 void setup(org_kde_kwin_dpms *d);
97 WaylandPointer<org_kde_kwin_dpms, org_kde_kwin_dpms_release> dpms;
99 bool supported =
false;
100 Mode mode = Mode::On;
101 bool supportedChanged =
false;
102 bool modeChanged =
false;
109 static void supportedCallback(
void *data, org_kde_kwin_dpms *org_kde_kwin_dpms, uint32_t supported);
110 static void modeCallback(
void *data, org_kde_kwin_dpms *org_kde_kwin_dpms, uint32_t mode);
111 static void doneCallback(
void *data, org_kde_kwin_dpms *org_kde_kwin_dpms);
112 static const struct org_kde_kwin_dpms_listener s_listener;
118 const org_kde_kwin_dpms_listener Dpms::Private::s_listener = {supportedCallback, modeCallback, doneCallback};
121 void Dpms::Private::supportedCallback(
void *data, org_kde_kwin_dpms *org_kde_kwin_dpms, uint32_t supported)
123 Q_UNUSED(org_kde_kwin_dpms)
124 Private *p =
reinterpret_cast<Private *
>(data);
125 p->pending.supported = supported == 0 ? false :
true;
126 p->pending.supportedChanged =
true;
129 void Dpms::Private::modeCallback(
void *data, org_kde_kwin_dpms *org_kde_kwin_dpms, uint32_t mode)
131 Q_UNUSED(org_kde_kwin_dpms)
134 case ORG_KDE_KWIN_DPMS_MODE_ON:
137 case ORG_KDE_KWIN_DPMS_MODE_STANDBY:
140 case ORG_KDE_KWIN_DPMS_MODE_SUSPEND:
143 case ORG_KDE_KWIN_DPMS_MODE_OFF:
149 Private *p =
reinterpret_cast<Private *
>(data);
151 p->pending.modeChanged =
true;
154 void Dpms::Private::doneCallback(
void *data, org_kde_kwin_dpms *org_kde_kwin_dpms)
156 Q_UNUSED(org_kde_kwin_dpms)
157 Private *p =
reinterpret_cast<Private *
>(data);
158 const bool supportedChanged = p->pending.supportedChanged && p->pending.supported != p->current.supported;
159 const bool modeChanged = p->pending.modeChanged && p->pending.mode != p->current.mode;
160 if (supportedChanged) {
161 p->current.supported = p->pending.supported;
162 Q_EMIT p->q->supportedChanged();
165 p->current.mode = p->pending.mode;
166 Q_EMIT p->q->modeChanged();
177 void Dpms::Private::setup(org_kde_kwin_dpms *d)
182 org_kde_kwin_dpms_add_listener(dpms, &s_listener,
this);
187 , d(new Private(o, this))
208 return d->dpms.isValid();
218 return d->current.supported;
223 return d->current.mode;
231 wlMode = ORG_KDE_KWIN_DPMS_MODE_ON;
234 wlMode = ORG_KDE_KWIN_DPMS_MODE_STANDBY;
237 wlMode = ORG_KDE_KWIN_DPMS_MODE_SUSPEND;
240 wlMode = ORG_KDE_KWIN_DPMS_MODE_OFF;
245 org_kde_kwin_dpms_set(d->dpms, wlMode);
253 Dpms::operator org_kde_kwin_dpms *()
258 Dpms::operator org_kde_kwin_dpms *()
const
266 #include "moc_dpms.cpp"