From 0ddb59c87c26eab600af1fefb2c57f58064af4d8 Mon Sep 17 00:00:00 2001 From: MysterD Date: Sun, 27 Feb 2022 01:23:35 -0800 Subject: [PATCH] Fix crash in djui_interactable_update --- src/pc/djui/djui_base.c | 5 +++++ src/pc/djui/djui_interactable.c | 12 ++++++------ src/pc/djui/djui_interactable.h | 1 + 3 files changed, 12 insertions(+), 6 deletions(-) diff --git a/src/pc/djui/djui_base.c b/src/pc/djui/djui_base.c index 56203073e..d86cd7881 100644 --- a/src/pc/djui/djui_base.c +++ b/src/pc/djui/djui_base.c @@ -329,6 +329,11 @@ void djui_base_destroy(struct DjuiBase* base) { gDjuiHovered = NULL; } + // remove binding + if (gInteractableBinding == base) { + gInteractableBinding = NULL; + } + // remove myself from parent's linked list if (base->parent != NULL) { struct DjuiBaseChild* child = base->parent->child; diff --git a/src/pc/djui/djui_interactable.c b/src/pc/djui/djui_interactable.c index 50a007899..7bbc98edc 100644 --- a/src/pc/djui/djui_interactable.c +++ b/src/pc/djui/djui_interactable.c @@ -21,7 +21,7 @@ static bool sIgnoreInteractableUntilCursorReleased = false; struct DjuiBase* gDjuiHovered = NULL; struct DjuiBase* gDjuiCursorDownOn = NULL; struct DjuiBase* gInteractableFocus = NULL; -static struct DjuiBase* sInteractableBinding = NULL; +struct DjuiBase* gInteractableBinding = NULL; static struct DjuiBase* sMouseDown = NULL; bool gInteractableOverridePad = false; OSContPad gInteractablePad = { 0 }; @@ -163,11 +163,11 @@ static void djui_interactable_cursor_update_active(struct DjuiBase* base) { } bool djui_interactable_is_binding(void) { - return sInteractableBinding != NULL; + return gInteractableBinding != NULL; } void djui_interactable_set_binding(struct DjuiBase* base) { - sInteractableBinding = base; + gInteractableBinding = base; djui_cursor_set_visible(base == NULL); if (base == NULL) { sIgnoreInteractableUntilCursorReleased = true; @@ -186,7 +186,7 @@ bool djui_interactable_is_input_focus(struct DjuiBase* base) { } bool djui_interactable_on_key_down(int scancode) { - if (sInteractableBinding != NULL) { + if (gInteractableBinding != NULL) { return true; } @@ -377,8 +377,8 @@ void djui_interactable_update(void) { if (gDjuiPanelPauseCreated) { djui_panel_shutdown(); } } - if (sInteractableBinding != NULL) { - djui_interactable_on_bind(sInteractableBinding); + if (gInteractableBinding != NULL) { + djui_interactable_on_bind(gInteractableBinding); } else if ((padButtons & PAD_BUTTON_A) || (mouseButtons & MOUSE_BUTTON_1)) { // cursor down events if (gDjuiHovered != NULL) { diff --git a/src/pc/djui/djui_interactable.h b/src/pc/djui/djui_interactable.h index 82c7caa2b..e24e01613 100644 --- a/src/pc/djui/djui_interactable.h +++ b/src/pc/djui/djui_interactable.h @@ -45,6 +45,7 @@ extern OSContPad gInteractablePad; extern struct DjuiBase* gDjuiHovered; extern struct DjuiBase* gDjuiCursorDownOn; extern struct DjuiBase* gInteractableFocus; +extern struct DjuiBase* gInteractableBinding; bool djui_interactable_is_binding(void); void djui_interactable_set_binding(struct DjuiBase* base);