From 7d49819b5ecb4cb69d3db405a658ba44c17fc8e6 Mon Sep 17 00:00:00 2001 From: Vaxry Date: Fri, 3 May 2024 00:54:32 +0100 Subject: [PATCH] virtual-keyboard: destroy on vdestroy event --- src/helpers/WLClasses.hpp | 5 +++++ src/managers/input/InputManager.cpp | 3 +++ 2 files changed, 8 insertions(+) diff --git a/src/helpers/WLClasses.hpp b/src/helpers/WLClasses.hpp index d9b3ba20..6b155e83 100644 --- a/src/helpers/WLClasses.hpp +++ b/src/helpers/WLClasses.hpp @@ -7,6 +7,7 @@ #include "../desktop/Popup.hpp" #include "AnimatedVariable.hpp" #include "../desktop/WLSurface.hpp" +#include "signal/Listener.hpp" #include "Region.hpp" class CMonitor; @@ -92,6 +93,10 @@ struct SKeyboard { void updateXKBTranslationState(xkb_keymap* const keymap = nullptr); + struct { + CHyprSignalListener destroyVKeyboard; + } listeners; + // For the list lookup bool operator==(const SKeyboard& rhs) const { return keyboard == rhs.keyboard; diff --git a/src/managers/input/InputManager.cpp b/src/managers/input/InputManager.cpp index 7b851d88..e3c1b463 100644 --- a/src/managers/input/InputManager.cpp +++ b/src/managers/input/InputManager.cpp @@ -816,6 +816,9 @@ void CInputManager::newVirtualKeyboard(SP keyboard) { }, PNEWKEYBOARD, "VKeyboard"); + // TODO: this pointer pass sucks. + PNEWKEYBOARD->listeners.destroyVKeyboard = keyboard->events.destroy.registerListener([this, PNEWKEYBOARD](std::any data) { destroyKeyboard(PNEWKEYBOARD); }); + disableAllKeyboards(true); m_pActiveKeyboard = PNEWKEYBOARD;