diff options
| author | vaxerski <43317083+vaxerski@users.noreply.github.com> | 2022-12-08 12:08:41 +0000 |
|---|---|---|
| committer | vaxerski <43317083+vaxerski@users.noreply.github.com> | 2022-12-08 12:08:41 +0000 |
| commit | 0803febac521ae07394eb10a628b9507118335eb (patch) | |
| tree | 3805af4c0b8f13bd8f8abf973a9a7f755ff29004 /src/helpers/MiscFunctions.cpp | |
| parent | 6259202c0182fe3e7e36ab5b3010db567738375a (diff) | |
optimize m+- and e+- workspace opts
Diffstat (limited to 'src/helpers/MiscFunctions.cpp')
| -rw-r--r-- | src/helpers/MiscFunctions.cpp | 70 |
1 files changed, 29 insertions, 41 deletions
diff --git a/src/helpers/MiscFunctions.cpp b/src/helpers/MiscFunctions.cpp index 5f2aae6a..9bd94a7c 100644 --- a/src/helpers/MiscFunctions.cpp +++ b/src/helpers/MiscFunctions.cpp @@ -277,51 +277,39 @@ int getWorkspaceIDFromString(const std::string& in, std::string& outName) { // result now has +/- what we should move on mon int remains = (int)result; - int currentID = g_pCompositor->m_pLastMonitor->activeWorkspace; - int searchID = currentID; - - while (remains != 0) { - if (remains < 0) - searchID--; - else - searchID++; - - if (g_pCompositor->workspaceIDOutOfBounds(searchID)){ - // means we need to wrap around - int lowestID = 99999; - int highestID = -99999; - - for (auto& w : g_pCompositor->m_vWorkspaces) { - if (g_pCompositor->isWorkspaceSpecial(w->m_iID)) - continue; - - if (w->m_iID < lowestID) - lowestID = w->m_iID; - - if (w->m_iID > highestID) - highestID = w->m_iID; - } - - if (remains < 0) - searchID = highestID; - else - searchID = lowestID; - } + + std::vector<int> validWSes; + for (auto& ws : g_pCompositor->m_vWorkspaces) { + if (ws->m_bIsSpecialWorkspace || (ws->m_iMonitorID != g_pCompositor->m_pLastMonitor->ID && !onAllMonitors)) + continue; + + validWSes.push_back(ws->m_iID); + } - if (const auto PWORKSPACE = g_pCompositor->getWorkspaceByID(searchID); PWORKSPACE && !PWORKSPACE->m_bIsSpecialWorkspace) { - if (onAllMonitors || PWORKSPACE->m_iMonitorID == g_pCompositor->m_pLastMonitor->ID) { - currentID = PWORKSPACE->m_iID; + // get the offset + remains = remains < 0 ? -((-remains) % validWSes.size()) : remains % validWSes.size(); - if (remains < 0) - remains++; - else - remains--; - } + // get the current item + int currentItem = -1; + for (size_t i = 0; i < validWSes.size(); i++) { + if (validWSes[i] == g_pCompositor->m_pLastMonitor->activeWorkspace) { + currentItem = i; + break; } } - result = currentID; - outName = g_pCompositor->getWorkspaceByID(currentID)->m_szName; + // apply + currentItem += remains; + + // sanitize + if (currentItem >= (int)validWSes.size()) { + currentItem = currentItem % validWSes.size(); + } else if (currentItem < 0) { + currentItem = validWSes.size() + currentItem; + } + + result = validWSes[currentItem]; + outName = g_pCompositor->getWorkspaceByID(validWSes[currentItem])->m_szName; } else { if (in[0] == '+' || in[0] == '-') { @@ -503,4 +491,4 @@ int64_t configStringToInt(const std::string& VALUE) { return 0; } return stol(VALUE); -} +}
\ No newline at end of file |
