Merge pull request #89192 from 398utubzyt/windows/free-lib-in-dialog-show

Windows: Fix `FreeLibrary` not always being called in `DisplayServerWindows::dialog_show`
This commit is contained in:
Rémi Verschelde 2024-03-05 23:44:42 +01:00
commit 8b0eecdfae
No known key found for this signature in database
GPG key ID: C3336907360768E1

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 {