瀏覽代碼

TerminalSettings: Convert setting widgets to a failable factory

Karol Kosek 2 年之前
父節點
當前提交
1ad81687e7

+ 21 - 5
Userland/Applications/TerminalSettings/TerminalSettingsWidget.cpp

@@ -29,9 +29,16 @@
 #include <LibVT/TerminalWidget.h>
 #include <spawn.h>
 
-TerminalSettingsMainWidget::TerminalSettingsMainWidget()
+ErrorOr<NonnullRefPtr<TerminalSettingsMainWidget>> TerminalSettingsMainWidget::try_create()
 {
-    load_from_gml(terminal_settings_main_gml).release_value_but_fixme_should_propagate_errors();
+    auto widget = TRY(adopt_nonnull_ref_or_enomem(new (nothrow) TerminalSettingsMainWidget()));
+    TRY(widget->setup());
+    return widget;
+}
+
+ErrorOr<void> TerminalSettingsMainWidget::setup()
+{
+    TRY(load_from_gml(terminal_settings_main_gml));
 
     auto& beep_bell_radio = *find_descendant_of_type_named<GUI::RadioButton>("beep_bell_radio");
     auto& visual_bell_radio = *find_descendant_of_type_named<GUI::RadioButton>("visual_bell_radio");
@@ -77,11 +84,19 @@ TerminalSettingsMainWidget::TerminalSettingsMainWidget()
         set_modified(true);
     };
     confirm_close_checkbox.set_checked(m_confirm_close, GUI::AllowCallback::No);
+    return {};
+}
+
+ErrorOr<NonnullRefPtr<TerminalSettingsViewWidget>> TerminalSettingsViewWidget::try_create()
+{
+    auto widget = TRY(adopt_nonnull_ref_or_enomem(new (nothrow) TerminalSettingsViewWidget()));
+    TRY(widget->setup());
+    return widget;
 }
 
-TerminalSettingsViewWidget::TerminalSettingsViewWidget()
+ErrorOr<void> TerminalSettingsViewWidget::setup()
 {
-    load_from_gml(terminal_settings_view_gml).release_value_but_fixme_should_propagate_errors();
+    TRY(load_from_gml(terminal_settings_view_gml));
 
     auto& slider = *find_descendant_of_type_named<GUI::HorizontalOpacitySlider>("background_opacity_slider");
     m_opacity = Config::read_i32("Terminal"sv, "Window"sv, "Opacity"sv);
@@ -101,7 +116,7 @@ TerminalSettingsViewWidget::TerminalSettingsViewWidget()
     else
         m_font = Gfx::FontDatabase::the().get_by_name(font_name);
     m_original_font = m_font;
-    font_text.set_text(String::from_deprecated_string(m_font->human_readable_name()).release_value_but_fixme_should_propagate_errors());
+    font_text.set_text(TRY(String::from_deprecated_string(m_font->human_readable_name())));
     font_text.set_font(m_font);
     font_button.on_click = [&](auto) {
         auto picker = GUI::FontPicker::construct(window(), m_font.ptr(), true);
@@ -207,6 +222,7 @@ TerminalSettingsViewWidget::TerminalSettingsViewWidget()
         set_modified(true);
     };
     show_scrollbar_checkbox.set_checked(m_show_scrollbar, GUI::AllowCallback::No);
+    return {};
 }
 
 VT::TerminalWidget::BellMode TerminalSettingsMainWidget::parse_bell(StringView bell_string)

+ 10 - 4
Userland/Applications/TerminalSettings/TerminalSettingsWidget.h

@@ -14,13 +14,16 @@
 #include <LibVT/TerminalWidget.h>
 
 class TerminalSettingsMainWidget final : public GUI::SettingsWindow::Tab {
-    C_OBJECT(TerminalSettingsMainWidget)
+    C_OBJECT_ABSTRACT(TerminalSettingsMainWidget)
 public:
+    static ErrorOr<NonnullRefPtr<TerminalSettingsMainWidget>> try_create();
+
     virtual void apply_settings() override;
     virtual void cancel_settings() override;
 
 private:
-    TerminalSettingsMainWidget();
+    TerminalSettingsMainWidget() = default;
+    ErrorOr<void> setup();
     void write_back_settings() const;
 
     static VT::TerminalWidget::BellMode parse_bell(StringView bell_string);
@@ -34,13 +37,16 @@ private:
 };
 
 class TerminalSettingsViewWidget final : public GUI::SettingsWindow::Tab {
-    C_OBJECT(TerminalSettingsViewWidget)
+    C_OBJECT_ABSTRACT(TerminalSettingsViewWidget)
 public:
+    static ErrorOr<NonnullRefPtr<TerminalSettingsViewWidget>> try_create();
+
     virtual void apply_settings() override;
     virtual void cancel_settings() override;
 
 private:
-    TerminalSettingsViewWidget();
+    TerminalSettingsViewWidget() = default;
+    ErrorOr<void> setup();
     void write_back_settings() const;
 
     RefPtr<Gfx::Font const> m_font;