瀏覽代碼

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.
david072 1 年之前
父節點
當前提交
02cc2e0f8f

+ 8 - 2
Userland/DevTools/HackStudio/EditorWrapper.cpp

@@ -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()

+ 1 - 1
Userland/DevTools/HackStudio/EditorWrapper.h

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

+ 2 - 1
Userland/DevTools/HackStudio/HackStudioWidget.cpp

@@ -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;
             }
         }
     }