ソースを参照

LibGUI: Refactor out common code

This is prepping for a future commit.
thislooksfun 3 年 前
コミット
aea9ba3b42

+ 20 - 10
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) {
@@ -1457,14 +1453,28 @@ void TextEditor::undefer_reflow()
 }
 
 void TextEditor::try_show_autocomplete(UserRequestedAutocomplete user_requested_autocomplete)
+{
+    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));
+            m_autocomplete_box->show(position);
+        }
+    });
+}
+
+void TextEditor::try_update_autocomplete(Function<void()> callback)
+{
+    if (m_autocomplete_box && m_autocomplete_box->is_visible())
+        force_update_autocomplete(move(callback));
+}
+
+void TextEditor::force_update_autocomplete(Function<void()> callback)
 {
     if (m_autocomplete_provider) {
-        m_autocomplete_provider->provide_completions([&](auto completions) {
-            auto has_completions = !completions.is_empty();
+        m_autocomplete_provider->provide_completions([&, callback = move(callback)](auto completions) {
             m_autocomplete_box->update_suggestions(move(completions));
-            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);
+            if (callback)
+                callback();
         });
     }
 }

+ 2 - 0
Userland/Libraries/LibGUI/TextEditor.h

@@ -279,6 +279,8 @@ private:
         Yes
     };
     void try_show_autocomplete(UserRequestedAutocomplete);
+    void try_update_autocomplete(Function<void()> callback = {});
+    void force_update_autocomplete(Function<void()> callback = {});
     void hide_autocomplete_if_needed();
 
     int icon_size() const { return 16; }