79void QWaylandIdleInhibitManagerV1::initialize()
81 Q_D(QWaylandIdleInhibitManagerV1);
83 QWaylandCompositorExtensionTemplate::initialize();
84 QWaylandCompositor *compositor =
static_cast<QWaylandCompositor *>(extensionContainer());
86 qCWarning(qLcWaylandCompositor) <<
"Failed to find QWaylandCompositor when initializing QWaylandIdleInhibitManagerV1";
89 d->init(compositor->display(), d->interfaceVersion());
101void QWaylandIdleInhibitManagerV1Private::zwp_idle_inhibit_manager_v1_create_inhibitor(Resource *resource, uint id, wl_resource *surfaceResource)
103 auto *surface = QWaylandSurface::fromResource(surfaceResource);
105 qCWarning(qLcWaylandCompositor) <<
"Couldn't find surface requested for creating an inhibitor";
106 wl_resource_post_error(resource->handle, WL_DISPLAY_ERROR_INVALID_OBJECT,
107 "invalid wl_surface@%d", wl_resource_get_id(surfaceResource));
111 auto *surfacePrivate = QWaylandSurfacePrivate::get(surface);
112 if (!surfacePrivate) {
113 wl_resource_post_no_memory(resource->handle);
117 auto *inhibitor =
new Inhibitor(surface, resource->client(), id, resource->version());
119 wl_resource_post_no_memory(resource->handle);
122 surfacePrivate->idleInhibitors.append(inhibitor);
124 if (surfacePrivate->idleInhibitors.size() == 1)
125 Q_EMIT surface->inhibitsIdleChanged();
129QWaylandIdleInhibitManagerV1Private::Inhibitor::Inhibitor(QWaylandSurface *surface,
131 quint32 id, quint32 version)
132 : QtWaylandServer::zwp_idle_inhibitor_v1(client, id, qMin<quint32>(version, interfaceVersion()))
144void QWaylandIdleInhibitManagerV1Private::Inhibitor::zwp_idle_inhibitor_v1_destroy(Resource *resource)
147 auto *surfacePrivate = QWaylandSurfacePrivate::get(m_surface.data());
148 Q_ASSERT(surfacePrivate->idleInhibitors.contains(
this));
149 surfacePrivate->idleInhibitors.removeOne(
this);
151 if (surfacePrivate->idleInhibitors.isEmpty())
152 Q_EMIT m_surface.data()->inhibitsIdleChanged();
155 wl_resource_destroy(resource->handle);