Windows: Fix FreeLibrary not always being called in dialog_show

This commit is contained in:
398utubzyt 2024-03-05 10:16:15 -08:00
parent 39f90600bc
commit 1c10f577cb

View file

@ -2531,17 +2531,15 @@ Error DisplayServerWindows::dialog_show(String p_title, String p_description, Ve
config.pButtons = tbuttons;
config.pfCallback = win32_task_dialog_callback;
Error result = FAILED;
HMODULE comctl = LoadLibraryW(L"comctl32.dll");
if (comctl) {
typedef HRESULT(WINAPI * TaskDialogIndirectPtr)(const TASKDIALOGCONFIG *pTaskConfig, int *pnButton, int *pnRadioButton, BOOL *pfVerificationFlagChecked);
TaskDialogIndirectPtr task_dialog_indirect = (TaskDialogIndirectPtr)GetProcAddress(comctl, "TaskDialogIndirect");
if (task_dialog_indirect) {
int button_pressed;
if (FAILED(task_dialog_indirect(&config, &button_pressed, nullptr, nullptr))) {
return FAILED;
}
int button_pressed;
if (task_dialog_indirect && SUCCEEDED(task_dialog_indirect(&config, &button_pressed, nullptr, nullptr))) {
if (!p_callback.is_null()) {
Variant button = button_pressed;
const Variant *args[1] = { &button };
@ -2553,13 +2551,14 @@ Error DisplayServerWindows::dialog_show(String p_title, String p_description, Ve
}
}
return OK;
result = OK;
}
FreeLibrary(comctl);
} else {
ERR_PRINT("Unable to create native dialog.");
}
ERR_PRINT("Unable to create native dialog.");
return FAILED;
return result;
}
struct Win32InputTextDialogInit {