From 6a98d1cb42ec027e164e4b5fb3245ea42815cb51 Mon Sep 17 00:00:00 2001 From: "Herman S." <429230+has207@users.noreply.github.com> Date: Fri, 2 Jan 2026 15:39:19 +0900 Subject: [PATCH] [UI] Ensure file picker is able to save Fixes zar archive creation dialog --- src/xenia/ui/file_picker_qt.cc | 49 ++++++++++++++++++++++++++-------- 1 file changed, 38 insertions(+), 11 deletions(-) diff --git a/src/xenia/ui/file_picker_qt.cc b/src/xenia/ui/file_picker_qt.cc index 959a2d53c..e6d1ab000 100644 --- a/src/xenia/ui/file_picker_qt.cc +++ b/src/xenia/ui/file_picker_qt.cc @@ -115,8 +115,34 @@ bool QtFilePicker::Show(Window* parent_window) { std::vector selected_files; - if (multi_selection() && mode() == Mode::kOpen && type() == Type::kFile) { - // Use getOpenFileNames for multi-selection + QString result_path; + + if (mode() == Mode::kSave) { + // Build initial path with default filename if provided + QString save_path = initial_dir; + if (!file_name().empty()) { + if (!save_path.isEmpty() && !save_path.endsWith('/') && + !save_path.endsWith('\\')) { + save_path += '/'; + } + save_path += SafeQString(file_name()); + if (!default_extension().empty()) { + save_path += '.'; + save_path += SafeQString(default_extension()); + } + } + + result_path = QFileDialog::getSaveFileName( + qt_window ? qt_window->qwindow() : nullptr, title, save_path, filter, + nullptr, // selected filter + options); + } else if (type() == Type::kDirectory) { + // Directory selection + result_path = QFileDialog::getExistingDirectory( + qt_window ? qt_window->qwindow() : nullptr, title, initial_dir, + options | QFileDialog::ShowDirsOnly); + } else if (multi_selection()) { + // Multi-selection file open QStringList file_paths = QFileDialog::getOpenFileNames( qt_window ? qt_window->qwindow() : nullptr, title, initial_dir, filter, nullptr, // selected filter @@ -131,20 +157,21 @@ bool QtFilePicker::Show(Window* parent_window) { set_selected_files(selected_files); return true; } + return false; } else { - // Use getOpenFileName for single selection - QString file_path = QFileDialog::getOpenFileName( + // Single file open + result_path = QFileDialog::getOpenFileName( qt_window ? qt_window->qwindow() : nullptr, title, initial_dir, filter, nullptr, // selected filter options); + } - if (!file_path.isEmpty()) { - QByteArray utf8_bytes = file_path.toUtf8(); - std::string file_path_str(utf8_bytes.constData(), utf8_bytes.size()); - selected_files.push_back(xe::to_path(file_path_str)); - set_selected_files(selected_files); - return true; - } + if (!result_path.isEmpty()) { + QByteArray utf8_bytes = result_path.toUtf8(); + std::string file_path_str(utf8_bytes.constData(), utf8_bytes.size()); + selected_files.push_back(xe::to_path(file_path_str)); + set_selected_files(selected_files); + return true; } return false;