config: fix gesture dispatcher parsing with whitespaces (#11784)

* config: fix gesture dispatcher parsing with whitespaces

Some dispatcher functions (e.g., `moveFocusTo`) expect the given string to be
stripped of whitepsaces.

This fixes `gesture` line parsing: rather than calling dispatcher functions
with the original string, we reuse words parsed by `CConstVarList` and join
them with a comma.

* tests/gestures: Add a test for `movecursortocorner`
This commit is contained in:
Nikolai Nechaev 2025-09-26 22:49:07 +09:00 committed by GitHub
parent d8f615751a
commit 4f3dd1ddb4
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 15 additions and 8 deletions

View file

@ -3163,14 +3163,10 @@ std::optional<std::string> CConfigManager::handleGesture(const std::string& comm
std::expected<void, std::string> result;
if (data[startDataIdx] == "dispatcher") {
auto dispatcherArgsIt = value.begin();
for (int i = 0; i < startDataIdx + 2 && dispatcherArgsIt < value.end(); ++i) {
dispatcherArgsIt = std::find(dispatcherArgsIt, value.end(), ',') + 1;
}
result = g_pTrackpadGestures->addGesture(makeUnique<CDispatcherTrackpadGesture>(std::string{data[startDataIdx + 1]}, std::string(dispatcherArgsIt, value.end())),
fingerCount, direction, modMask, deltaScale);
} else if (data[startDataIdx] == "workspace")
if (data[startDataIdx] == "dispatcher")
result = g_pTrackpadGestures->addGesture(makeUnique<CDispatcherTrackpadGesture>(std::string{data[startDataIdx + 1]}, data.join(",", startDataIdx + 2)), fingerCount,
direction, modMask, deltaScale);
else if (data[startDataIdx] == "workspace")
result = g_pTrackpadGestures->addGesture(makeUnique<CWorkspaceSwipeGesture>(), fingerCount, direction, modMask, deltaScale);
else if (data[startDataIdx] == "resize")
result = g_pTrackpadGestures->addGesture(makeUnique<CResizeTrackpadGesture>(), fingerCount, direction, modMask, deltaScale);