diff options
| author | vaxerski <43317083+vaxerski@users.noreply.github.com> | 2023-04-20 23:59:31 +0100 |
|---|---|---|
| committer | vaxerski <43317083+vaxerski@users.noreply.github.com> | 2023-04-20 23:59:31 +0100 |
| commit | 510db64860fa307e33db5fdb843c6cc5a428b5a4 (patch) | |
| tree | 67ba9f40af6e260747af708345f3045d82b87e74 | |
| parent | b15803510c67b7b89090c99f03781d9052c959f5 (diff) | |
hyprctl: allow spaces in cursor themes
| -rw-r--r-- | hyprctl/main.cpp | 5 | ||||
| -rw-r--r-- | 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 = ""; - - auto nextItem = [&]() { - auto idx = request.find_first_of(' '); - - 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(); + CVarList vars(request, 0, ' '); - const auto SIZE = curitem; + 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 (!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); |
