algo/scrolling: add config options for focus and swapcol wrapping (#13518)
This commit is contained in:
parent
803e81ac39
commit
3284dd729b
5 changed files with 180 additions and 6 deletions
|
|
@ -1255,8 +1255,9 @@ std::expected<void, std::string> CScrollingAlgorithm::layoutMsg(const std::strin
|
|||
m_scrollingData->recalculate();
|
||||
}
|
||||
} else if (ARGS[0] == "focus") {
|
||||
const auto TDATA = dataFor(Desktop::focusState()->window() ? Desktop::focusState()->window()->layoutTarget() : nullptr);
|
||||
static const auto PNOFALLBACK = CConfigValue<Hyprlang::INT>("general:no_focus_fallback");
|
||||
const auto TDATA = dataFor(Desktop::focusState()->window() ? Desktop::focusState()->window()->layoutTarget() : nullptr);
|
||||
static const auto PNOFALLBACK = CConfigValue<Hyprlang::INT>("general:no_focus_fallback");
|
||||
static const auto PCONFWRAPFOCUS = CConfigValue<Hyprlang::INT>("scrolling:wrap_focus");
|
||||
|
||||
if (!TDATA || ARGS[1].empty())
|
||||
return std::unexpected("no window to focus");
|
||||
|
|
@ -1312,7 +1313,7 @@ std::expected<void, std::string> CScrollingAlgorithm::layoutMsg(const std::strin
|
|||
g_pCompositor->warpCursorTo(TDATA->target->window()->middle());
|
||||
return {};
|
||||
} else
|
||||
PREV = m_scrollingData->columns.back();
|
||||
PREV = (*PCONFWRAPFOCUS == 1) ? m_scrollingData->columns.back() : m_scrollingData->columns.front();
|
||||
}
|
||||
|
||||
auto pTargetData = findBestNeighbor(TDATA, PREV);
|
||||
|
|
@ -1334,7 +1335,7 @@ std::expected<void, std::string> CScrollingAlgorithm::layoutMsg(const std::strin
|
|||
g_pCompositor->warpCursorTo(TDATA->target->window()->middle());
|
||||
return {};
|
||||
} else
|
||||
NEXT = m_scrollingData->columns.front();
|
||||
NEXT = (*PCONFWRAPFOCUS == 1) ? m_scrollingData->columns.front() : m_scrollingData->columns.back();
|
||||
}
|
||||
|
||||
auto pTargetData = findBestNeighbor(TDATA, NEXT);
|
||||
|
|
@ -1361,6 +1362,8 @@ std::expected<void, std::string> CScrollingAlgorithm::layoutMsg(const std::strin
|
|||
|
||||
m_scrollingData->recalculate();
|
||||
} else if (ARGS[0] == "swapcol") {
|
||||
static const auto PCONFWRAPSWAPCOL = CConfigValue<Hyprlang::INT>("scrolling:wrap_swapcol");
|
||||
|
||||
if (ARGS.size() < 2)
|
||||
return std::unexpected("not enough args");
|
||||
|
||||
|
|
@ -1386,9 +1389,15 @@ std::expected<void, std::string> CScrollingAlgorithm::layoutMsg(const std::strin
|
|||
|
||||
// wrap around swaps
|
||||
if (direction == "l")
|
||||
targetIdx = (currentIdx == 0) ? (colCount - 1) : (currentIdx - 1);
|
||||
if (*PCONFWRAPSWAPCOL == 1)
|
||||
targetIdx = (currentIdx == 0) ? (colCount - 1) : (currentIdx - 1);
|
||||
else
|
||||
targetIdx = (currentIdx == 0) ? 0 : (currentIdx - 1);
|
||||
else if (direction == "r")
|
||||
targetIdx = (currentIdx == (int64_t)colCount - 1) ? 0 : (currentIdx + 1);
|
||||
if (*PCONFWRAPSWAPCOL == 1)
|
||||
targetIdx = (currentIdx == (int64_t)colCount - 1) ? 0 : (currentIdx + 1);
|
||||
else
|
||||
targetIdx = (currentIdx == (int64_t)colCount - 1) ? (colCount - 1) : (currentIdx + 1);
|
||||
else
|
||||
return std::unexpected("no target (invalid direction?)");
|
||||
;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue