mirror of
https://github.com/hyprwm/Hyprland.git
synced 2025-08-03 21:51:55 -07:00
animations: Add option for animating workspaces as if the first and last were adjacent (#10277)
* add option for animating workspaces as if the first and last were adjacent * change wraparound detection to use IDs instead of dispatcher * move shouldWraparound from MiscFunctions to Monitor
This commit is contained in:
@@ -1100,6 +1100,25 @@ float CMonitor::getDefaultScale() {
|
||||
return 1;
|
||||
}
|
||||
|
||||
static bool shouldWraparound(const WORKSPACEID id1, const WORKSPACEID id2) {
|
||||
static auto PWORKSPACEWRAPAROUND = CConfigValue<Hyprlang::INT>("animations:workspace_wraparound");
|
||||
|
||||
if (!*PWORKSPACEWRAPAROUND)
|
||||
return false;
|
||||
|
||||
WORKSPACEID lowestID = INT64_MAX;
|
||||
WORKSPACEID highestID = INT64_MIN;
|
||||
|
||||
for (auto const& w : g_pCompositor->m_workspaces) {
|
||||
if (w->m_id < 0 || w->m_isSpecialWorkspace)
|
||||
continue;
|
||||
lowestID = std::min(w->m_id, lowestID);
|
||||
highestID = std::max(w->m_id, highestID);
|
||||
}
|
||||
|
||||
return std::min(id1, id2) == lowestID && std::max(id1, id2) == highestID;
|
||||
}
|
||||
|
||||
void CMonitor::changeWorkspace(const PHLWORKSPACE& pWorkspace, bool internal, bool noMouseMove, bool noFocus) {
|
||||
if (!pWorkspace)
|
||||
return;
|
||||
@@ -1123,7 +1142,7 @@ void CMonitor::changeWorkspace(const PHLWORKSPACE& pWorkspace, bool internal, bo
|
||||
m_activeWorkspace = pWorkspace;
|
||||
|
||||
if (!internal) {
|
||||
const auto ANIMTOLEFT = POLDWORKSPACE && pWorkspace->m_id > POLDWORKSPACE->m_id;
|
||||
const auto ANIMTOLEFT = POLDWORKSPACE && (shouldWraparound(pWorkspace->m_id, POLDWORKSPACE->m_id) ^ (pWorkspace->m_id > POLDWORKSPACE->m_id));
|
||||
if (POLDWORKSPACE)
|
||||
POLDWORKSPACE->startAnim(false, ANIMTOLEFT);
|
||||
pWorkspace->startAnim(true, ANIMTOLEFT);
|
||||
|
Reference in New Issue
Block a user