From 7b3c78220ea1a65d1db5f7bc2b3a715112b90e1e Mon Sep 17 00:00:00 2001 From: ohowe Date: Fri, 11 Aug 2023 10:10:51 -0600 Subject: [PATCH 1/2] Fix HWND on windows --- portable-file-dialogs.h | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/portable-file-dialogs.h b/portable-file-dialogs.h index 1fc79a2..e9fda68 100644 --- a/portable-file-dialogs.h +++ b/portable-file-dialogs.h @@ -1071,8 +1071,9 @@ inline internal::file_dialog::file_dialog(type in_type, } filter_list += '\0'; + HWND hwnd = GetActiveWindow(); m_async->start_func([this, in_type, title, default_path, filter_list, - options](int *exit_code) -> std::string + options, hwnd](int *exit_code) -> std::string { (void)exit_code; m_wtitle = internal::str2wstr(title); @@ -1132,7 +1133,7 @@ inline internal::file_dialog::file_dialog(type in_type, OPENFILENAMEW ofn; memset(&ofn, 0, sizeof(ofn)); ofn.lStructSize = sizeof(OPENFILENAMEW); - ofn.hwndOwner = GetActiveWindow(); + ofn.hwndOwner = hwnd; ofn.lpstrFilter = wfilter_list.c_str(); @@ -1628,13 +1629,14 @@ inline message::message(std::string const &title, m_mappings[IDRETRY] = button::retry; m_mappings[IDIGNORE] = button::ignore; - m_async->start_func([text, title, style](int* exit_code) -> std::string + HWND hwnd = GetActiveWindow(); + m_async->start_func([text, title, style, hwnd](int* exit_code) -> std::string { auto wtext = internal::str2wstr(text); auto wtitle = internal::str2wstr(title); // Apply new visual style (required for all Windows versions) new_style_context ctx; - *exit_code = MessageBoxW(GetActiveWindow(), wtext.c_str(), wtitle.c_str(), style); + *exit_code = MessageBoxW(hwnd, wtext.c_str(), wtitle.c_str(), style); return ""; }); From ebbd75c4555a3a5c32b539e5901fbb135d274e14 Mon Sep 17 00:00:00 2001 From: ohowe Date: Fri, 11 Aug 2023 10:56:29 -0600 Subject: [PATCH 2/2] Fix in vista --- portable-file-dialogs.h | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/portable-file-dialogs.h b/portable-file-dialogs.h index e9fda68..abf4efd 100644 --- a/portable-file-dialogs.h +++ b/portable-file-dialogs.h @@ -306,7 +306,7 @@ class file_dialog : public dialog #if _WIN32 static int CALLBACK bffcallback(HWND hwnd, UINT uMsg, LPARAM, LPARAM pData); #if PFD_HAS_IFILEDIALOG - std::string select_folder_vista(IFileDialog *ifd, bool force_path); + std::string select_folder_vista(IFileDialog *ifd, bool force_path, HWND hwnd); #endif std::wstring m_wtitle; @@ -1099,7 +1099,7 @@ inline internal::file_dialog::file_dialog(type in_type, // In case CoCreateInstance fails (which it should not), try legacy approach if (SUCCEEDED(hr)) - return select_folder_vista(ifd, options & opt::force_path); + return select_folder_vista(ifd, options & opt::force_path, hwnd); } #endif @@ -1408,7 +1408,7 @@ inline int CALLBACK internal::file_dialog::bffcallback(HWND hwnd, UINT uMsg, } #if PFD_HAS_IFILEDIALOG -inline std::string internal::file_dialog::select_folder_vista(IFileDialog *ifd, bool force_path) +inline std::string internal::file_dialog::select_folder_vista(IFileDialog *ifd, bool force_path, HWND hwnd) { std::string result; @@ -1445,7 +1445,7 @@ inline std::string internal::file_dialog::select_folder_vista(IFileDialog *ifd, ifd->SetOptions(FOS_PICKFOLDERS | FOS_FORCEFILESYSTEM); ifd->SetTitle(m_wtitle.c_str()); - hr = ifd->Show(GetActiveWindow()); + hr = ifd->Show(hwnd); if (SUCCEEDED(hr)) { IShellItem* item;