119void QWaylandXdgOutputManagerV1::initialize()
121 Q_D(QWaylandXdgOutputManagerV1);
123 QWaylandCompositorExtensionTemplate::initialize();
124 QWaylandCompositor *compositor =
static_cast<QWaylandCompositor *>(extensionContainer());
126 qCWarning(qLcWaylandCompositor) <<
"Failed to find QWaylandCompositor when initializing QWaylandXdgOutputManagerV1";
129 d->init(compositor->display(), d->interfaceVersion());
159void QWaylandXdgOutputManagerV1Private::zxdg_output_manager_v1_get_xdg_output(Resource *resource,
161 wl_resource *outputResource)
163 Q_Q(QWaylandXdgOutputManagerV1);
166 auto *output = QWaylandOutput::fromResource(outputResource);
168 qCWarning(qLcWaylandCompositor,
169 "The client is requesting a QWaylandXdgOutputV1 for a "
170 "QWaylandOutput that doesn't exist");
171 wl_resource_post_error(resource->handle, WL_DISPLAY_ERROR_INVALID_OBJECT,
"output not found");
176 if (!xdgOutputs.contains(output)) {
177 qCWarning(qLcWaylandCompositor,
178 "The client is requesting a QWaylandXdgOutputV1 that the compositor "
179 "didn't create before");
180 wl_resource_post_error(resource->handle, WL_DISPLAY_ERROR_INVALID_OBJECT,
181 "compositor didn't create a QWaylandXdgOutputV1 for this zxdg_output_v1 object");
186 auto *xdgOutput = xdgOutputs[output];
187 auto *xdgOutputPrivate = QWaylandXdgOutputV1Private::get(xdgOutput);
188 Q_ASSERT(xdgOutputPrivate);
189 xdgOutputPrivate->setManager(q);
190 xdgOutputPrivate->setOutput(output);
191 xdgOutputPrivate->add(resource->client(), id, qMin(resource->version(), QWaylandXdgOutputV1Private::interfaceVersion()));
201QWaylandXdgOutputV1::QWaylandXdgOutputV1(QWaylandOutput *output, QWaylandXdgOutputManagerV1 *manager)
202 : QObject(*
new QWaylandXdgOutputV1Private)
204 Q_D(QWaylandXdgOutputV1);
208 d->manager = manager;
211 QWaylandXdgOutputManagerV1Private::get(d->manager)->registerXdgOutput(output,
this);
213 emit managerChanged();
214 emit outputChanged();
337void QWaylandXdgOutputV1::setDescription(
const QString &description)
339 Q_D(QWaylandXdgOutputV1);
341 if (d->description == description)
345 if (d->initialized) {
346 qCWarning(qLcWaylandCompositor,
"QWaylandXdgOutputV1::description cannot be changed after initialization");
350 d->description = description;
351 emit descriptionChanged();
374void QWaylandXdgOutputV1::setLogicalPosition(
const QPoint &position)
376 Q_D(QWaylandXdgOutputV1);
378 if (d->logicalPos == position)
381 d->logicalPos = position;
382 if (d->initialized) {
383 d->sendLogicalPosition(position);
386 emit logicalPositionChanged();
387 emit logicalGeometryChanged();
426void QWaylandXdgOutputV1::setLogicalSize(
const QSize &size)
428 Q_D(QWaylandXdgOutputV1);
430 if (d->logicalSize == size)
433 d->logicalSize = size;
434 if (d->initialized) {
435 d->sendLogicalSize(size);
438 emit logicalSizeChanged();
439 emit logicalGeometryChanged();
499void QWaylandXdgOutputV1Private::setManager(QWaylandXdgOutputManagerV1 *_manager)
501 Q_Q(QWaylandXdgOutputV1);
504 qCWarning(qLcWaylandCompositor,
505 "Cannot associate a null QWaylandXdgOutputManagerV1 to QWaylandXdgOutputV1 %p",
this);
509 if (manager == _manager)
513 qCWarning(qLcWaylandCompositor,
514 "Cannot associate a different QWaylandXdgOutputManagerV1 to QWaylandXdgOutputV1 %p "
515 "after initialization",
this);
520 emit q->managerChanged();
523void QWaylandXdgOutputV1Private::setOutput(QWaylandOutput *_output)
525 Q_Q(QWaylandXdgOutputV1);
528 qCWarning(qLcWaylandCompositor,
529 "Cannot associate a null QWaylandOutput to QWaylandXdgOutputV1 %p",
this);
533 if (output == _output)
537 qCWarning(qLcWaylandCompositor,
538 "Cannot associate a different QWaylandOutput to QWaylandXdgOutputV1 %p "
539 "after initialization",
this);
548 for (
auto *p = output->parent(); p !=
nullptr; p = p->parent()) {
549 if (
auto *m = qobject_cast<QWaylandXdgOutputManagerV1 *>(p)) {
551 emit q->managerChanged();
557 emit q->outputChanged();
561 QWaylandXdgOutputManagerV1Private::get(manager)->registerXdgOutput(output, q);
564void QWaylandXdgOutputV1Private::zxdg_output_v1_bind_resource(Resource *resource)
566 send_logical_position(resource->handle, logicalPos.x(), logicalPos.y());
567 send_logical_size(resource->handle, logicalSize.width(), logicalSize.height());
568 if (resource->version() >= ZXDG_OUTPUT_V1_NAME_SINCE_VERSION)
569 send_name(resource->handle, name);
570 if (resource->version() >= ZXDG_OUTPUT_V1_DESCRIPTION_SINCE_VERSION)
571 send_description(resource->handle, description);
572 maybeSendDone(resource);
574 QWaylandOutputPrivate *output_d = QWaylandOutputPrivate::get(output);
575 auto *outputResource = output_d->resourceMap().value(resource->client());
577 output_d->maybeSendDone(outputResource);