fix(ui): correct input event processing in CSimpleTop

This commit is contained in:
fallenoak 2025-11-20 16:32:07 -06:00
parent c421b7a13a
commit 55b88129a1
No known key found for this signature in database
GPG Key ID: 7628F8E61AEA070D
2 changed files with 15 additions and 15 deletions

View File

@ -28,15 +28,15 @@ int32_t CSimpleTop::OnChar(const EVENT_DATA_CHAR* pCharData, void* param) {
charEvent = *pCharData; charEvent = *pCharData;
charEvent.id = 0x40060067; charEvent.id = 0x40060067;
for (int32_t strata = FRAME_STRATA_TOOLTIP; strata >= FRAME_STRATA_WORLD; strata--) { for (int32_t strata = NUM_FRAME_STRATA - 1; strata >= 0; strata--) {
if (eaten) { if (eaten) {
break; break;
} }
auto priorities = &top->m_eventqueue[strata][SIMPLE_EVENT_CHAR]; auto& queue = top->m_eventqueue[SIMPLE_EVENT_CHAR][strata];
for (uint32_t i = 0; i < priorities->Count(); i++) { for (uint32_t i = 0; i < queue.Count(); i++) {
auto priority = priorities->operator[](i); auto priority = queue[i];
if (!priority || eaten) { if (!priority || eaten) {
break; break;
@ -96,15 +96,15 @@ int32_t CSimpleTop::OnKeyDown(const EVENT_DATA_KEY* pKeyData, void* param) {
int32_t eaten = 0; int32_t eaten = 0;
for (int32_t strata = FRAME_STRATA_TOOLTIP; strata >= FRAME_STRATA_WORLD; strata--) { for (int32_t strata = NUM_FRAME_STRATA - 1; strata >= 0; strata--) {
if (eaten) { if (eaten) {
break; break;
} }
auto priorities = &top->m_eventqueue[strata][SIMPLE_EVENT_KEY]; auto& queue = top->m_eventqueue[SIMPLE_EVENT_KEY][strata];
for (uint32_t i = 0; i < priorities->Count(); i++) { for (uint32_t i = 0; i < queue.Count(); i++) {
auto priority = priorities->operator[](i); auto priority = queue[i];
if (!priority || eaten) { if (!priority || eaten) {
break; break;
@ -265,11 +265,11 @@ int32_t CSimpleTop::OnMouseMove(const EVENT_DATA_MOUSE* pMouseData, void* param)
mouseCapture->OnLayerTrackUpdate(mouseEvent); mouseCapture->OnLayerTrackUpdate(mouseEvent);
} }
for (int32_t strata = FRAME_STRATA_DIALOG; strata >= FRAME_STRATA_WORLD; strata--) { for (int32_t strata = NUM_FRAME_STRATA - 1; strata >= 0; strata--) {
auto priorities = &top->m_eventqueue[strata][SIMPLE_EVENT_MOUSE]; auto& queue = top->m_eventqueue[SIMPLE_EVENT_MOUSE][strata];
for (int32_t i = 0; i < priorities->Count(); i++) { for (int32_t i = 0; i < queue.Count(); i++) {
auto priority = priorities->operator[](i); auto priority = queue[i];
auto frame = priority->frame; auto frame = priority->frame;
if (frame->OnLayerTrackUpdate(mouseEvent)) { if (frame->OnLayerTrackUpdate(mouseEvent)) {
@ -538,7 +538,7 @@ int32_t CSimpleTop::RaiseFrame(CSimpleFrame* frame, int32_t checkOcclusion) {
} }
void CSimpleTop::RegisterForEvent(CSimpleFrame* frame, CSimpleEventType event, int32_t a4, uint32_t priority) { void CSimpleTop::RegisterForEvent(CSimpleFrame* frame, CSimpleEventType event, int32_t a4, uint32_t priority) {
auto& queue = this->m_eventqueue[frame->m_strata][event]; auto& queue = this->m_eventqueue[event][frame->m_strata];
auto m = SMemAlloc(sizeof(FRAMEPRIORITY), __FILE__, __LINE__, 0x0); auto m = SMemAlloc(sizeof(FRAMEPRIORITY), __FILE__, __LINE__, 0x0);
auto framePriority = new (m) FRAMEPRIORITY(); auto framePriority = new (m) FRAMEPRIORITY();
@ -578,7 +578,7 @@ int32_t CSimpleTop::StartMoveOrResizeFrame(CSimpleFrame* frame, MOVERESIZE_REASO
} }
void CSimpleTop::UnregisterForEvent(CSimpleFrame* frame, CSimpleEventType event, int32_t a4) { void CSimpleTop::UnregisterForEvent(CSimpleFrame* frame, CSimpleEventType event, int32_t a4) {
auto& queue = this->m_eventqueue[frame->m_strata][event]; auto& queue = this->m_eventqueue[event][frame->m_strata];
int32_t found = 0; int32_t found = 0;

View File

@ -54,7 +54,7 @@ class CSimpleTop : public CLayoutFrame {
STORM_EXPLICIT_LIST(CSimpleFrame, m_destroyedLink) m_destroyed; STORM_EXPLICIT_LIST(CSimpleFrame, m_destroyedLink) m_destroyed;
CFrameStrata* m_strata[NUM_FRAME_STRATA]; CFrameStrata* m_strata[NUM_FRAME_STRATA];
frame_layout m_layout; frame_layout m_layout;
CSimpleSortedArray<FRAMEPRIORITY*> m_eventqueue[NUM_FRAME_STRATA][NUM_SIMPLE_EVENTS]; CSimpleSortedArray<FRAMEPRIORITY*> m_eventqueue[NUM_SIMPLE_EVENTS][NUM_FRAME_STRATA];
int32_t m_checkFocus = 1; int32_t m_checkFocus = 1;
EVENT_DATA_MOUSE m_mousePosition; EVENT_DATA_MOUSE m_mousePosition;
int32_t (*m_mouseButtonCallback)(CMouseEvent*) = nullptr; int32_t (*m_mouseButtonCallback)(CMouseEvent*) = nullptr;