diff --git a/src/managers/KeybindManager.cpp b/src/managers/KeybindManager.cpp index 4bfd14545..4e63e6dc6 100644 --- a/src/managers/KeybindManager.cpp +++ b/src/managers/KeybindManager.cpp @@ -1723,7 +1723,7 @@ SDispatchResult CKeybindManager::changeGroupActive(std::string args) { // index starts from '1'; '0' means last window const int INDEX = std::stoi(args); if (INDEX > PWINDOW->getGroupSize()) - return {}; + return {.success = false, .error = "Index too big, there aren't that many windows in this group"}; if (INDEX == 0) PWINDOW->setGroupCurrent(PWINDOW->getGroupTail()); else @@ -1986,7 +1986,7 @@ SDispatchResult CKeybindManager::moveCurrentWorkspaceToMonitor(std::string args) SDispatchResult CKeybindManager::moveWorkspaceToMonitor(std::string args) { if (!args.contains(' ')) - return {}; + return {.success = false, .error = "Invalid arguments, expected: workspace monitor"}; std::string workspace = args.substr(0, args.find_first_of(' ')); std::string monitor = args.substr(args.find_first_of(' ') + 1); @@ -2129,13 +2129,16 @@ SDispatchResult CKeybindManager::forceRendererReload(std::string args) { SDispatchResult CKeybindManager::resizeActive(std::string args) { const auto PLASTWINDOW = g_pCompositor->m_pLastWindow.lock(); - if (!PLASTWINDOW || PLASTWINDOW->isFullscreen()) - return {}; + if (!PLASTWINDOW) + return {.success = false, .error = "No window found"}; + + if (PLASTWINDOW->isFullscreen()) + return {.success = false, .error = "Window is fullscreen"}; const auto SIZ = g_pCompositor->parseWindowVectorArgsRelative(args, PLASTWINDOW->m_vRealSize->goal()); if (SIZ.x < 1 || SIZ.y < 1) - return {}; + return {.success = false, .error = "Invalid size provided"}; g_pLayoutManager->getCurrentLayout()->resizeActiveWindow(SIZ - PLASTWINDOW->m_vRealSize->goal()); @@ -2148,8 +2151,11 @@ SDispatchResult CKeybindManager::resizeActive(std::string args) { SDispatchResult CKeybindManager::moveActive(std::string args) { const auto PLASTWINDOW = g_pCompositor->m_pLastWindow.lock(); - if (!PLASTWINDOW || PLASTWINDOW->isFullscreen()) - return {}; + if (!PLASTWINDOW) + return {.success = false, .error = "No window found"}; + + if (PLASTWINDOW->isFullscreen()) + return {.success = false, .error = "Window is fullscreen"}; const auto POS = g_pCompositor->parseWindowVectorArgsRelative(args, PLASTWINDOW->m_vRealPosition->goal()); @@ -2171,7 +2177,7 @@ SDispatchResult CKeybindManager::moveWindow(std::string args) { } if (PWINDOW->isFullscreen()) - return {}; + return {.success = false, .error = "Window is fullscreen"}; const auto POS = g_pCompositor->parseWindowVectorArgsRelative(MOVECMD, PWINDOW->m_vRealPosition->goal()); @@ -2193,12 +2199,12 @@ SDispatchResult CKeybindManager::resizeWindow(std::string args) { } if (PWINDOW->isFullscreen()) - return {}; + return {.success = false, .error = "Window is fullscreen"}; const auto SIZ = g_pCompositor->parseWindowVectorArgsRelative(MOVECMD, PWINDOW->m_vRealSize->goal()); if (SIZ.x < 1 || SIZ.y < 1) - return {}; + return {.success = false, .error = "Invalid size provided"}; g_pLayoutManager->getCurrentLayout()->resizeActiveWindow(SIZ - PWINDOW->m_vRealSize->goal(), CORNER_NONE, PWINDOW); @@ -2244,7 +2250,7 @@ SDispatchResult CKeybindManager::focusWindow(std::string regexp) { const auto PWINDOW = g_pCompositor->getWindowByRegex(regexp); if (!PWINDOW) - return {}; + return {.success = false, .error = "No such window found"}; Debug::log(LOG, "Focusing to window name: {}", PWINDOW->m_szTitle); @@ -2304,7 +2310,7 @@ SDispatchResult CKeybindManager::tagWindow(std::string args) { else if (vars.size() == 2) PWINDOW = g_pCompositor->getWindowByRegex(vars[1]); else - return {}; + return {.success = false, .error = "Invalid number of arguments, expected 1 or 2 arguments"}; if (PWINDOW && PWINDOW->m_tags.applyTag(vars[0])) { PWINDOW->updateDynamicRules(); @@ -2674,7 +2680,10 @@ SDispatchResult CKeybindManager::swapActiveWorkspaces(std::string args) { const auto PMON1 = g_pCompositor->getMonitorFromString(MON1); const auto PMON2 = g_pCompositor->getMonitorFromString(MON2); - if (!PMON1 || !PMON2 || PMON1 == PMON2) + if (!PMON1 || !PMON2) + return {.success = false, .error = "No such monitor found"}; + + if (PMON1 == PMON2) return {}; g_pCompositor->swapActiveWorkspaces(PMON1, PMON2); @@ -2697,7 +2706,7 @@ SDispatchResult CKeybindManager::pinActive(std::string args) { } if (!PWINDOW->m_bIsFloating || PWINDOW->isFullscreen()) - return {}; + return {.success = false, .error = "Window does not qualify to be pinned"}; PWINDOW->m_bPinned = !PWINDOW->m_bPinned; @@ -2825,8 +2834,11 @@ SDispatchResult CKeybindManager::lockGroups(std::string args) { SDispatchResult CKeybindManager::lockActiveGroup(std::string args) { const auto PWINDOW = g_pCompositor->m_pLastWindow.lock(); - if (!PWINDOW || !PWINDOW->m_sGroupData.pNextWindow.lock()) - return {}; + if (!PWINDOW) + return {.success = false, .error = "No window found"}; + + if (!PWINDOW->m_sGroupData.pNextWindow.lock()) + return {.success = false, .error = "Not a group"}; const auto PHEAD = PWINDOW->getGroupHead(); @@ -2947,7 +2959,7 @@ SDispatchResult CKeybindManager::moveOutOfGroup(std::string args) { static auto PIGNOREGROUPLOCK = CConfigValue("binds:ignore_group_lock"); if (!*PIGNOREGROUPLOCK && g_pKeybindManager->m_bGroupsLocked) - return {}; + return {.success = false, .error = "Groups locked"}; PHLWINDOW PWINDOW = nullptr; @@ -2956,8 +2968,11 @@ SDispatchResult CKeybindManager::moveOutOfGroup(std::string args) { else PWINDOW = g_pCompositor->m_pLastWindow.lock(); - if (!PWINDOW || !PWINDOW->m_sGroupData.pNextWindow.lock()) - return {}; + if (!PWINDOW) + return {.success = false, .error = "No window found"}; + + if (!PWINDOW->m_sGroupData.pNextWindow.lock()) + return {.success = false, .error = "Window not in a group"}; moveWindowOutOfGroup(PWINDOW); @@ -2975,7 +2990,10 @@ SDispatchResult CKeybindManager::moveWindowOrGroup(std::string args) { } const auto PWINDOW = g_pCompositor->m_pLastWindow.lock(); - if (!PWINDOW || PWINDOW->isFullscreen()) + if (!PWINDOW) + return {.success = false, .error = "No window found"}; + + if (PWINDOW->isFullscreen()) return {}; if (!*PIGNOREGROUPLOCK && g_pKeybindManager->m_bGroupsLocked) { @@ -3064,8 +3082,11 @@ SDispatchResult CKeybindManager::moveGroupWindow(std::string args) { const auto PLASTWINDOW = g_pCompositor->m_pLastWindow.lock(); - if (!PLASTWINDOW || !PLASTWINDOW->m_sGroupData.pNextWindow.lock()) - return {}; + if (!PLASTWINDOW) + return {.success = false, .error = "No window found"}; + + if (!PLASTWINDOW->m_sGroupData.pNextWindow.lock()) + return {.success = false, .error = "Window not in a group"}; if ((!BACK && PLASTWINDOW->m_sGroupData.pNextWindow->m_sGroupData.head) || (BACK && PLASTWINDOW->m_sGroupData.head)) { std::swap(PLASTWINDOW->m_sGroupData.head, PLASTWINDOW->m_sGroupData.pNextWindow->m_sGroupData.head);