From 510db64860fa307e33db5fdb843c6cc5a428b5a4 Mon Sep 17 00:00:00 2001 From: vaxerski <43317083+vaxerski@users.noreply.github.com> Date: Thu, 20 Apr 2023 23:59:31 +0100 Subject: [PATCH] hyprctl: allow spaces in cursor themes --- hyprctl/main.cpp | 5 ++++- src/debug/HyprCtl.cpp | 47 ++++++++++++++----------------------------- 2 files changed, 19 insertions(+), 33 deletions(-) diff --git a/hyprctl/main.cpp b/hyprctl/main.cpp index 87c332fb..1639bb67 100644 --- a/hyprctl/main.cpp +++ b/hyprctl/main.cpp @@ -227,7 +227,10 @@ int setcursorRequest(int argc, char** argv) { return 1; } - std::string rq = "setcursor " + std::string(argv[2]) + " " + std::string(argv[3]); + std::string rq = "setcursor "; + for (size_t i = 2; i < argc; ++i) + rq += std::string(argv[i]) + " "; + rq.pop_back(); request(rq); return 0; diff --git a/src/debug/HyprCtl.cpp b/src/debug/HyprCtl.cpp index 0603b182..4153a2d2 100644 --- a/src/debug/HyprCtl.cpp +++ b/src/debug/HyprCtl.cpp @@ -804,47 +804,30 @@ std::string dispatchBatch(std::string request) { } std::string dispatchSetCursor(std::string request) { - std::string curitem = ""; + CVarList vars(request, 0, ' '); - auto nextItem = [&]() { - auto idx = request.find_first_of(' '); + const auto SIZESTR = vars[vars.size() - 1]; + std::string theme = ""; + for (size_t i = 1; i < vars.size() - 1; ++i) + theme += vars[i] + " "; + theme.pop_back(); - if (idx != std::string::npos) { - curitem = request.substr(0, idx); - request = request.substr(idx + 1); - } else { - curitem = request; - request = ""; - } - - curitem = removeBeginEndSpacesTabs(curitem); - }; - - nextItem(); - nextItem(); - - const auto THEME = curitem; - - nextItem(); - - const auto SIZE = curitem; - - if (!isNumber(SIZE)) { + int size = 0; + try { + size = std::stoi(SIZESTR); + } catch (...) { return "size not int"; } - const auto SIZEINT = std::stoi(SIZE); - - if (SIZEINT < 1) { - return "size must be positive"; - } + if (size <= 0) + return "size not positive"; wlr_xcursor_manager_destroy(g_pCompositor->m_sWLRXCursorMgr); - g_pCompositor->m_sWLRXCursorMgr = wlr_xcursor_manager_create(THEME.c_str(), SIZEINT); + g_pCompositor->m_sWLRXCursorMgr = wlr_xcursor_manager_create(theme.c_str(), size); - setenv("XCURSOR_SIZE", SIZE.c_str(), true); - setenv("XCURSOR_THEME", THEME.c_str(), true); + setenv("XCURSOR_SIZE", SIZESTR.c_str(), true); + setenv("XCURSOR_THEME", theme.c_str(), true); for (auto& m : g_pCompositor->m_vMonitors) { wlr_xcursor_manager_load(g_pCompositor->m_sWLRXCursorMgr, m->scale);