From b7f42a1e88a5b6c9d2dbdba31e0f35f6a02461e7 Mon Sep 17 00:00:00 2001 From: Alexander <51529891+Truenya@users.noreply.github.com> Date: Fri, 28 Jun 2024 01:20:50 +0300 Subject: [PATCH 1/3] keybinds: fix move to prev ws, moved to same mon (#6688) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Крылов Александр --- src/managers/KeybindManager.cpp | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/src/managers/KeybindManager.cpp b/src/managers/KeybindManager.cpp index 005ce392..02438d43 100644 --- a/src/managers/KeybindManager.cpp +++ b/src/managers/KeybindManager.cpp @@ -1048,14 +1048,20 @@ SWorkspaceIDName getWorkspaceToChangeFromArgs(std::string args, PHLWORKSPACE PCU return {WORKSPACE_NOT_CHANGED, ""}; } - const auto ID = PCURRENTWORKSPACE->m_iID; - if (const auto PWORKSPACETOCHANGETO = g_pCompositor->getWorkspaceByID(PPREVWS.id); PWORKSPACETOCHANGETO) { - if (PER_MON && PCURRENTWORKSPACE->m_iMonitorID != PWORKSPACETOCHANGETO->m_iMonitorID) - return {WORKSPACE_NOT_CHANGED, ""}; - return {ID, PWORKSPACETOCHANGETO->m_szName}; - } + const auto ID = PCURRENTWORKSPACE->m_iID; + const auto PWORKSPACETOCHANGETO = g_pCompositor->getWorkspaceByID(PPREVWS.id); + if (!PWORKSPACETOCHANGETO) + return {ID, PPREVWS.name.empty() ? std::to_string(PPREVWS.id) : PPREVWS.name}; - return {ID, PPREVWS.name.empty() ? std::to_string(PPREVWS.id) : PPREVWS.name}; + if (!PER_MON || PCURRENTWORKSPACE->m_iMonitorID == PWORKSPACETOCHANGETO->m_iMonitorID) + return {ID, PWORKSPACETOCHANGETO->m_szName}; + + // PER_MON and cur ws is not on same monitor with prev per monitor + const auto POTHERWSTOCHANGETO = g_pCompositor->getWorkspaceByID(PCURRENTWORKSPACE->getPrevWorkspaceIDName(false).id); + if (POTHERWSTOCHANGETO && POTHERWSTOCHANGETO->m_iMonitorID == PCURRENTWORKSPACE->m_iMonitorID) + return {ID, POTHERWSTOCHANGETO->m_szName}; + + return {WORKSPACE_NOT_CHANGED, ""}; } void CKeybindManager::changeworkspace(std::string args) { From 2d7a0ab21fd951f6adacfe98442d849490c147da Mon Sep 17 00:00:00 2001 From: Harenayo <123649644+harenayo@users.noreply.github.com> Date: Fri, 28 Jun 2024 18:15:20 +0900 Subject: [PATCH 2/3] Fix #6279: prevent sending keymap or repeat info events by keyboards without keyboard capability --- src/protocols/core/Seat.cpp | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/protocols/core/Seat.cpp b/src/protocols/core/Seat.cpp index f578292a..507a9c4a 100644 --- a/src/protocols/core/Seat.cpp +++ b/src/protocols/core/Seat.cpp @@ -2,6 +2,7 @@ #include "Compositor.hpp" #include "DataDevice.hpp" #include "../../devices/IKeyboard.hpp" +#include "../../devices/IHID.hpp" #include "../../managers/SeatManager.hpp" #include "../../config/ConfigValue.hpp" #include @@ -451,12 +452,20 @@ void CWLSeatProtocol::updateCapabilities(uint32_t caps) { } void CWLSeatProtocol::updateKeymap() { + if (!(currentCaps & eHIDCapabilityType::HID_INPUT_CAPABILITY_KEYBOARD)) { + return; + } + for (auto& k : m_vKeyboards) { k->sendKeymap(g_pSeatManager->keyboard.lock()); } } void CWLSeatProtocol::updateRepeatInfo(uint32_t rate, uint32_t delayMs) { + if (!(currentCaps & eHIDCapabilityType::HID_INPUT_CAPABILITY_KEYBOARD)) { + return; + } + for (auto& k : m_vKeyboards) { k->repeatInfo(rate, delayMs); } From 6bd18af3d6ec43b3efac142f410b7d20132f7893 Mon Sep 17 00:00:00 2001 From: Harenayo <123649644+harenayo@users.noreply.github.com> Date: Sat, 29 Jun 2024 10:04:54 +0900 Subject: [PATCH 3/3] Remove brackets --- src/protocols/core/Seat.cpp | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/protocols/core/Seat.cpp b/src/protocols/core/Seat.cpp index 507a9c4a..464a901c 100644 --- a/src/protocols/core/Seat.cpp +++ b/src/protocols/core/Seat.cpp @@ -452,9 +452,8 @@ void CWLSeatProtocol::updateCapabilities(uint32_t caps) { } void CWLSeatProtocol::updateKeymap() { - if (!(currentCaps & eHIDCapabilityType::HID_INPUT_CAPABILITY_KEYBOARD)) { + if (!(currentCaps & eHIDCapabilityType::HID_INPUT_CAPABILITY_KEYBOARD)) return; - } for (auto& k : m_vKeyboards) { k->sendKeymap(g_pSeatManager->keyboard.lock()); @@ -462,9 +461,8 @@ void CWLSeatProtocol::updateKeymap() { } void CWLSeatProtocol::updateRepeatInfo(uint32_t rate, uint32_t delayMs) { - if (!(currentCaps & eHIDCapabilityType::HID_INPUT_CAPABILITY_KEYBOARD)) { + if (!(currentCaps & eHIDCapabilityType::HID_INPUT_CAPABILITY_KEYBOARD)) return; - } for (auto& k : m_vKeyboards) { k->repeatInfo(rate, delayMs);