diff --git a/src/events/Devices.cpp b/src/events/Devices.cpp index eae04bc3e..5660772c7 100644 --- a/src/events/Devices.cpp +++ b/src/events/Devices.cpp @@ -151,7 +151,7 @@ void Events::listener_newVirtPtr(wl_listener* listener, void* data) { const auto POINTER = EV->new_pointer; const auto DEVICE = &POINTER->pointer.base; - g_pInputManager->newMouse(DEVICE); + g_pInputManager->newMouse(DEVICE, true); } void Events::listener_destroyMouse(void* owner, void* data) { diff --git a/src/helpers/WLClasses.hpp b/src/helpers/WLClasses.hpp index 06f58f0a7..962c27b09 100644 --- a/src/helpers/WLClasses.hpp +++ b/src/helpers/WLClasses.hpp @@ -109,6 +109,8 @@ struct SMouse { std::string name = ""; + bool virt = false; + DYNLISTENER(commitConstraint); DYNLISTENER(destroyMouse); diff --git a/src/managers/input/InputManager.cpp b/src/managers/input/InputManager.cpp index c2c154f10..8f7c25b11 100644 --- a/src/managers/input/InputManager.cpp +++ b/src/managers/input/InputManager.cpp @@ -38,6 +38,9 @@ void CInputManager::mouseMoveUnified(uint32_t time, bool refocus) { return; } + if (g_pCompositor->m_sSeat.mouse->virt) + return; // don't refocus on virt + Vector2D mouseCoords = getMouseCoordsInternal(); const auto MOUSECOORDSFLOORED = mouseCoords.floor(); @@ -498,11 +501,12 @@ void CInputManager::applyConfigToKeyboard(SKeyboard* pKeyboard) { Debug::log(LOG, "Set the keyboard layout to %s and variant to %s for keyboard \"%s\"", rules.layout, rules.variant, pKeyboard->keyboard->name); } -void CInputManager::newMouse(wlr_input_device* mouse) { +void CInputManager::newMouse(wlr_input_device* mouse, bool virt) { m_lMice.emplace_back(); const auto PMOUSE = &m_lMice.back(); PMOUSE->mouse = mouse; + PMOUSE->virt = virt; try { PMOUSE->name = std::string(mouse->name); } catch(std::exception& e) { diff --git a/src/managers/input/InputManager.hpp b/src/managers/input/InputManager.hpp index 8cbfcfdb4..1dacac8e9 100644 --- a/src/managers/input/InputManager.hpp +++ b/src/managers/input/InputManager.hpp @@ -21,7 +21,7 @@ public: void onKeyboardMod(void*, SKeyboard*); void newKeyboard(wlr_input_device*); - void newMouse(wlr_input_device*); + void newMouse(wlr_input_device*, bool virt = false); void destroyKeyboard(SKeyboard*); void destroyMouse(wlr_input_device*);