From 65b67ad9fa683d64083df41f1649c29f9f9f38f6 Mon Sep 17 00:00:00 2001 From: Isaac0-dev <62234577+Isaac0-dev@users.noreply.github.com> Date: Wed, 4 Jun 2025 09:43:15 +1000 Subject: [PATCH] fix djui back button bug and crash [build] could be caused by pressing B and letting go of A on the same frame --- src/pc/djui/djui_interactable.c | 1 + src/pc/djui/djui_panel_dynos.c | 1 + src/pc/djui/djui_panel_language.c | 9 +++++---- src/pc/djui/djui_panel_player.c | 1 + 4 files changed, 8 insertions(+), 4 deletions(-) diff --git a/src/pc/djui/djui_interactable.c b/src/pc/djui/djui_interactable.c index 0d67f01a2..92c6bdea2 100644 --- a/src/pc/djui/djui_interactable.c +++ b/src/pc/djui/djui_interactable.c @@ -438,6 +438,7 @@ void djui_interactable_update(void) { } else if ((padButtons & PAD_BUTTON_B) && !(sLastInteractablePad.button & PAD_BUTTON_B)) { // pressed back button on controller djui_panel_back(); + return; } else if ((padButtons & PAD_BUTTON_START) && !(sLastInteractablePad.button & PAD_BUTTON_START)) { // pressed start button if (gDjuiPanelPauseCreated) { djui_panel_shutdown(); } diff --git a/src/pc/djui/djui_panel_dynos.c b/src/pc/djui/djui_panel_dynos.c index caa424397..aec70cafb 100644 --- a/src/pc/djui/djui_panel_dynos.c +++ b/src/pc/djui/djui_panel_dynos.c @@ -75,5 +75,6 @@ void djui_panel_dynos_create(struct DjuiBase* caller) { } struct DjuiPanel* p = djui_panel_add(caller, panel, NULL); + if (!p) { return; } p->on_panel_destroy = djui_panel_dynos_destroy; } diff --git a/src/pc/djui/djui_panel_language.c b/src/pc/djui/djui_panel_language.c index 0c5ba3843..b70a56c3e 100644 --- a/src/pc/djui/djui_panel_language.c +++ b/src/pc/djui/djui_panel_language.c @@ -33,7 +33,7 @@ static void select_language(struct DjuiBase* caller) { tmp->base.interactable->update_style(&tmp->base); child = child->next; } - + char* langName = checkbox->text->message; char* key = djui_language_find_key("LANGUAGE",langName); if (key) langName = key; @@ -137,9 +137,9 @@ void djui_panel_language_create(struct DjuiBase* caller) { bool match = !strcmp(path, configLanguage); if (match) { foundMatch = true; } - + struct DjuiCheckbox* checkbox = NULL; - + char* displayName = djui_language_get("LANGUAGE",path); if (displayName != (char*)path) { char newName[SYS_MAX_PATH + 32] = { 0 }; @@ -149,7 +149,7 @@ void djui_panel_language_create(struct DjuiBase* caller) { else { checkbox = djui_checkbox_create(sLayoutBase, path, match ? &sTrue : &sFalse, select_language); } - + if (!strcmp(path, "English")) { chkEnglish = checkbox; } } @@ -168,6 +168,7 @@ skip_langs: } struct DjuiPanel* p = djui_panel_add(caller, panel, NULL); + if (!p) { return; } p->on_panel_destroy = djui_panel_language_destroy; } diff --git a/src/pc/djui/djui_panel_player.c b/src/pc/djui/djui_panel_player.c index e4f375757..fde444931 100644 --- a/src/pc/djui/djui_panel_player.c +++ b/src/pc/djui/djui_panel_player.c @@ -475,5 +475,6 @@ void djui_panel_player_create(struct DjuiBase* caller) { } struct DjuiPanel* p = djui_panel_add(caller, panel, NULL); + if (!p) { return; } p->on_panel_destroy = djui_panel_player_destroy; }