diff options
author | Paul Olav Tvete <paul.tvete@qt.io> | 2024-04-09 16:36:54 +0200 |
---|---|---|
committer | Paul Olav Tvete <paul.tvete@qt.io> | 2024-04-12 15:19:44 +0200 |
commit | 0417a5f34a327be44a50b5164266b9f607776461 (patch) | |
tree | 880f96a7317107237b0019d90c19b0b4c588518a /src/compositor/extensions/qwaylandxdgshell.cpp | |
parent | 86c9f944ac937859b20538b868c0de068bc098aa (diff) |
compositor: Implement xdg_dialog_v1
Implement xdg_dialog_v1 on the compositor side.
This adds a new properties in the QML API:
XdgToplevel::modal
ShellSurface::modal
Task-number: QTBUG-90005
Change-Id: Ie80358bc59c3dabc6e841b65d193c8ca56bacde3
Reviewed-by: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@qt.io>
Diffstat (limited to 'src/compositor/extensions/qwaylandxdgshell.cpp')
-rw-r--r-- | src/compositor/extensions/qwaylandxdgshell.cpp | 37 |
1 files changed, 37 insertions, 0 deletions
diff --git a/src/compositor/extensions/qwaylandxdgshell.cpp b/src/compositor/extensions/qwaylandxdgshell.cpp index 871f0cf62..7185d749e 100644 --- a/src/compositor/extensions/qwaylandxdgshell.cpp +++ b/src/compositor/extensions/qwaylandxdgshell.cpp @@ -9,6 +9,8 @@ #endif #include <QtWaylandCompositor/private/qwaylandutils_p.h> +#include "qwaylandxdgdialogv1_p.h" + #include <QtWaylandCompositor/QWaylandCompositor> #include <QtWaylandCompositor/QWaylandSeat> #include <QtWaylandCompositor/QWaylandSurface> @@ -181,6 +183,10 @@ void QWaylandXdgShell::initialize() connect(compositor, &QWaylandCompositor::defaultSeatChanged, this, &QWaylandXdgShell::handleSeatChanged); + + // Support the dialog extension unconditionally. + QObject *dialogExtension = new QWaylandXdgDialogV1Global(compositor); + dialogExtension->setParent(this); } /*! @@ -330,6 +336,9 @@ void QWaylandXdgSurfacePrivate::xdg_surface_get_toplevel(QtWaylandServer::xdg_su m_toplevel = new QWaylandXdgToplevel(q, topLevelResource); emit q->toplevelCreated(); emit m_xdgShell->toplevelCreated(m_toplevel, q); + q->connect(m_toplevel, &QWaylandXdgToplevel::modalChanged, q, [q, this](){ + q->setModal(m_toplevel->modal()); + }); } void QWaylandXdgSurfacePrivate::xdg_surface_get_popup(QtWaylandServer::xdg_surface::Resource *resource, uint32_t id, wl_resource *parentResource, wl_resource *positionerResource) @@ -915,6 +924,34 @@ bool QWaylandXdgToplevel::activated() const } /*! + * \qmlproperty bool XdgToplevel::modal + * + * This property holds whether toplevel blocks other windows from receiving input. + * \since 6.8 + */ + +/*! + * \property QWaylandXdgToplevel::modal + * + * This property holds whether toplevel blocks other windows from receiving input. + * \since 6.8 + */ +bool QWaylandXdgToplevel::modal() const +{ + Q_D(const QWaylandXdgToplevel); + return d->m_modal; +} + +void QWaylandXdgToplevel::setModal(bool newModal) +{ + Q_D(QWaylandXdgToplevel); + if (d->m_modal == newModal) + return; + d->m_modal = newModal; + emit modalChanged(); +} + +/*! * \enum QWaylandXdgToplevel::DecorationMode * * This enum type is used to specify the window decoration mode for toplevel windows. |