فهرست منبع

Automatically start searching in the asset library when entering text

Entering text will now start searching automatically after 0.25 seconds
have passed (debounce delay).

This removes the need for a separate Search button.

(cherry picked from commit 6055db2a72f108fceb6eddd87c54274fffbb8646)
Hugo Locurcio 5 سال پیش
والد
کامیت
f7ed1f4d1f
2فایلهای تغییر یافته به همراه18 افزوده شده و 7 حذف شده
  1. 15 6
      editor/plugins/asset_library_editor_plugin.cpp
  2. 3 1
      editor/plugins/asset_library_editor_plugin.h

+ 15 - 6
editor/plugins/asset_library_editor_plugin.cpp

@@ -951,8 +951,11 @@ void EditorAssetLibrary::_search(int p_page) {
 	_api_request("asset", REQUESTING_SEARCH, args);
 }
 
-void EditorAssetLibrary::_search_text_entered(const String &p_text) {
+void EditorAssetLibrary::_search_text_changed(const String &p_text) {
+	filter_debounce_timer->start();
+}
 
+void EditorAssetLibrary::_filter_debounce_timer_timeout() {
 	_search();
 }
 
@@ -1328,7 +1331,8 @@ void EditorAssetLibrary::_bind_methods() {
 	ClassDB::bind_method("_select_category", &EditorAssetLibrary::_select_category);
 	ClassDB::bind_method("_image_request_completed", &EditorAssetLibrary::_image_request_completed);
 	ClassDB::bind_method("_search", &EditorAssetLibrary::_search, DEFVAL(0));
-	ClassDB::bind_method("_search_text_entered", &EditorAssetLibrary::_search_text_entered);
+	ClassDB::bind_method("_search_text_changed", &EditorAssetLibrary::_search_text_changed);
+	ClassDB::bind_method("_filter_debounce_timer_timeout", &EditorAssetLibrary::_filter_debounce_timer_timeout);
 	ClassDB::bind_method("_install_asset", &EditorAssetLibrary::_install_asset);
 	ClassDB::bind_method("_manage_plugins", &EditorAssetLibrary::_manage_plugins);
 	ClassDB::bind_method("_asset_open", &EditorAssetLibrary::_asset_open);
@@ -1359,10 +1363,15 @@ EditorAssetLibrary::EditorAssetLibrary(bool p_templates_only) {
 	filter = memnew(LineEdit);
 	search_hb->add_child(filter);
 	filter->set_h_size_flags(SIZE_EXPAND_FILL);
-	filter->connect("text_entered", this, "_search_text_entered");
-	search = memnew(Button(TTR("Search")));
-	search->connect("pressed", this, "_search");
-	search_hb->add_child(search);
+	filter->connect("text_changed", this, "_search_text_changed");
+
+	// Perform a search automatically if the user hasn't entered any text for a certain duration.
+	// This way, the user doesn't need to press Enter to initiate their search.
+	filter_debounce_timer = memnew(Timer);
+	filter_debounce_timer->set_one_shot(true);
+	filter_debounce_timer->set_wait_time(0.25);
+	filter_debounce_timer->connect("timeout", this, "_filter_debounce_timer_timeout");
+	search_hb->add_child(filter_debounce_timer);
 
 	if (!p_templates_only)
 		search_hb->add_child(memnew(VSeparator));

+ 3 - 1
editor/plugins/asset_library_editor_plugin.h

@@ -186,10 +186,10 @@ class EditorAssetLibrary : public PanelContainer {
 	Label *library_loading;
 	Label *library_error;
 	LineEdit *filter;
+	Timer *filter_debounce_timer;
 	OptionButton *categories;
 	OptionButton *repository;
 	OptionButton *sort;
-	Button *search;
 	HBoxContainer *error_hb;
 	TextureRect *error_tr;
 	Label *error_label;
@@ -284,10 +284,12 @@ class EditorAssetLibrary : public PanelContainer {
 
 	void _search(int p_page = 0);
 	void _rerun_search(int p_ignore);
+	void _search_text_changed(const String &p_text = "");
 	void _search_text_entered(const String &p_text = "");
 	void _api_request(const String &p_request, RequestType p_request_type, const String &p_arguments = "");
 	void _http_request_completed(int p_status, int p_code, const PoolStringArray &headers, const PoolByteArray &p_data);
 	void _http_download_completed(int p_status, int p_code, const PoolStringArray &headers, const PoolByteArray &p_data);
+	void _filter_debounce_timer_timeout();
 
 	void _repository_changed(int p_repository_id);
 	void _support_toggled(int p_support);