[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
This commit is contained in:
parent
b8c28c8a85
commit
6568802c95
1 changed files with 3 additions and 3 deletions
|
@ -61,7 +61,7 @@ public:
|
||||||
};
|
};
|
||||||
Drag drag;
|
Drag drag;
|
||||||
|
|
||||||
SurfaceInterface *proxyRemoteSurface = nullptr;
|
QPointer<SurfaceInterface> proxyRemoteSurface;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
DataDeviceInterface *q_func() {
|
DataDeviceInterface *q_func() {
|
||||||
|
@ -104,7 +104,7 @@ void DataDeviceInterface::Private::startDrag(DataSourceInterface *dataSource, Su
|
||||||
SurfaceInterface *focusSurface = origin;
|
SurfaceInterface *focusSurface = origin;
|
||||||
if (proxyRemoteSurface) {
|
if (proxyRemoteSurface) {
|
||||||
// origin is a proxy surface
|
// origin is a proxy surface
|
||||||
focusSurface = proxyRemoteSurface;
|
focusSurface = proxyRemoteSurface.data();
|
||||||
}
|
}
|
||||||
const bool pointerGrab = seat->hasImplicitPointerGrab(serial) && seat->focusedPointerSurface() == focusSurface;
|
const bool pointerGrab = seat->hasImplicitPointerGrab(serial) && seat->focusedPointerSurface() == focusSurface;
|
||||||
if (!pointerGrab) {
|
if (!pointerGrab) {
|
||||||
|
@ -216,7 +216,7 @@ SurfaceInterface *DataDeviceInterface::icon() const
|
||||||
SurfaceInterface *DataDeviceInterface::origin() const
|
SurfaceInterface *DataDeviceInterface::origin() const
|
||||||
{
|
{
|
||||||
Q_D();
|
Q_D();
|
||||||
return d->proxyRemoteSurface ? d->proxyRemoteSurface : d->surface;
|
return d->proxyRemoteSurface ? d->proxyRemoteSurface.data() : d->surface;
|
||||||
}
|
}
|
||||||
|
|
||||||
DataSourceInterface *DataDeviceInterface::selection() const
|
DataSourceInterface *DataDeviceInterface::selection() const
|
||||||
|
|
Loading…
Reference in a new issue