diff --git a/Userland/Applications/BrowserSettings/main.cpp b/Userland/Applications/BrowserSettings/main.cpp index 0ac3903415..40883bf106 100644 --- a/Userland/Applications/BrowserSettings/main.cpp +++ b/Userland/Applications/BrowserSettings/main.cpp @@ -24,7 +24,7 @@ ErrorOr serenity_main(Main::Arguments arguments) auto app_icon = GUI::Icon::default_icon("app-browser"); - auto window = TRY(GUI::SettingsWindow::try_create("Browser Settings", GUI::SettingsWindow::ShowDefaultsButton::Yes)); + auto window = TRY(GUI::SettingsWindow::create("Browser Settings", GUI::SettingsWindow::ShowDefaultsButton::Yes)); window->set_icon(app_icon.bitmap_for_size(16)); TRY(window->add_tab("Browser")); diff --git a/Userland/Applications/DisplaySettings/main.cpp b/Userland/Applications/DisplaySettings/main.cpp index 66ac660196..e643f10aae 100644 --- a/Userland/Applications/DisplaySettings/main.cpp +++ b/Userland/Applications/DisplaySettings/main.cpp @@ -26,7 +26,7 @@ ErrorOr serenity_main(Main::Arguments arguments) auto app_icon = GUI::Icon::default_icon("app-display-settings"); - auto window = TRY(GUI::SettingsWindow::try_create("Display Settings")); + auto window = TRY(GUI::SettingsWindow::create("Display Settings")); TRY(window->add_tab("Background")); TRY(window->add_tab("Fonts")); TRY(window->add_tab("Monitor")); diff --git a/Userland/Applications/KeyboardSettings/main.cpp b/Userland/Applications/KeyboardSettings/main.cpp index 037a61e592..386a8bc1b9 100644 --- a/Userland/Applications/KeyboardSettings/main.cpp +++ b/Userland/Applications/KeyboardSettings/main.cpp @@ -29,7 +29,7 @@ ErrorOr serenity_main(Main::Arguments arguments) auto app_icon = GUI::Icon::default_icon("app-keyboard-settings"); - auto window = TRY(GUI::SettingsWindow::try_create("Keyboard Settings")); + auto window = TRY(GUI::SettingsWindow::create("Keyboard Settings")); window->set_icon(app_icon.bitmap_for_size(16)); TRY(window->add_tab("Keyboard")); diff --git a/Userland/Applications/MailSettings/main.cpp b/Userland/Applications/MailSettings/main.cpp index 8f4129642d..43279c54de 100644 --- a/Userland/Applications/MailSettings/main.cpp +++ b/Userland/Applications/MailSettings/main.cpp @@ -27,7 +27,7 @@ ErrorOr serenity_main(Main::Arguments arguments) auto app_icon = GUI::Icon::default_icon("app-mail"); - auto window = GUI::SettingsWindow::construct("Mail Settings", GUI::SettingsWindow::ShowDefaultsButton::Yes); + auto window = TRY(GUI::SettingsWindow::create("Mail Settings", GUI::SettingsWindow::ShowDefaultsButton::Yes)); TRY(window->add_tab("Mail")); window->set_icon(app_icon.bitmap_for_size(16)); diff --git a/Userland/Applications/MouseSettings/main.cpp b/Userland/Applications/MouseSettings/main.cpp index e09aa91f70..afbb5b5e1d 100644 --- a/Userland/Applications/MouseSettings/main.cpp +++ b/Userland/Applications/MouseSettings/main.cpp @@ -25,7 +25,7 @@ ErrorOr serenity_main(Main::Arguments arguments) auto app_icon = GUI::Icon::default_icon("app-mouse"); - auto window = TRY(GUI::SettingsWindow::try_create("Mouse Settings", GUI::SettingsWindow::ShowDefaultsButton::Yes)); + auto window = TRY(GUI::SettingsWindow::create("Mouse Settings", GUI::SettingsWindow::ShowDefaultsButton::Yes)); TRY(window->add_tab("Mouse")); TRY(window->add_tab("Cursor Theme")); window->set_icon(app_icon.bitmap_for_size(16)); diff --git a/Userland/Applications/TerminalSettings/main.cpp b/Userland/Applications/TerminalSettings/main.cpp index 8b796ab104..520637a243 100644 --- a/Userland/Applications/TerminalSettings/main.cpp +++ b/Userland/Applications/TerminalSettings/main.cpp @@ -26,7 +26,7 @@ ErrorOr serenity_main(Main::Arguments arguments) auto app_icon = GUI::Icon::default_icon("app-terminal"); - auto window = TRY(GUI::SettingsWindow::try_create("Terminal Settings")); + auto window = TRY(GUI::SettingsWindow::create("Terminal Settings")); window->set_icon(app_icon.bitmap_for_size(16)); TRY(window->add_tab("Terminal")); TRY(window->add_tab("View")); diff --git a/Userland/Libraries/LibGUI/SettingsWindow.cpp b/Userland/Libraries/LibGUI/SettingsWindow.cpp index 09563406c6..3beb028c61 100644 --- a/Userland/Libraries/LibGUI/SettingsWindow.cpp +++ b/Userland/Libraries/LibGUI/SettingsWindow.cpp @@ -15,60 +15,68 @@ namespace GUI { -SettingsWindow::SettingsWindow(StringView title, ShowDefaultsButton show_defaults_button) +ErrorOr> SettingsWindow::create(String title, ShowDefaultsButton show_defaults_button) { - set_title(title); - resize(400, 480); - set_resizable(false); - set_minimizable(false); + auto window = TRY(SettingsWindow::try_create()); - auto& main_widget = set_main_widget(); - main_widget.set_fill_with_background_color(true); - main_widget.set_layout(); - main_widget.layout()->set_margins(4); - main_widget.layout()->set_spacing(6); + window->set_title(move(title)); + window->resize(400, 480); + window->set_resizable(false); + window->set_minimizable(false); - m_tab_widget = main_widget.add(); + auto main_widget = TRY(window->try_set_main_widget()); + main_widget->set_fill_with_background_color(true); + TRY(main_widget->try_set_layout()); + main_widget->layout()->set_margins(4); + main_widget->layout()->set_spacing(6); - auto& button_container = main_widget.add(); - button_container.set_shrink_to_fit(true); - button_container.set_layout(); - button_container.layout()->set_spacing(6); + window->m_tab_widget = TRY(main_widget->try_add()); + + auto button_container = TRY(main_widget->try_add()); + button_container->set_shrink_to_fit(true); + TRY(button_container->try_set_layout()); + button_container->layout()->set_spacing(6); if (show_defaults_button == ShowDefaultsButton::Yes) { - m_reset_button = button_container.add("Defaults"); - m_reset_button->on_click = [&](auto) { - for (auto& tab : m_tabs) { + window->m_reset_button = TRY(button_container->try_add("Defaults")); + window->m_reset_button->on_click = [window = window->make_weak_ptr()](auto) mutable { + for (auto& tab : window->m_tabs) { tab.reset_default_values(); tab.apply_settings(); } }; } - button_container.layout()->add_spacer(); + TRY(button_container->layout()->try_add_spacer()); - m_ok_button = button_container.add("OK"); - m_ok_button->set_fixed_width(75); - m_ok_button->on_click = [&](auto) { - for (auto& tab : m_tabs) + window->m_ok_button = TRY(button_container->try_add("OK")); + window->m_ok_button->set_fixed_width(75); + window->m_ok_button->on_click = [window = window->make_weak_ptr()](auto) mutable { + for (auto& tab : window->m_tabs) tab.apply_settings(); GUI::Application::the()->quit(); }; - m_cancel_button = button_container.add("Cancel"); - m_cancel_button->set_fixed_width(75); - m_cancel_button->on_click = [&](auto) { - for (auto& tab : m_tabs) + window->m_cancel_button = TRY(button_container->try_add("Cancel")); + window->m_cancel_button->set_fixed_width(75); + window->m_cancel_button->on_click = [window = window->make_weak_ptr()](auto) mutable { + for (auto& tab : window->m_tabs) tab.cancel_settings(); GUI::Application::the()->quit(); }; - m_apply_button = button_container.add("Apply"); - m_apply_button->set_fixed_width(75); - m_apply_button->on_click = [&](auto) { - for (auto& tab : m_tabs) + window->m_apply_button = TRY(button_container->try_add("Apply")); + window->m_apply_button->set_fixed_width(75); + window->m_apply_button->on_click = [window = window->make_weak_ptr()](auto) mutable { + for (auto& tab : window->m_tabs) tab.apply_settings(); }; + + return window; +} + +SettingsWindow::SettingsWindow() +{ } SettingsWindow::~SettingsWindow() diff --git a/Userland/Libraries/LibGUI/SettingsWindow.h b/Userland/Libraries/LibGUI/SettingsWindow.h index d942ff4c73..d7530b8df2 100644 --- a/Userland/Libraries/LibGUI/SettingsWindow.h +++ b/Userland/Libraries/LibGUI/SettingsWindow.h @@ -29,6 +29,8 @@ public: No, }; + static ErrorOr> create(String title, ShowDefaultsButton = ShowDefaultsButton::No); + virtual ~SettingsWindow() override; template @@ -40,7 +42,7 @@ public: } private: - SettingsWindow(StringView title, ShowDefaultsButton = ShowDefaultsButton::No); + SettingsWindow(); RefPtr m_tab_widget; NonnullRefPtrVector m_tabs;