Commit f7763052 authored by David Edmundson's avatar David Edmundson

[server] Wrap proxyRemoveSurface in smart pointer

Summary:
proxyRemoteSurface is a fake wayland surface created for the drag and
drop between X and wayland clients.

The lifespan is not guaranteed to outlive the DataDevice.

Kwin closes Xwl before the other wayland client connections so it's
technically dangling for a bit when events could be dispatched.

Probably will never happen, but better to guard and be safe.

Test Plan: Compiles

Reviewers: #kwin, zzag

Reviewed By: #kwin, zzag

Subscribers: kde-frameworks-devel

Tags: #frameworks

Differential Revision: https://phabricator.kde.org/D22862
parent 0c0a2710
......@@ -61,7 +61,7 @@ public:
};
Drag drag;
SurfaceInterface *proxyRemoteSurface = nullptr;
QPointer<SurfaceInterface> proxyRemoteSurface;
private:
DataDeviceInterface *q_func() {
......@@ -104,7 +104,7 @@ void DataDeviceInterface::Private::startDrag(DataSourceInterface *dataSource, Su
SurfaceInterface *focusSurface = origin;
if (proxyRemoteSurface) {
// origin is a proxy surface
focusSurface = proxyRemoteSurface;
focusSurface = proxyRemoteSurface.data();
}
const bool pointerGrab = seat->hasImplicitPointerGrab(serial) && seat->focusedPointerSurface() == focusSurface;
if (!pointerGrab) {
......@@ -216,7 +216,7 @@ SurfaceInterface *DataDeviceInterface::icon() const
SurfaceInterface *DataDeviceInterface::origin() const
{
Q_D();
return d->proxyRemoteSurface ? d->proxyRemoteSurface : d->surface;
return d->proxyRemoteSurface ? d->proxyRemoteSurface.data() : d->surface;
}
DataSourceInterface *DataDeviceInterface::selection() const
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment