diff --git a/src/event/Event.cpp b/src/event/Event.cpp index 454f11d..54947d9 100644 --- a/src/event/Event.cpp +++ b/src/event/Event.cpp @@ -165,3 +165,7 @@ void EventRegisterEx(EVENTID id, EVENTHANDLERFUNC handler, void* param, float pr } } } + +void EventUnregisterEx(EVENTID id, EVENTHANDLERFUNC handler, void* param, uint32_t flags) { + // TODO +} diff --git a/src/event/Event.hpp b/src/event/Event.hpp index 4d9e628..e27f1b7 100644 --- a/src/event/Event.hpp +++ b/src/event/Event.hpp @@ -57,6 +57,8 @@ void EventRegister(EVENTID id, int32_t (*handler)(const void*, void*)); void EventRegisterEx(EVENTID id, int32_t (*handler)(const void*, void*), void* param, float priority); +void EventUnregisterEx(EVENTID id, EVENTHANDLERFUNC handler, void* param, uint32_t flags); + void OsNetPump(uint32_t timeout); #endif diff --git a/src/ui/CSimpleTop.cpp b/src/ui/CSimpleTop.cpp index 4db99bd..50e7911 100644 --- a/src/ui/CSimpleTop.cpp +++ b/src/ui/CSimpleTop.cpp @@ -397,10 +397,37 @@ CSimpleTop::CSimpleTop() : CLayoutFrame() { CSimpleTexture::Init(); } +CSimpleTop::~CSimpleTop() { + // TODO + + this->DisableEvents(); + + HandleClose(this->m_screenLayer); + + CSimpleTop::s_instance = nullptr; + + // TODO +} + void CSimpleTop::CompressStrata(int32_t strata) { // TODO } +void CSimpleTop::DisableEvents() { + EventUnregisterEx(EVENT_ID_CHAR, reinterpret_cast(CSimpleTop::OnChar), this, -1); + EventUnregisterEx(EVENT_ID_IME, reinterpret_cast(CSimpleTop::OnIme), this, -1); + EventUnregisterEx(EVENT_ID_KEYDOWN, reinterpret_cast(CSimpleTop::OnKeyDown), this, -1); + EventUnregisterEx(EVENT_ID_KEYUP, reinterpret_cast(CSimpleTop::OnKeyUp), this, -1); + EventUnregisterEx(EVENT_ID_KEYDOWN_REPEATING, reinterpret_cast(CSimpleTop::OnKeyDownRepeat), this, -1); + EventUnregisterEx(EVENT_ID_MOUSEMOVE, reinterpret_cast(CSimpleTop::OnMouseMove), this, -1); + EventUnregisterEx(EVENT_ID_MOUSEMOVE_RELATIVE, reinterpret_cast(CSimpleTop::OnMouseMoveRelative), this, -1); + EventUnregisterEx(EVENT_ID_MOUSEDOWN, reinterpret_cast(CSimpleTop::OnMouseDown), this, -1); + EventUnregisterEx(EVENT_ID_MOUSEUP, reinterpret_cast(CSimpleTop::OnMouseUp), this, -1); + EventUnregisterEx(EVENT_ID_MOUSEWHEEL, reinterpret_cast(CSimpleTop::OnMouseWheel), this, -1); + EventUnregisterEx(EVENT_ID_SIZE, reinterpret_cast(CSimpleTop::OnDisplaySizeChanged), this, -1); + EventUnregisterEx(EVENT_ID_FOCUS, reinterpret_cast(CSimpleTop::OnFocusChanged), this, -1); +} + void CSimpleTop::EnableEvents() { EventRegisterEx(EVENT_ID_CHAR, reinterpret_cast(CSimpleTop::OnChar), this, 1.0); EventRegisterEx(EVENT_ID_IME, reinterpret_cast(CSimpleTop::OnIme), this, 1.0); diff --git a/src/ui/CSimpleTop.hpp b/src/ui/CSimpleTop.hpp index eaa6f7a..ea537aa 100644 --- a/src/ui/CSimpleTop.hpp +++ b/src/ui/CSimpleTop.hpp @@ -61,9 +61,13 @@ class CSimpleTop : public CLayoutFrame { int32_t (*m_mousePositionCallback)(CMouseEvent*) = nullptr; int32_t (*m_displaySizeCallback)(const CSizeEvent&) = nullptr; + // Virtual member functions + virtual ~CSimpleTop(); + // Member functions CSimpleTop(); void CompressStrata(int32_t strata); + void DisableEvents(); void EnableEvents(); void HideFrame(CSimpleFrame* frame, int32_t a4); void MoveOrResizeFrame(const CMouseEvent& evt);