diff options
| author | Maxime Nordier <darkcreepy59@gmail.com> | 2025-07-30 22:37:36 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-07-30 22:37:36 +0200 |
| commit | 23be1db1e33125bfa4c04abbaf8ea560415ba367 (patch) | |
| tree | 63e5decaa6e09cc910227dbe62431ef9969734fd /src | |
| parent | f309d860035373e6d1473142865fb8a39923f01f (diff) | |
dnd: drop on tablet pen tip up (#11270)
Diffstat (limited to 'src')
| -rw-r--r-- | src/managers/input/Tablets.cpp | 3 | ||||
| -rw-r--r-- | src/protocols/core/DataDevice.cpp | 9 | ||||
| -rw-r--r-- | src/protocols/core/DataDevice.hpp | 1 |
3 files changed, 13 insertions, 0 deletions
diff --git a/src/managers/input/Tablets.cpp b/src/managers/input/Tablets.cpp index 4aa80061..e69fc9be 100644 --- a/src/managers/input/Tablets.cpp +++ b/src/managers/input/Tablets.cpp @@ -2,6 +2,7 @@ #include "../../desktop/Window.hpp" #include "../../protocols/Tablet.hpp" #include "../../devices/Tablet.hpp" +#include "../../managers/HookSystemManager.hpp" #include "../../managers/PointerManager.hpp" #include "../../managers/SeatManager.hpp" #include "../../protocols/PointerConstraints.hpp" @@ -167,6 +168,8 @@ void CInputManager::onTabletAxis(CTablet::SAxisEvent e) { } void CInputManager::onTabletTip(CTablet::STipEvent e) { + EMIT_HOOK_EVENT_CANCELLABLE("tabletTip", e); + const auto PTAB = e.tablet; const auto PTOOL = ensureTabletToolPresent(e.tool); const auto POS = e.tip; diff --git a/src/protocols/core/DataDevice.cpp b/src/protocols/core/DataDevice.cpp index 0ede65ed..254a55a3 100644 --- a/src/protocols/core/DataDevice.cpp +++ b/src/protocols/core/DataDevice.cpp @@ -591,6 +591,14 @@ void CWLDataDeviceProtocol::initiateDrag(WP<CWLDataSourceResource> currentSource dropDrag(); }); + m_dnd.tabletTip = g_pHookSystem->hookDynamic("tabletTip", [this](void* self, SCallbackInfo& info, std::any e) { + auto E = std::any_cast<CTablet::STipEvent>(e); + if (!E.in) { + LOGM(LOG, "Dropping drag on tablet tipUp"); + dropDrag(); + } + }); + m_dnd.mouseMove = g_pHookSystem->hookDynamic("mouseMove", [this](void* self, SCallbackInfo& info, std::any e) { auto V = std::any_cast<const Vector2D>(e); if (m_dnd.focusedDevice && g_pSeatManager->m_state.dndPointerFocus) { @@ -695,6 +703,7 @@ void CWLDataDeviceProtocol::cleanupDndState(bool resetDevice, bool resetSource, m_dnd.mouseMove.reset(); m_dnd.touchUp.reset(); m_dnd.touchMove.reset(); + m_dnd.tabletTip.reset(); if (resetDevice) m_dnd.focusedDevice.reset(); diff --git a/src/protocols/core/DataDevice.hpp b/src/protocols/core/DataDevice.hpp index d54927d2..8b52933e 100644 --- a/src/protocols/core/DataDevice.hpp +++ b/src/protocols/core/DataDevice.hpp @@ -180,6 +180,7 @@ class CWLDataDeviceProtocol : public IWaylandProtocol { SP<HOOK_CALLBACK_FN> mouseButton; SP<HOOK_CALLBACK_FN> touchUp; SP<HOOK_CALLBACK_FN> touchMove; + SP<HOOK_CALLBACK_FN> tabletTip; } m_dnd; void abortDrag(); |
