118void QWaylandXdgOutputManagerV1::initialize()
120 Q_D(QWaylandXdgOutputManagerV1);
122 QWaylandCompositorExtensionTemplate::initialize();
123 QWaylandCompositor *compositor =
static_cast<QWaylandCompositor *>(extensionContainer());
125 qCWarning(qLcWaylandCompositor) <<
"Failed to find QWaylandCompositor when initializing QWaylandXdgOutputManagerV1";
128 d->init(compositor->display(), d->interfaceVersion());
158void QWaylandXdgOutputManagerV1Private::zxdg_output_manager_v1_get_xdg_output(Resource *resource,
160 wl_resource *outputResource)
162 Q_Q(QWaylandXdgOutputManagerV1);
165 auto *output = QWaylandOutput::fromResource(outputResource);
167 qCWarning(qLcWaylandCompositor,
168 "The client is requesting a QWaylandXdgOutputV1 for a "
169 "QWaylandOutput that doesn't exist");
170 wl_resource_post_error(resource->handle, WL_DISPLAY_ERROR_INVALID_OBJECT,
"output not found");
175 if (!xdgOutputs.contains(output)) {
176 qCWarning(qLcWaylandCompositor,
177 "The client is requesting a QWaylandXdgOutputV1 that the compositor "
178 "didn't create before");
179 wl_resource_post_error(resource->handle, WL_DISPLAY_ERROR_INVALID_OBJECT,
180 "compositor didn't create a QWaylandXdgOutputV1 for this zxdg_output_v1 object");
185 auto *xdgOutput = xdgOutputs[output];
186 auto *xdgOutputPrivate = QWaylandXdgOutputV1Private::get(xdgOutput);
187 Q_ASSERT(xdgOutputPrivate);
188 xdgOutputPrivate->setManager(q);
189 xdgOutputPrivate->setOutput(output);
190 xdgOutputPrivate->add(resource->client(), id, qMin(resource->version(), QWaylandXdgOutputV1Private::interfaceVersion()));
200QWaylandXdgOutputV1::QWaylandXdgOutputV1(QWaylandOutput *output, QWaylandXdgOutputManagerV1 *manager)
201 : QObject(*
new QWaylandXdgOutputV1Private)
203 Q_D(QWaylandXdgOutputV1);
207 d->manager = manager;
210 QWaylandXdgOutputManagerV1Private::get(d->manager)->registerXdgOutput(output,
this);
212 emit managerChanged();
213 emit outputChanged();
336void QWaylandXdgOutputV1::setDescription(
const QString &description)
338 Q_D(QWaylandXdgOutputV1);
340 if (d->description == description)
344 if (d->initialized) {
345 qCWarning(qLcWaylandCompositor,
"QWaylandXdgOutputV1::description cannot be changed after initialization");
349 d->description = description;
350 emit descriptionChanged();
373void QWaylandXdgOutputV1::setLogicalPosition(
const QPoint &position)
375 Q_D(QWaylandXdgOutputV1);
377 if (d->logicalPos == position)
380 d->logicalPos = position;
381 if (d->initialized) {
382 d->sendLogicalPosition(position);
385 emit logicalPositionChanged();
386 emit logicalGeometryChanged();
425void QWaylandXdgOutputV1::setLogicalSize(
const QSize &size)
427 Q_D(QWaylandXdgOutputV1);
429 if (d->logicalSize == size)
432 d->logicalSize = size;
433 if (d->initialized) {
434 d->sendLogicalSize(size);
437 emit logicalSizeChanged();
438 emit logicalGeometryChanged();
483void QWaylandXdgOutputV1Private::sendDone()
485 const auto values = resourceMap().values();
486 for (
auto *resource : values) {
487 if (resource->version() < 3)
488 send_done(resource->handle);
491 QWaylandOutputPrivate::get(output)->sendDone();
494void QWaylandXdgOutputV1Private::setManager(QWaylandXdgOutputManagerV1 *_manager)
496 Q_Q(QWaylandXdgOutputV1);
499 qCWarning(qLcWaylandCompositor,
500 "Cannot associate a null QWaylandXdgOutputManagerV1 to QWaylandXdgOutputV1 %p",
this);
504 if (manager == _manager)
508 qCWarning(qLcWaylandCompositor,
509 "Cannot associate a different QWaylandXdgOutputManagerV1 to QWaylandXdgOutputV1 %p "
510 "after initialization",
this);
515 emit q->managerChanged();
518void QWaylandXdgOutputV1Private::setOutput(QWaylandOutput *_output)
520 Q_Q(QWaylandXdgOutputV1);
523 qCWarning(qLcWaylandCompositor,
524 "Cannot associate a null QWaylandOutput to QWaylandXdgOutputV1 %p",
this);
528 if (output == _output)
532 qCWarning(qLcWaylandCompositor,
533 "Cannot associate a different QWaylandOutput to QWaylandXdgOutputV1 %p "
534 "after initialization",
this);
543 for (
auto *p = output->parent(); p !=
nullptr; p = p->parent()) {
544 if (
auto *m = qobject_cast<QWaylandXdgOutputManagerV1 *>(p)) {
546 emit q->managerChanged();
552 emit q->outputChanged();
556 QWaylandXdgOutputManagerV1Private::get(manager)->registerXdgOutput(output, q);
559void QWaylandXdgOutputV1Private::zxdg_output_v1_bind_resource(Resource *resource)
561 send_logical_position(resource->handle, logicalPos.x(), logicalPos.y());
562 send_logical_size(resource->handle, logicalSize.width(), logicalSize.height());
563 if (resource->version() >= ZXDG_OUTPUT_V1_NAME_SINCE_VERSION)
564 send_name(resource->handle, name);
565 if (resource->version() >= ZXDG_OUTPUT_V1_DESCRIPTION_SINCE_VERSION)
566 send_description(resource->handle, description);
567 send_done(resource->handle);