diff --git a/hyprtester/src/tests/main/gestures.cpp b/hyprtester/src/tests/main/gestures.cpp index 94ac1261..4c56e904 100644 --- a/hyprtester/src/tests/main/gestures.cpp +++ b/hyprtester/src/tests/main/gestures.cpp @@ -146,6 +146,16 @@ static bool test() { EXPECT(Tests::windowCount(), 0); + // This test ensures that `movecursortocorner`, which expects + // a single-character direction argument, is parsed correctly. + Tests::spawnKitty(); + OK(getFromSocket("/dispatch movecursortocorner 0")); + const std::string cursorPos1 = getFromSocket("/cursorpos"); + OK(getFromSocket("/dispatch plugin:test:gesture left,4")); + const std::string cursorPos2 = getFromSocket("/cursorpos"); + // The cursor should have moved because of the gesture + EXPECT(cursorPos1 != cursorPos2, true); + // kill all NLog::log("{}Killing all windows", Colors::YELLOW); Tests::killAllWindows(); diff --git a/hyprtester/test.conf b/hyprtester/test.conf index 0501b465..a606aa11 100644 --- a/hyprtester/test.conf +++ b/hyprtester/test.conf @@ -333,6 +333,7 @@ gesture = 3, down, mod:ALT, float gesture = 3, horizontal, mod:ALT, workspace gesture = 4, up, dispatcher, sendshortcut, ctrl, d, activewindow +gesture = 4, left, dispatcher, movecursortocorner, 1 windowrule = float, pin, class:wr_kitty windowrule = size 200 200, class:wr_kitty diff --git a/src/config/ConfigManager.cpp b/src/config/ConfigManager.cpp index cb82864f..70f0d2a3 100644 --- a/src/config/ConfigManager.cpp +++ b/src/config/ConfigManager.cpp @@ -3163,14 +3163,10 @@ std::optional CConfigManager::handleGesture(const std::string& comm std::expected 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(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(std::string{data[startDataIdx + 1]}, data.join(",", startDataIdx + 2)), fingerCount, + direction, modMask, deltaScale); + else if (data[startDataIdx] == "workspace") result = g_pTrackpadGestures->addGesture(makeUnique(), fingerCount, direction, modMask, deltaScale); else if (data[startDataIdx] == "resize") result = g_pTrackpadGestures->addGesture(makeUnique(), fingerCount, direction, modMask, deltaScale);