106void QWaylandXdgOutputManagerV1::initialize()
108 Q_D(QWaylandXdgOutputManagerV1);
110 QWaylandCompositorExtensionTemplate::initialize();
111 QWaylandCompositor *compositor =
static_cast<QWaylandCompositor *>(extensionContainer());
113 qCWarning(qLcWaylandCompositor) <<
"Failed to find QWaylandCompositor when initializing QWaylandXdgOutputManagerV1";
116 d->init(compositor->display(), d->interfaceVersion());
146void QWaylandXdgOutputManagerV1Private::zxdg_output_manager_v1_get_xdg_output(Resource *resource,
148 wl_resource *outputResource)
150 Q_Q(QWaylandXdgOutputManagerV1);
153 auto *output = QWaylandOutput::fromResource(outputResource);
155 qCWarning(qLcWaylandCompositor,
156 "The client is requesting a QWaylandXdgOutputV1 for a "
157 "QWaylandOutput that doesn't exist");
158 wl_resource_post_error(resource->handle, WL_DISPLAY_ERROR_INVALID_OBJECT,
"output not found");
163 if (!xdgOutputs.contains(output)) {
164 qCWarning(qLcWaylandCompositor,
165 "The client is requesting a QWaylandXdgOutputV1 that the compositor "
166 "didn't create before");
167 wl_resource_post_error(resource->handle, WL_DISPLAY_ERROR_INVALID_OBJECT,
168 "compositor didn't create a QWaylandXdgOutputV1 for this zxdg_output_v1 object");
173 auto *xdgOutput = xdgOutputs[output];
174 auto *xdgOutputPrivate = QWaylandXdgOutputV1Private::get(xdgOutput);
175 Q_ASSERT(xdgOutputPrivate);
176 xdgOutputPrivate->setManager(q);
177 xdgOutputPrivate->setOutput(output);
178 xdgOutputPrivate->add(resource->client(), id, qMin(resource->version(), QWaylandXdgOutputV1Private::interfaceVersion()));
188QWaylandXdgOutputV1::QWaylandXdgOutputV1(QWaylandOutput *output, QWaylandXdgOutputManagerV1 *manager)
189 : QObject(*
new QWaylandXdgOutputV1Private)
191 Q_D(QWaylandXdgOutputV1);
195 d->manager = manager;
198 QWaylandXdgOutputManagerV1Private::get(d->manager)->registerXdgOutput(output,
this);
200 emit managerChanged();
201 emit outputChanged();
323void QWaylandXdgOutputV1::setDescription(
const QString &description)
325 Q_D(QWaylandXdgOutputV1);
327 if (d->description == description)
331 if (d->initialized) {
332 qCWarning(qLcWaylandCompositor,
"QWaylandXdgOutputV1::description cannot be changed after initialization");
336 d->description = description;
337 emit descriptionChanged();
360void QWaylandXdgOutputV1::setLogicalPosition(
const QPoint &position)
362 Q_D(QWaylandXdgOutputV1);
364 if (d->logicalPos == position)
367 d->logicalPos = position;
368 if (d->initialized) {
369 d->sendLogicalPosition(position);
372 emit logicalPositionChanged();
373 emit logicalGeometryChanged();
412void QWaylandXdgOutputV1::setLogicalSize(
const QSize &size)
414 Q_D(QWaylandXdgOutputV1);
416 if (d->logicalSize == size)
419 d->logicalSize = size;
420 if (d->initialized) {
421 d->sendLogicalSize(size);
424 emit logicalSizeChanged();
425 emit logicalGeometryChanged();
470void QWaylandXdgOutputV1Private::sendDone()
472 const auto values = resourceMap().values();
473 for (
auto *resource : values) {
474 if (resource->version() < 3)
475 send_done(resource->handle);
478 QWaylandOutputPrivate::get(output)->sendDone();
481void QWaylandXdgOutputV1Private::setManager(QWaylandXdgOutputManagerV1 *_manager)
483 Q_Q(QWaylandXdgOutputV1);
486 qCWarning(qLcWaylandCompositor,
487 "Cannot associate a null QWaylandXdgOutputManagerV1 to QWaylandXdgOutputV1 %p",
this);
491 if (manager == _manager)
495 qCWarning(qLcWaylandCompositor,
496 "Cannot associate a different QWaylandXdgOutputManagerV1 to QWaylandXdgOutputV1 %p "
497 "after initialization",
this);
502 emit q->managerChanged();
505void QWaylandXdgOutputV1Private::setOutput(QWaylandOutput *_output)
507 Q_Q(QWaylandXdgOutputV1);
510 qCWarning(qLcWaylandCompositor,
511 "Cannot associate a null QWaylandOutput to QWaylandXdgOutputV1 %p",
this);
515 if (output == _output)
519 qCWarning(qLcWaylandCompositor,
520 "Cannot associate a different QWaylandOutput to QWaylandXdgOutputV1 %p "
521 "after initialization",
this);
530 for (
auto *p = output->parent(); p !=
nullptr; p = p->parent()) {
531 if (
auto *m = qobject_cast<QWaylandXdgOutputManagerV1 *>(p)) {
533 emit q->managerChanged();
539 emit q->outputChanged();
543 QWaylandXdgOutputManagerV1Private::get(manager)->registerXdgOutput(output, q);
546void QWaylandXdgOutputV1Private::zxdg_output_v1_bind_resource(Resource *resource)
548 send_logical_position(resource->handle, logicalPos.x(), logicalPos.y());
549 send_logical_size(resource->handle, logicalSize.width(), logicalSize.height());
550 if (resource->version() >= ZXDG_OUTPUT_V1_NAME_SINCE_VERSION)
551 send_name(resource->handle, name);
552 if (resource->version() >= ZXDG_OUTPUT_V1_DESCRIPTION_SINCE_VERSION)
553 send_description(resource->handle, description);
554 send_done(resource->handle);