From ed837902e3f20c482462e3e8c21b7d3d01754e24 Mon Sep 17 00:00:00 2001 From: GameParrot <85067619+GameParrot@users.noreply.github.com> Date: Sat, 28 Dec 2024 10:34:13 -0500 Subject: [PATCH] add skipLock option to window creation --- src/imgui_ui.cpp | 20 ++++++++++++++------ src/imgui_ui.h | 4 ++-- 2 files changed, 16 insertions(+), 8 deletions(-) diff --git a/src/imgui_ui.cpp b/src/imgui_ui.cpp index 7c781ec7..19ecdfab 100644 --- a/src/imgui_ui.cpp +++ b/src/imgui_ui.cpp @@ -206,8 +206,10 @@ void mcpelauncher_addmenu(size_t length, MenuEntryABI* entries) { menuentrieslock.unlock(); } -void mcpelauncher_show_window(const char *title, int isModal, void *user, void (*onClose)(void *user), int count, control *controls) { - activeWindowsLock.lock(); +void mcpelauncher_show_window(const char *title, int isModal, void *user, void (*onClose)(void *user), int count, control *controls, bool skipLock) { + if (!skipLock) { + activeWindowsLock.lock(); + } std::vector subentries(count); for(int i = 0; i < count; i++) { subentries[i].type = controls[i].type; @@ -267,17 +269,23 @@ void mcpelauncher_show_window(const char *title, int isModal, void *user, void ( .controls = std::move(subentries), })); } - activeWindowsLock.unlock(); + if (!skipLock) { + activeWindowsLock.unlock(); + } } -void mcpelauncher_close_window(const char *title) { - activeWindowsLock.lock(); +void mcpelauncher_close_window(const char *title, bool skipLock) { + if (!skipLock) { + activeWindowsLock.lock(); + } if(auto activeWindow = std::find_if(activeWindows.begin(), activeWindows.end(), [title](auto&& wnd) { return wnd->title == (title ? title : "Untitled"); }); activeWindow != activeWindows.end()) { activeWindows.erase(activeWindow); } - activeWindowsLock.unlock(); + if (!skipLock) { + activeWindowsLock.unlock(); + } } void ImGuiUIInit(GameWindow* window) { diff --git a/src/imgui_ui.h b/src/imgui_ui.h index 58395c02..7da5f93e 100644 --- a/src/imgui_ui.h +++ b/src/imgui_ui.h @@ -53,6 +53,6 @@ struct control } textinput; } data; }; -void mcpelauncher_show_window(const char* title, int isModal, void* user, void(*onClose)(void* user), int count, control* controls); +void mcpelauncher_show_window(const char* title, int isModal, void* user, void(*onClose)(void* user), int count, control* controls, bool skipLock = false); -void mcpelauncher_close_window(const char *title); \ No newline at end of file +void mcpelauncher_close_window(const char *title, bool skipLock = false); \ No newline at end of file