From 6b587714e81bd764ead6a874f0945a4763c9b171 Mon Sep 17 00:00:00 2001 From: Andreas Kling Date: Wed, 24 Nov 2021 23:05:25 +0100 Subject: [PATCH] Terminal: Use ErrorOr and TRY() when setting up the "find" dialog --- Userland/Applications/Terminal/main.cpp | 74 ++++++++++++------------- 1 file changed, 36 insertions(+), 38 deletions(-) diff --git a/Userland/Applications/Terminal/main.cpp b/Userland/Applications/Terminal/main.cpp index 1e0c8e9e6d..188730ed6e 100644 --- a/Userland/Applications/Terminal/main.cpp +++ b/Userland/Applications/Terminal/main.cpp @@ -178,68 +178,68 @@ static RefPtr create_settings_window(VT::TerminalWidget& terminal) return window; } -static RefPtr create_find_window(VT::TerminalWidget& terminal) +static ErrorOr> create_find_window(VT::TerminalWidget& terminal) { - auto window = GUI::Window::construct(); + auto window = TRY(GUI::Window::try_create()); window->set_window_type(GUI::WindowType::ToolWindow); window->set_title("Find in Terminal"); window->set_resizable(false); window->resize(300, 90); - auto& search = window->set_main_widget(); - search.set_fill_with_background_color(true); - search.set_background_role(ColorRole::Button); - search.set_layout(); - search.layout()->set_margins(4); + auto main_widget = TRY(window->try_set_main_widget()); + main_widget->set_fill_with_background_color(true); + main_widget->set_background_role(ColorRole::Button); + TRY(main_widget->try_set_layout()); + main_widget->layout()->set_margins(4); - auto& find = search.add(); - find.set_layout(); - find.layout()->set_margins(4); - find.set_fixed_height(30); + auto find = TRY(main_widget->try_add()); + TRY(find->try_set_layout()); + find->layout()->set_margins(4); + find->set_fixed_height(30); - auto& find_textbox = find.add(); - find_textbox.set_fixed_width(230); - find_textbox.set_focus(true); + auto find_textbox = TRY(find->try_add()); + find_textbox->set_fixed_width(230); + find_textbox->set_focus(true); if (terminal.has_selection()) - find_textbox.set_text(terminal.selected_text().replace("\n", " ", true)); - auto& find_backwards = find.add(); - find_backwards.set_fixed_width(25); - find_backwards.set_icon(Gfx::Bitmap::try_load_from_file("/res/icons/16x16/upward-triangle.png").release_value_but_fixme_should_propagate_errors()); - auto& find_forwards = find.add(); - find_forwards.set_fixed_width(25); - find_forwards.set_icon(Gfx::Bitmap::try_load_from_file("/res/icons/16x16/downward-triangle.png").release_value_but_fixme_should_propagate_errors()); + find_textbox->set_text(terminal.selected_text().replace("\n", " ", true)); + auto find_backwards = TRY(find->try_add()); + find_backwards->set_fixed_width(25); + find_backwards->set_icon(Gfx::Bitmap::try_load_from_file("/res/icons/16x16/upward-triangle.png").release_value_but_fixme_should_propagate_errors()); + auto find_forwards = TRY(find->try_add()); + find_forwards->set_fixed_width(25); + find_forwards->set_icon(Gfx::Bitmap::try_load_from_file("/res/icons/16x16/downward-triangle.png").release_value_but_fixme_should_propagate_errors()); - find_textbox.on_return_pressed = [&]() { - find_backwards.click(); + find_textbox->on_return_pressed = [find_backwards]() mutable { + find_backwards->click(); }; - find_textbox.on_shift_return_pressed = [&]() { - find_forwards.click(); + find_textbox->on_shift_return_pressed = [find_forwards]() mutable { + find_forwards->click(); }; - auto& match_case = search.add("Case sensitive"); - auto& wrap_around = search.add("Wrap around"); + auto match_case = TRY(main_widget->try_add("Case sensitive")); + auto wrap_around = TRY(main_widget->try_add("Wrap around")); - find_backwards.on_click = [&](auto) { - auto needle = find_textbox.text(); + find_backwards->on_click = [&terminal, find_textbox, match_case, wrap_around](auto) mutable { + auto needle = find_textbox->text(); if (needle.is_empty()) { return; } - auto found_range = terminal.find_previous(needle, terminal.normalized_selection().start(), match_case.is_checked(), wrap_around.is_checked()); + auto found_range = terminal.find_previous(needle, terminal.normalized_selection().start(), match_case->is_checked(), wrap_around->is_checked()); if (found_range.is_valid()) { terminal.scroll_to_row(found_range.start().row()); terminal.set_selection(found_range); } }; - find_forwards.on_click = [&](auto) { - auto needle = find_textbox.text(); + find_forwards->on_click = [&](auto) { + auto needle = find_textbox->text(); if (needle.is_empty()) { return; } - auto found_range = terminal.find_next(needle, terminal.normalized_selection().end(), match_case.is_checked(), wrap_around.is_checked()); + auto found_range = terminal.find_next(needle, terminal.normalized_selection().end(), match_case->is_checked(), wrap_around->is_checked()); if (found_range.is_valid()) { terminal.scroll_to_row(found_range.start().row()); @@ -329,7 +329,8 @@ ErrorOr serenity_main(Main::Arguments arguments) } RefPtr settings_window; - RefPtr find_window; + + auto find_window = TRY(create_find_window(terminal)); auto new_opacity = Config::read_i32("Terminal", "Window", "Opacity", 255); terminal->set_opacity(new_opacity); @@ -394,8 +395,6 @@ ErrorOr serenity_main(Main::Arguments arguments) TRY(edit_menu->try_add_separator()); TRY(edit_menu->try_add_action(GUI::Action::create("&Find...", { Mod_Ctrl | Mod_Shift, Key_F }, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/find.png").release_value_but_fixme_should_propagate_errors(), [&](auto&) { - if (!find_window) - find_window = create_find_window(terminal); find_window->show(); find_window->move_to_front(); }))); @@ -415,8 +414,7 @@ ErrorOr serenity_main(Main::Arguments arguments) TRY(help_menu->try_add_action(GUI::CommonActions::make_about_action("Terminal", app_icon, window))); window->on_close = [&]() { - if (find_window) - find_window->close(); + find_window->close(); if (settings_window) settings_window->close(); };