diff --git a/Userland/DevTools/HackStudio/Editor.cpp b/Userland/DevTools/HackStudio/Editor.cpp index ef4dc44570..979972149e 100644 --- a/Userland/DevTools/HackStudio/Editor.cpp +++ b/Userland/DevTools/HackStudio/Editor.cpp @@ -40,11 +40,17 @@ namespace HackStudio { +ErrorOr> Editor::try_create() +{ + NonnullRefPtr editor = TRY(adopt_nonnull_ref_or_enomem(new (nothrow) Editor())); + TRY(editor->initialize_documentation_tooltip()); + TRY(editor->initialize_parameters_hint_tooltip()); + return editor; +} + Editor::Editor() { set_document(CodeDocument::create()); - initialize_documentation_tooltip(); - initialize_parameters_hint_tooltip(); m_evaluate_expression_action = GUI::Action::create("Evaluate expression", { Mod_Ctrl, Key_E }, [this](auto&) { VERIFY(is_program_running()); auto dialog = EvaluateExpressionDialog::construct(window()); @@ -72,20 +78,22 @@ Editor::~Editor() { } -void Editor::initialize_documentation_tooltip() +ErrorOr Editor::initialize_documentation_tooltip() { m_documentation_tooltip_window = GUI::Window::construct(); m_documentation_tooltip_window->set_rect(0, 0, 500, 400); m_documentation_tooltip_window->set_window_type(GUI::WindowType::Tooltip); - m_documentation_page_view = m_documentation_tooltip_window->set_main_widget(); + m_documentation_page_view = TRY(m_documentation_tooltip_window->try_set_main_widget()); + return {}; } -void Editor::initialize_parameters_hint_tooltip() +ErrorOr Editor::initialize_parameters_hint_tooltip() { m_parameters_hint_tooltip_window = GUI::Window::construct(); m_parameters_hint_tooltip_window->set_rect(0, 0, 280, 35); m_parameters_hint_tooltip_window->set_window_type(GUI::WindowType::Tooltip); - m_parameter_hint_page_view = m_parameters_hint_tooltip_window->set_main_widget(); + m_parameter_hint_page_view = TRY(m_parameters_hint_tooltip_window->try_set_main_widget()); + return {}; } EditorWrapper& Editor::wrapper() diff --git a/Userland/DevTools/HackStudio/Editor.h b/Userland/DevTools/HackStudio/Editor.h index c4234887a1..b0b2d1b65c 100644 --- a/Userland/DevTools/HackStudio/Editor.h +++ b/Userland/DevTools/HackStudio/Editor.h @@ -21,8 +21,10 @@ namespace HackStudio { class EditorWrapper; class Editor final : public GUI::TextEditor { - C_OBJECT(Editor) + C_OBJECT_ABSTRACT(Editor) public: + static ErrorOr> try_create(); + virtual ~Editor() override; Function on_focus; @@ -115,8 +117,8 @@ private: RefPtr m_move_execution_to_line_action; OwnPtr m_language_client; - void initialize_documentation_tooltip(); - void initialize_parameters_hint_tooltip(); + ErrorOr initialize_documentation_tooltip(); + ErrorOr initialize_parameters_hint_tooltip(); }; } diff --git a/Userland/DevTools/HackStudio/EditorWrapper.cpp b/Userland/DevTools/HackStudio/EditorWrapper.cpp index 1dc572c608..0f8430aa20 100644 --- a/Userland/DevTools/HackStudio/EditorWrapper.cpp +++ b/Userland/DevTools/HackStudio/EditorWrapper.cpp @@ -30,7 +30,8 @@ EditorWrapper::EditorWrapper() m_filename_label->set_text_alignment(Gfx::TextAlignment::CenterLeft); m_filename_label->set_fixed_height(14); - m_editor = add(); + // FIXME: Propagate errors instead of giving up + m_editor = MUST(try_add()); m_editor->set_ruler_visible(true); m_editor->set_automatic_indentation_enabled(true);