HackStudio: Don't crash when saving is denied on build

When running build while having unsaved changes in HackStudio, it asks
whether you want to save the unsaved files with a separate dialog. When
you click "Yes" to saving the files, but deny the save-file dialog,
HackStudio would crash, since we were expecting there to be a file
to save to. Now, we check whether a file was picked, and if not, we
abort the build.
This commit is contained in:
david072 2023-10-31 20:40:00 +01:00 committed by Sam Atkins
parent 88cc019275
commit 02cc2e0f8f
3 changed files with 11 additions and 4 deletions

View file

@ -71,18 +71,24 @@ void EditorWrapper::set_filename(DeprecatedString const& filename)
update_diff();
}
void EditorWrapper::save()
bool EditorWrapper::save()
{
if (filename().is_empty()) {
auto file_picker_action = GUI::CommonActions::make_save_as_action([&](auto&) {
Optional<DeprecatedString> save_path = GUI::FilePicker::get_save_filepath(window(), "file"sv, "txt"sv, project_root().value());
set_filename(save_path.value());
if (save_path.has_value())
set_filename(save_path.value());
});
file_picker_action->activate();
if (filename().is_empty())
return false;
}
editor().write_to_file(filename()).release_value_but_fixme_should_propagate_errors();
update_diff();
editor().update();
return true;
}
void EditorWrapper::update_diff()

View file

@ -30,7 +30,7 @@ public:
Editor& editor() { return *m_editor; }
Editor const& editor() const { return *m_editor; }
void save();
bool save();
LanguageClient& language_client();

View file

@ -1678,7 +1678,8 @@ HackStudioWidget::ContinueDecision HackStudioWidget::warn_unsaved_changes(Deprec
if (result == GUI::MessageBox::ExecResult::Yes) {
for (auto& editor_wrapper : m_all_editor_wrappers) {
if (editor_wrapper->editor().document().is_modified()) {
editor_wrapper->save();
if (!editor_wrapper->save())
return ContinueDecision::No;
}
}
}