aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorVaxry <[email protected]>2023-11-12 13:40:02 +0000
committerVaxry <[email protected]>2023-11-12 13:40:02 +0000
commit65efde32c99b8119d3c55729508b92801b60cc13 (patch)
tree6d673dc96b5ea1b61e8377f6f071d205a18e9e58
parent69e314207d193eb67be0ae153d50c6c6bcee4b60 (diff)
downloadHyprland-65efde32c99b8119d3c55729508b92801b60cc13.tar.gz
Hyprland-65efde32c99b8119d3c55729508b92801b60cc13.zip
internal: make getPlusMinusKeywordResult return optional
-rw-r--r--src/helpers/MiscFunctions.cpp29
-rw-r--r--src/helpers/MiscFunctions.hpp2
-rw-r--r--src/managers/KeybindManager.cpp26
3 files changed, 32 insertions, 25 deletions
diff --git a/src/helpers/MiscFunctions.cpp b/src/helpers/MiscFunctions.cpp
index 7a9c5e5e..85a81657 100644
--- a/src/helpers/MiscFunctions.cpp
+++ b/src/helpers/MiscFunctions.cpp
@@ -204,12 +204,12 @@ std::string removeBeginEndSpacesTabs(std::string str) {
return str;
}
-float getPlusMinusKeywordResult(std::string source, float relative) {
+std::optional<float> getPlusMinusKeywordResult(std::string source, float relative) {
try {
return relative + stof(source);
} catch (...) {
Debug::log(ERR, "Invalid arg \"{}\" in getPlusMinusKeywordResult!", source);
- return INT_MAX;
+ return {};
}
}
@@ -300,7 +300,13 @@ int getWorkspaceIDFromString(const std::string& in, std::string& outName) {
Debug::log(ERR, "Relative monitor workspace on monitor null!");
return WORKSPACE_INVALID;
}
- result = (int)getPlusMinusKeywordResult(in.substr(1), 0);
+
+ const auto PLUSMINUSRESULT = getPlusMinusKeywordResult(in.substr(1), 0);
+
+ if (!PLUSMINUSRESULT.has_value())
+ return WORKSPACE_INVALID;
+
+ result = (int)PLUSMINUSRESULT.value();
int remains = (int)result;
@@ -436,7 +442,12 @@ int getWorkspaceIDFromString(const std::string& in, std::string& outName) {
}
// monitor relative
- result = (int)getPlusMinusKeywordResult(in.substr(1), 0);
+ const auto PLUSMINUSRESULT = getPlusMinusKeywordResult(in.substr(1), 0);
+
+ if (!PLUSMINUSRESULT.has_value())
+ return WORKSPACE_INVALID;
+
+ result = (int)PLUSMINUSRESULT.value();
// result now has +/- what we should move on mon
int remains = (int)result;
@@ -477,9 +488,13 @@ int getWorkspaceIDFromString(const std::string& in, std::string& outName) {
outName = g_pCompositor->getWorkspaceByID(validWSes[currentItem])->m_szName;
} else {
if (in[0] == '+' || in[0] == '-') {
- if (g_pCompositor->m_pLastMonitor)
- result = std::max((int)getPlusMinusKeywordResult(in, g_pCompositor->m_pLastMonitor->activeWorkspace), 1);
- else {
+ if (g_pCompositor->m_pLastMonitor) {
+ const auto PLUSMINUSRESULT = getPlusMinusKeywordResult(in, g_pCompositor->m_pLastMonitor->activeWorkspace);
+ if (!PLUSMINUSRESULT.has_value())
+ return WORKSPACE_INVALID;
+
+ result = std::max((int)PLUSMINUSRESULT.value(), 1);
+ } else {
Debug::log(ERR, "Relative workspace on no mon!");
return WORKSPACE_INVALID;
}
diff --git a/src/helpers/MiscFunctions.hpp b/src/helpers/MiscFunctions.hpp
index b2fe5858..90479121 100644
--- a/src/helpers/MiscFunctions.hpp
+++ b/src/helpers/MiscFunctions.hpp
@@ -27,7 +27,7 @@ void logSystemInfo();
std::string execAndGet(const char*);
int64_t getPPIDof(int64_t pid);
int64_t configStringToInt(const std::string&);
-float getPlusMinusKeywordResult(std::string in, float relative);
+std::optional<float> getPlusMinusKeywordResult(std::string in, float relative);
void matrixProjection(float mat[9], int w, int h, wl_output_transform tr);
double normalizeAngleRad(double ang);
std::string replaceInString(std::string subject, const std::string& search, const std::string& replace);
diff --git a/src/managers/KeybindManager.cpp b/src/managers/KeybindManager.cpp
index d8307de2..553872a5 100644
--- a/src/managers/KeybindManager.cpp
+++ b/src/managers/KeybindManager.cpp
@@ -1216,24 +1216,16 @@ void CKeybindManager::toggleSplit(std::string args) {
}
void CKeybindManager::alterSplitRatio(std::string args) {
- float splitratio = 0;
- bool exact = false;
+ std::optional<float> splitResult;
+ bool exact = false;
- if (args == "+" || args == "-") {
- Debug::log(LOG, "alterSplitRatio: using LEGACY +/-, consider switching to the Hyprland syntax.");
- splitratio = (args == "+" ? 0.05f : -0.05f);
- }
-
- if (splitratio == 0) {
- if (args.starts_with("exact")) {
- exact = true;
- splitratio = getPlusMinusKeywordResult(args.substr(5), 0);
- } else {
- splitratio = getPlusMinusKeywordResult(args, 0);
- }
- }
+ if (args.starts_with("exact")) {
+ exact = true;
+ splitResult = getPlusMinusKeywordResult(args.substr(5), 0);
+ } else
+ splitResult = getPlusMinusKeywordResult(args, 0);
- if (splitratio == WORKSPACE_INVALID) {
+ if (!splitResult.has_value()) {
Debug::log(ERR, "Splitratio invalid in alterSplitRatio!");
return;
}
@@ -1243,7 +1235,7 @@ void CKeybindManager::alterSplitRatio(std::string args) {
if (!PLASTWINDOW)
return;
- g_pLayoutManager->getCurrentLayout()->alterSplitRatio(PLASTWINDOW, splitratio, exact);
+ g_pLayoutManager->getCurrentLayout()->alterSplitRatio(PLASTWINDOW, splitResult.value(), exact);
}
void CKeybindManager::focusMonitor(std::string arg) {