protocols/datadevice: avoid double leave

ref https://github.com/hyprwm/Hyprland/discussions/12494
This commit is contained in:
Vaxry 2025-12-11 00:50:45 +00:00
parent 1ff801f5f3
commit 9aa313402b
Signed by: vaxry
GPG key ID: 665806380871D640
2 changed files with 11 additions and 2 deletions

View file

@ -298,10 +298,17 @@ void CWLDataDeviceResource::sendDataOffer(SP<IDataOffer> offer) {
void CWLDataDeviceResource::sendEnter(uint32_t serial, SP<CWLSurfaceResource> surf, const Vector2D& local, SP<IDataOffer> offer) { void CWLDataDeviceResource::sendEnter(uint32_t serial, SP<CWLSurfaceResource> surf, const Vector2D& local, SP<IDataOffer> offer) {
if (const auto WL = offer->getWayland(); WL) if (const auto WL = offer->getWayland(); WL)
m_resource->sendEnterRaw(serial, surf->getResource()->resource(), wl_fixed_from_double(local.x), wl_fixed_from_double(local.y), WL->m_resource->resource()); m_resource->sendEnterRaw(serial, surf->getResource()->resource(), wl_fixed_from_double(local.x), wl_fixed_from_double(local.y), WL->m_resource->resource());
m_entered = surf;
// FIXME: X11 // FIXME: X11
} }
void CWLDataDeviceResource::sendLeave() { void CWLDataDeviceResource::sendLeave() {
if (!m_entered)
return;
m_entered.reset();
m_resource->sendLeave(); m_resource->sendLeave();
} }

View file

@ -111,8 +111,10 @@ class CWLDataDeviceResource : public IDataDevice {
WP<CWLDataDeviceResource> m_self; WP<CWLDataDeviceResource> m_self;
private: private:
SP<CWlDataDevice> m_resource; SP<CWlDataDevice> m_resource;
wl_client* m_client = nullptr; wl_client* m_client = nullptr;
WP<CWLSurfaceResource> m_entered;
friend class CWLDataDeviceProtocol; friend class CWLDataDeviceProtocol;
}; };