diff --git a/Userland/Applications/HexEditor/HexDocument.cpp b/Userland/Applications/HexEditor/HexDocument.cpp index 140cd1193b..07dfd8bdd4 100644 --- a/Userland/Applications/HexEditor/HexDocument.cpp +++ b/Userland/Applications/HexEditor/HexDocument.cpp @@ -70,10 +70,18 @@ bool HexDocumentMemory::write_to_file(NonnullRefPtr file) return true; } +ErrorOr> HexDocumentFile::create(NonnullRefPtr file) +{ + auto document = TRY(adopt_nonnull_own_or_enomem(new HexDocumentFile(move(file)))); + // FIXME: Remove this hackery + document->set_file(move(document->m_file)); + + return document; +} + HexDocumentFile::HexDocumentFile(NonnullRefPtr file) : m_file(file) { - set_file(file); } void HexDocumentFile::write_to_file() diff --git a/Userland/Applications/HexEditor/HexDocument.h b/Userland/Applications/HexEditor/HexDocument.h index f50061bbbe..2bfb7f3c66 100644 --- a/Userland/Applications/HexEditor/HexDocument.h +++ b/Userland/Applications/HexEditor/HexDocument.h @@ -58,7 +58,7 @@ private: class HexDocumentFile final : public HexDocument { public: - explicit HexDocumentFile(NonnullRefPtr file); + static ErrorOr> create(NonnullRefPtr file); virtual ~HexDocumentFile() = default; HexDocumentFile(HexDocumentFile&&) = default; @@ -75,6 +75,7 @@ public: void clear_changes() override; private: + explicit HexDocumentFile(NonnullRefPtr file); void ensure_position_in_buffer(size_t position); NonnullRefPtr m_file; diff --git a/Userland/Applications/HexEditor/HexEditor.cpp b/Userland/Applications/HexEditor/HexEditor.cpp index 206f2f1043..0a776c642b 100644 --- a/Userland/Applications/HexEditor/HexEditor.cpp +++ b/Userland/Applications/HexEditor/HexEditor.cpp @@ -65,7 +65,7 @@ ErrorOr HexEditor::open_new_file(size_t size) void HexEditor::open_file(NonnullRefPtr file) { - m_document = make(file); + m_document = HexDocumentFile::create(move(file)).release_value_but_fixme_should_propagate_errors(); set_content_length(m_document->size()); m_position = 0; m_cursor_at_low_nibble = false; @@ -146,7 +146,7 @@ bool HexEditor::save_as(NonnullRefPtr new_file) auto& memory_document = static_cast(*m_document); if (!memory_document.write_to_file(new_file)) return false; - m_document = make(new_file); + m_document = HexDocumentFile::create(move(new_file)).release_value_but_fixme_should_propagate_errors(); } update();