From 1e3a06560fa6b2d906f8ecc9ec41b50e9b034cef Mon Sep 17 00:00:00 2001 From: Vaxry Date: Mon, 8 Sep 2025 20:24:45 +0100 Subject: [PATCH] gestures: add unset ref https://github.com/hyprwm/Hyprland/pull/11490 --- src/config/ConfigManager.cpp | 2 ++ src/managers/input/trackpad/TrackpadGestures.cpp | 12 ++++++++++++ src/managers/input/trackpad/TrackpadGestures.hpp | 1 + 3 files changed, 15 insertions(+) diff --git a/src/config/ConfigManager.cpp b/src/config/ConfigManager.cpp index ac789c19..d7d29763 100644 --- a/src/config/ConfigManager.cpp +++ b/src/config/ConfigManager.cpp @@ -3247,6 +3247,8 @@ std::optional CConfigManager::handleGesture(const std::string& comm result = g_pTrackpadGestures->addGesture(makeUnique(std::string{data[startDataIdx + 1]}), fingerCount, direction, modMask, deltaScale); else if (data[startDataIdx] == "fullscreen") result = g_pTrackpadGestures->addGesture(makeUnique(std::string{data[startDataIdx + 1]}), fingerCount, direction, modMask, deltaScale); + else if (data[startDataIdx] == "unset") + result = g_pTrackpadGestures->removeGesture(fingerCount, direction, modMask, deltaScale); else return std::format("Invalid gesture: {}", data[startDataIdx]); diff --git a/src/managers/input/trackpad/TrackpadGestures.cpp b/src/managers/input/trackpad/TrackpadGestures.cpp index 1d628da4..de5639f8 100644 --- a/src/managers/input/trackpad/TrackpadGestures.cpp +++ b/src/managers/input/trackpad/TrackpadGestures.cpp @@ -89,6 +89,18 @@ std::expected CTrackpadGestures::addGesture(UP CTrackpadGestures::removeGesture(size_t fingerCount, eTrackpadGestureDirection direction, uint32_t modMask, float deltaScale) { + const auto IT = std::ranges::find_if( + m_gestures, [&](const auto& g) { return g->fingerCount == fingerCount && g->direction == direction && g->modMask == modMask && g->deltaScale == deltaScale; }); + + if (IT == m_gestures.end()) + return std::unexpected("Can't remove a non-existent gesture"); + + std::erase(m_gestures, *IT); + + return {}; +} + void CTrackpadGestures::gestureBegin(const IPointer::SSwipeBeginEvent& e) { if (m_activeGesture) { Debug::log(ERR, "CTrackpadGestures::gestureBegin (swipe) but m_activeGesture is already present"); diff --git a/src/managers/input/trackpad/TrackpadGestures.hpp b/src/managers/input/trackpad/TrackpadGestures.hpp index 3d0745df..411a1fbb 100644 --- a/src/managers/input/trackpad/TrackpadGestures.hpp +++ b/src/managers/input/trackpad/TrackpadGestures.hpp @@ -12,6 +12,7 @@ class CTrackpadGestures { public: void clearGestures(); std::expected addGesture(UP&& gesture, size_t fingerCount, eTrackpadGestureDirection direction, uint32_t modMask, float deltaScale); + std::expected removeGesture(size_t fingerCount, eTrackpadGestureDirection direction, uint32_t modMask, float deltaScale); void gestureBegin(const IPointer::SSwipeBeginEvent& e); void gestureUpdate(const IPointer::SSwipeUpdateEvent& e);