From aea9ba3b421a871222ee0112b2a24a87d7ce457a Mon Sep 17 00:00:00 2001 From: thislooksfun Date: Thu, 28 Oct 2021 02:04:33 -0500 Subject: [PATCH] LibGUI: Refactor out common code This is prepping for a future commit. --- Userland/Libraries/LibGUI/TextEditor.cpp | 32 ++++++++++++++++-------- Userland/Libraries/LibGUI/TextEditor.h | 2 ++ 2 files changed, 23 insertions(+), 11 deletions(-) diff --git a/Userland/Libraries/LibGUI/TextEditor.cpp b/Userland/Libraries/LibGUI/TextEditor.cpp index cffe6fa8f3..f4b1cfff9e 100644 --- a/Userland/Libraries/LibGUI/TextEditor.cpp +++ b/Userland/Libraries/LibGUI/TextEditor.cpp @@ -804,11 +804,7 @@ void TextEditor::keydown_event(KeyEvent& event) } ArmedScopeGuard update_autocomplete { [&] { - if (m_autocomplete_box && m_autocomplete_box->is_visible()) { - m_autocomplete_provider->provide_completions([&](auto completions) { - m_autocomplete_box->update_suggestions(move(completions)); - }); - } + try_update_autocomplete(); } }; if (is_multi_line() && !event.shift() && !event.alt() && event.ctrl() && event.key() == KeyCode::Key_Space) { @@ -1458,13 +1454,27 @@ void TextEditor::undefer_reflow() void TextEditor::try_show_autocomplete(UserRequestedAutocomplete user_requested_autocomplete) { - if (m_autocomplete_provider) { - m_autocomplete_provider->provide_completions([&](auto completions) { - auto has_completions = !completions.is_empty(); - m_autocomplete_box->update_suggestions(move(completions)); + force_update_autocomplete([&, user_requested_autocomplete = move(user_requested_autocomplete)] { + if (user_requested_autocomplete == Yes || m_autocomplete_box->has_suggestions()) { auto position = content_rect_for_position(cursor()).translated(0, -visible_content_rect().y()).bottom_right().translated(screen_relative_rect().top_left().translated(ruler_width(), 0).translated(10, 5)); - if (has_completions || user_requested_autocomplete == Yes) - m_autocomplete_box->show(position); + m_autocomplete_box->show(position); + } + }); +} + +void TextEditor::try_update_autocomplete(Function callback) +{ + if (m_autocomplete_box && m_autocomplete_box->is_visible()) + force_update_autocomplete(move(callback)); +} + +void TextEditor::force_update_autocomplete(Function callback) +{ + if (m_autocomplete_provider) { + m_autocomplete_provider->provide_completions([&, callback = move(callback)](auto completions) { + m_autocomplete_box->update_suggestions(move(completions)); + if (callback) + callback(); }); } } diff --git a/Userland/Libraries/LibGUI/TextEditor.h b/Userland/Libraries/LibGUI/TextEditor.h index 9a1cfb8683..c959a22525 100644 --- a/Userland/Libraries/LibGUI/TextEditor.h +++ b/Userland/Libraries/LibGUI/TextEditor.h @@ -279,6 +279,8 @@ private: Yes }; void try_show_autocomplete(UserRequestedAutocomplete); + void try_update_autocomplete(Function callback = {}); + void force_update_autocomplete(Function callback = {}); void hide_autocomplete_if_needed(); int icon_size() const { return 16; }