summaryrefslogtreecommitdiffstats
path: root/src/compositor
diff options
context:
space:
mode:
authorFrederik Gladhorn <frederik.gladhorn@theqtcompany.com>2014-12-29 16:20:02 +0100
committerFrederik Gladhorn <frederik.gladhorn@theqtcompany.com>2014-12-29 16:20:29 +0100
commitf4bfdc5eed9f153f02f8370dc8bfa4aaea6de38c (patch)
treebd55c08da1d4c32ff16952b8ea5e3d96c19c5594 /src/compositor
parent97091ce346cebac7f03a1a98c58d44d8d22edc2e (diff)
parent19f688dac38ba439dc5068fc6ad02dc271422702 (diff)
Merge remote-tracking branch 'origin/5.4' into dev
Conflicts: .qmake.conf src/compositor/compositor_api/qwaylandsurface.cpp Change-Id: I3ee40153c959dbe31ea685571c5a8bb1ae36606e
Diffstat (limited to 'src/compositor')
-rw-r--r--src/compositor/compositor_api/qwaylandquicksurface.cpp4
-rw-r--r--src/compositor/compositor_api/qwaylandsurface.cpp3
-rw-r--r--src/compositor/compositor_api/qwaylandsurfaceitem.cpp9
-rw-r--r--src/compositor/compositor_api/qwaylandsurfaceitem.h2
-rw-r--r--src/compositor/compositor_api/qwaylandsurfaceview.cpp4
-rw-r--r--src/compositor/wayland_wrapper/qwldataoffer_p.h3
-rw-r--r--src/compositor/wayland_wrapper/qwldatasource_p.h4
-rw-r--r--src/compositor/wayland_wrapper/qwlextendedsurface.cpp2
8 files changed, 20 insertions, 11 deletions
diff --git a/src/compositor/compositor_api/qwaylandquicksurface.cpp b/src/compositor/compositor_api/qwaylandquicksurface.cpp
index ae3dfbb5d..166514f73 100644
--- a/src/compositor/compositor_api/qwaylandquicksurface.cpp
+++ b/src/compositor/compositor_api/qwaylandquicksurface.cpp
@@ -212,12 +212,16 @@ void QWaylandQuickSurface::updateTexture()
Q_D(QWaylandQuickSurface);
if (d->buffer->update)
d->buffer->createTexture();
+ foreach (QWaylandSurfaceView *view, views())
+ static_cast<QWaylandSurfaceItem *>(view)->updateTexture();
}
void QWaylandQuickSurface::invalidateTexture()
{
Q_D(QWaylandQuickSurface);
d->buffer->invalidateTexture();
+ foreach (QWaylandSurfaceView *view, views())
+ static_cast<QWaylandSurfaceItem *>(view)->updateTexture();
}
bool QWaylandQuickSurface::clientRenderingEnabled() const
diff --git a/src/compositor/compositor_api/qwaylandsurface.cpp b/src/compositor/compositor_api/qwaylandsurface.cpp
index b5c38d88e..8dacc8ec3 100644
--- a/src/compositor/compositor_api/qwaylandsurface.cpp
+++ b/src/compositor/compositor_api/qwaylandsurface.cpp
@@ -95,8 +95,7 @@ QWaylandSurface::~QWaylandSurface()
QWaylandClient *QWaylandSurface::client() const
{
Q_D(const QWaylandSurface);
-
- if (!d->compositor()->clients().contains(d->client))
+ if (d->isDestroyed() || !d->compositor()->clients().contains(d->client))
return Q_NULLPTR;
return d->client;
}
diff --git a/src/compositor/compositor_api/qwaylandsurfaceitem.cpp b/src/compositor/compositor_api/qwaylandsurfaceitem.cpp
index 79afa3786..8a0d6bd28 100644
--- a/src/compositor/compositor_api/qwaylandsurfaceitem.cpp
+++ b/src/compositor/compositor_api/qwaylandsurfaceitem.cpp
@@ -340,13 +340,11 @@ void QWaylandSurfaceItem::updateBuffer(bool hasBuffer)
m_newTexture = true;
}
-QSGNode *QWaylandSurfaceItem::updatePaintNode(QSGNode *oldNode, UpdatePaintNodeData *)
+void QWaylandSurfaceItem::updateTexture()
{
if (!m_provider)
m_provider = new QWaylandSurfaceTextureProvider();
- // Order here is important, as the state of visible is that of the pending
- // buffer but will be replaced after we advance the buffer queue.
bool mapped = surface() && surface()->isMapped();
if (mapped)
m_provider->t = static_cast<QWaylandQuickSurface *>(surface())->texture();
@@ -354,6 +352,11 @@ QSGNode *QWaylandSurfaceItem::updatePaintNode(QSGNode *oldNode, UpdatePaintNodeD
if (m_newTexture)
emit m_provider->textureChanged();
m_newTexture = false;
+}
+
+QSGNode *QWaylandSurfaceItem::updatePaintNode(QSGNode *oldNode, UpdatePaintNodeData *)
+{
+ bool mapped = surface() && surface()->isMapped();
if (!mapped || !m_provider->t || !m_paintEnabled) {
delete oldNode;
diff --git a/src/compositor/compositor_api/qwaylandsurfaceitem.h b/src/compositor/compositor_api/qwaylandsurfaceitem.h
index fb70705b2..2573fba3e 100644
--- a/src/compositor/compositor_api/qwaylandsurfaceitem.h
+++ b/src/compositor/compositor_api/qwaylandsurfaceitem.h
@@ -80,6 +80,7 @@ public:
bool paintEnabled() const;
bool touchEventsEnabled() const { return m_touchEventsEnabled; }
bool resizeSurfaceToItem() const { return m_resizeSurfaceToItem; }
+ void updateTexture();
void setTouchEventsEnabled(bool enabled);
void setResizeSurfaceToItem(bool enabled);
@@ -124,7 +125,6 @@ protected:
private:
friend class QWaylandSurfaceNode;
- void updateTexture();
void init(QWaylandQuickSurface *);
static QMutex *mutex;
diff --git a/src/compositor/compositor_api/qwaylandsurfaceview.cpp b/src/compositor/compositor_api/qwaylandsurfaceview.cpp
index 3e2c546e0..e6fd90587 100644
--- a/src/compositor/compositor_api/qwaylandsurfaceview.cpp
+++ b/src/compositor/compositor_api/qwaylandsurfaceview.cpp
@@ -64,8 +64,10 @@ QWaylandSurfaceView::QWaylandSurfaceView(QWaylandSurface *surf)
QWaylandSurfaceView::~QWaylandSurfaceView()
{
- if (d->surface)
+ if (d->surface) {
d->surface->destroy();
+ d->surface->d_func()->views.removeOne(this);
+ }
delete d;
}
diff --git a/src/compositor/wayland_wrapper/qwldataoffer_p.h b/src/compositor/wayland_wrapper/qwldataoffer_p.h
index 5911819d8..643322f32 100644
--- a/src/compositor/wayland_wrapper/qwldataoffer_p.h
+++ b/src/compositor/wayland_wrapper/qwldataoffer_p.h
@@ -41,6 +41,7 @@
#ifndef WLDATAOFFER_H
#define WLDATAOFFER_H
+#include <QPointer>
#include <QtCompositor/private/qwayland-server-wayland.h>
QT_BEGIN_NAMESPACE
@@ -63,7 +64,7 @@ protected:
void data_offer_destroy_resource(Resource *resource) Q_DECL_OVERRIDE;
private:
- DataSource *m_dataSource;
+ QPointer<DataSource> m_dataSource;
};
}
diff --git a/src/compositor/wayland_wrapper/qwldatasource_p.h b/src/compositor/wayland_wrapper/qwldatasource_p.h
index 01ac4cbd9..013f4b54f 100644
--- a/src/compositor/wayland_wrapper/qwldatasource_p.h
+++ b/src/compositor/wayland_wrapper/qwldatasource_p.h
@@ -42,7 +42,7 @@
#define WLDATASOURCE_H
#include <QtCompositor/private/qwayland-server-wayland.h>
-
+#include <QObject>
#include <QtCore/QList>
QT_BEGIN_NAMESPACE
@@ -53,7 +53,7 @@ class DataOffer;
class DataDevice;
class DataDeviceManager;
-class DataSource : public QtWaylandServer::wl_data_source
+class DataSource : public QObject, public QtWaylandServer::wl_data_source
{
public:
DataSource(struct wl_client *client, uint32_t id, uint32_t time);
diff --git a/src/compositor/wayland_wrapper/qwlextendedsurface.cpp b/src/compositor/wayland_wrapper/qwlextendedsurface.cpp
index 55878295d..e4ba40e70 100644
--- a/src/compositor/wayland_wrapper/qwlextendedsurface.cpp
+++ b/src/compositor/wayland_wrapper/qwlextendedsurface.cpp
@@ -174,7 +174,7 @@ void ExtendedSurface::extended_surface_set_window_flags(Resource *resource, int3
{
Q_UNUSED(resource);
QWaylandSurface::WindowFlags windowFlags(flags);
- if (m_surface || windowFlags == m_windowFlags)
+ if (!m_surface || windowFlags == m_windowFlags)
return;
m_windowFlags = windowFlags;
emit m_surface->waylandSurface()->windowFlagsChanged(windowFlags);