Commit 6568802c authored by David Edmundson's avatar David Edmundson
Browse files

[server] Wrap proxyRemoveSurface in smart pointer

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:
parent b8c28c8a
......@@ -61,7 +61,7 @@ public:
Drag drag;
SurfaceInterface *proxyRemoteSurface = nullptr;
QPointer<SurfaceInterface> proxyRemoteSurface;
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 =;
const bool pointerGrab = seat->hasImplicitPointerGrab(serial) && seat->focusedPointerSurface() == focusSurface;
if (!pointerGrab) {
......@@ -216,7 +216,7 @@ SurfaceInterface *DataDeviceInterface::icon() const
SurfaceInterface *DataDeviceInterface::origin() const
return d->proxyRemoteSurface ? d->proxyRemoteSurface : d->surface;
return d->proxyRemoteSurface ? d-> : d->surface;
DataSourceInterface *DataDeviceInterface::selection() const
Supports Markdown
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