80void QWaylandIdleInhibitManagerV1::initialize()
82 Q_D(QWaylandIdleInhibitManagerV1);
84 QWaylandCompositorExtensionTemplate::initialize();
85 QWaylandCompositor *compositor =
static_cast<QWaylandCompositor *>(extensionContainer());
87 qCWarning(qLcWaylandCompositor) <<
"Failed to find QWaylandCompositor when initializing QWaylandIdleInhibitManagerV1";
90 d->init(compositor->display(), d->interfaceVersion());
102void QWaylandIdleInhibitManagerV1Private::zwp_idle_inhibit_manager_v1_create_inhibitor(Resource *resource, uint id, wl_resource *surfaceResource)
104 auto *surface = QWaylandSurface::fromResource(surfaceResource);
106 qCWarning(qLcWaylandCompositor) <<
"Couldn't find surface requested for creating an inhibitor";
107 wl_resource_post_error(resource->handle, WL_DISPLAY_ERROR_INVALID_OBJECT,
108 "invalid wl_surface@%d", wl_resource_get_id(surfaceResource));
112 auto *surfacePrivate = QWaylandSurfacePrivate::get(surface);
113 if (!surfacePrivate) {
114 wl_resource_post_no_memory(resource->handle);
118 auto *inhibitor =
new Inhibitor(surface, resource->client(), id, resource->version());
120 wl_resource_post_no_memory(resource->handle);
123 surfacePrivate->idleInhibitors.append(inhibitor);
125 if (surfacePrivate->idleInhibitors.size() == 1)
126 Q_EMIT surface->inhibitsIdleChanged();
130QWaylandIdleInhibitManagerV1Private::Inhibitor::Inhibitor(QWaylandSurface *surface,
132 quint32 id, quint32 version)
133 : QtWaylandServer::zwp_idle_inhibitor_v1(client, id, qMin<quint32>(version, interfaceVersion()))
145void QWaylandIdleInhibitManagerV1Private::Inhibitor::zwp_idle_inhibitor_v1_destroy(Resource *resource)
148 auto *surfacePrivate = QWaylandSurfacePrivate::get(m_surface.data());
149 Q_ASSERT(surfacePrivate->idleInhibitors.contains(
this));
150 surfacePrivate->idleInhibitors.removeOne(
this);
152 if (surfacePrivate->idleInhibitors.isEmpty())
153 Q_EMIT m_surface.data()->inhibitsIdleChanged();
156 wl_resource_destroy(resource->handle);