diff options
author | Jørgen Lind <jorgen.lind@theqtcompany.com> | 2015-07-30 12:05:12 +0200 |
---|---|---|
committer | Jørgen Lind <jorgen.lind@theqtcompany.com> | 2015-08-28 13:09:41 +0200 |
commit | ab6980d57609b1e4bdb164d3413faa2f7cb7e1e4 (patch) | |
tree | ef68f66511347c0545559df6a81b6d56c6448eb4 /src/compositor/compositor_api/qwaylandsurface.cpp | |
parent | e88c2f37097901e228de70c62a0220386038a51a (diff) |
Move the output from QWaylandSurface to the QWaylandSurfaceView
and add a property called primaryOutput on the QWaylandSurface.
Also add some bookkeeping in QtWayland::Output so it knows what surfaces
and views it currently holds, sending the enter and leave events
automatically.
Change-Id: Ib6efbc6f8157657fb4451b751bba1cb5345b7906
Diffstat (limited to 'src/compositor/compositor_api/qwaylandsurface.cpp')
-rw-r--r-- | src/compositor/compositor_api/qwaylandsurface.cpp | 47 |
1 files changed, 25 insertions, 22 deletions
diff --git a/src/compositor/compositor_api/qwaylandsurface.cpp b/src/compositor/compositor_api/qwaylandsurface.cpp index 5ffe58e0a..9defe06f1 100644 --- a/src/compositor/compositor_api/qwaylandsurface.cpp +++ b/src/compositor/compositor_api/qwaylandsurface.cpp @@ -53,6 +53,7 @@ #include "qwaylandsurface_p.h" #include "qwaylandbufferref.h" #include "qwaylandsurfaceinterface.h" +#include "qwaylandoutput.h" #include <QtGui/QGuiApplication> #include <QtGui/QScreen> @@ -143,6 +144,8 @@ QWaylandSurface::~QWaylandSurface() { Q_D(QWaylandSurface); qDeleteAll(d->interfaces); + d->m_compositor->unregisterSurface(this); + d->notifyViewsAboutDestruction(); } QWaylandClient *QWaylandSurface::client() const @@ -286,34 +289,18 @@ QWaylandCompositor *QWaylandSurface::compositor() const return d->compositor()->waylandCompositor(); } -QWaylandOutput *QWaylandSurface::mainOutput() const +QWaylandOutput *QWaylandSurface::primaryOutput() const { Q_D(const QWaylandSurface); - - // Returns the output that contains the most if not all - // the surface (window managers will take care of setting - // this, defaults to the first output) - return d->mainOutput()->waylandOutput(); + if (!d->primaryOutput()) + return Q_NULLPTR; + return d->primaryOutput()->waylandOutput(); } -void QWaylandSurface::setMainOutput(QWaylandOutput *mainOutput) +void QWaylandSurface::setPrimaryOutput(QWaylandOutput *output) { Q_D(QWaylandSurface); - - if (mainOutput) - d->setMainOutput(mainOutput->handle()); -} - -QList<QWaylandOutput *> QWaylandSurface::outputs() const -{ - Q_D(const QWaylandSurface); - - QList<QWaylandOutput *> list; - const QList<QtWayland::Output *> outputs = d->outputs(); - list.reserve(outputs.count()); - Q_FOREACH (QtWayland::Output *output, outputs) - list.append(output->waylandOutput()); - return list; + d->setPrimaryOutput(output->handle()); } QWindow::Visibility QWaylandSurface::visibility() const @@ -413,6 +400,22 @@ void QWaylandSurface::destroySurface() emit surfaceDestroyed(); } +void QWaylandSurface::enter(QWaylandOutput *output) +{ + Q_D(QWaylandSurface); + QtWayland::OutputResource *outputResource = output->handle()->outputForClient(d->resource()->client()); + if (outputResource) + handle()->send_enter(outputResource->handle); +} + +void QWaylandSurface::leave(QWaylandOutput *output) +{ + Q_D(QWaylandSurface); + QtWayland::OutputResource *outputResource = output->handle()->outputForClient(d->resource()->client()); + if (outputResource) + d->send_leave(outputResource->handle); +} + /*! Updates the surface with the compositor's retained clipboard selection. While this is done automatically when the surface receives keyboard focus, this function is |