summaryrefslogtreecommitdiffstats
path: root/src/compositor/compositor_api/qwaylandsurface.cpp
diff options
context:
space:
mode:
authorJørgen Lind <jorgen.lind@theqtcompany.com>2015-07-30 12:05:12 +0200
committerJørgen Lind <jorgen.lind@theqtcompany.com>2015-08-28 13:09:41 +0200
commitab6980d57609b1e4bdb164d3413faa2f7cb7e1e4 (patch)
treeef68f66511347c0545559df6a81b6d56c6448eb4 /src/compositor/compositor_api/qwaylandsurface.cpp
parente88c2f37097901e228de70c62a0220386038a51a (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.cpp47
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