From 00ee1cf98e3d8ef7cf71a9a505ba8d1382697e35 Mon Sep 17 00:00:00 2001 From: Vaxry Date: Wed, 28 Aug 2024 13:45:06 +0200 Subject: [PATCH] data-device: send dndFinished when dnd offer is destroyed while unfinished fixes #7496 see https://invent.kde.org/plasma/kwin/-/commit/711c5bb43f2823766d5189dc8d567c8f4cec253c see https://bugs.kde.org/show_bug.cgi\?id\=482142 --- src/protocols/core/DataDevice.cpp | 8 ++++++++ src/protocols/core/DataDevice.hpp | 4 +++- src/protocols/types/DataDevice.cpp | 4 ++++ src/protocols/types/DataDevice.hpp | 1 + 4 files changed, 16 insertions(+), 1 deletion(-) diff --git a/src/protocols/core/DataDevice.cpp b/src/protocols/core/DataDevice.cpp index b7640af3..8c1a48d8 100644 --- a/src/protocols/core/DataDevice.cpp +++ b/src/protocols/core/DataDevice.cpp @@ -67,6 +67,13 @@ CWLDataOfferResource::CWLDataOfferResource(SP resource_, SPhasDnd() || dead) + return; + + source->sendDndFinished(); +} + bool CWLDataOfferResource::good() { return resource->resource(); } @@ -173,6 +180,7 @@ void CWLDataSourceResource::sendDndDropPerformed() { if (resource->version() < 3) return; resource->sendDndDropPerformed(); + dropped = true; } void CWLDataSourceResource::sendDndFinished() { diff --git a/src/protocols/core/DataDevice.hpp b/src/protocols/core/DataDevice.hpp index 22bb9376..8aaf46be 100644 --- a/src/protocols/core/DataDevice.hpp +++ b/src/protocols/core/DataDevice.hpp @@ -29,6 +29,7 @@ class CMonitor; class CWLDataOfferResource { public: CWLDataOfferResource(SP resource_, SP source_); + ~CWLDataOfferResource(); bool good(); void sendData(); @@ -63,14 +64,15 @@ class CWLDataSourceResource : public IDataSource { virtual bool hasDnd(); virtual bool dndDone(); virtual void error(uint32_t code, const std::string& msg); + virtual void sendDndFinished(); void sendDndDropPerformed(); - void sendDndFinished(); void sendDndAction(wl_data_device_manager_dnd_action a); bool used = false; bool dnd = false; bool dndSuccess = false; + bool dropped = false; WP device; WP self; diff --git a/src/protocols/types/DataDevice.cpp b/src/protocols/types/DataDevice.cpp index eb6969cc..e95f1c76 100644 --- a/src/protocols/types/DataDevice.cpp +++ b/src/protocols/types/DataDevice.cpp @@ -19,3 +19,7 @@ void IDataSource::markUsed() { eDataSourceType IDataSource::type() { return DATA_SOURCE_TYPE_WAYLAND; } + +void IDataSource::sendDndFinished() { + ; +} diff --git a/src/protocols/types/DataDevice.hpp b/src/protocols/types/DataDevice.hpp index 948f47a0..f6757e1c 100644 --- a/src/protocols/types/DataDevice.hpp +++ b/src/protocols/types/DataDevice.hpp @@ -21,6 +21,7 @@ class IDataSource { virtual void cancelled() = 0; virtual bool hasDnd(); virtual bool dndDone(); + virtual void sendDndFinished(); virtual bool used(); virtual void markUsed(); virtual void error(uint32_t code, const std::string& msg) = 0;