From 64519c9cef26a3233779a34dfbc1a31ff379026d Mon Sep 17 00:00:00 2001 From: Jacques Lucke Date: Sat, 5 Aug 2023 10:56:26 +0200 Subject: [PATCH 01/14] start remembering choosen search strings --- .../blender/blenkernel/BKE_string_search.hh | 13 ++++++++ source/blender/blenkernel/CMakeLists.txt | 2 ++ .../blenkernel/intern/string_search.cc | 30 +++++++++++++++++++ source/blender/editors/interface/interface.cc | 1 + .../editors/interface/interface_handlers.cc | 3 ++ .../editors/interface/interface_intern.hh | 1 + .../interface/interface_region_search.cc | 2 ++ 7 files changed, 52 insertions(+) create mode 100644 source/blender/blenkernel/BKE_string_search.hh create mode 100644 source/blender/blenkernel/intern/string_search.cc diff --git a/source/blender/blenkernel/BKE_string_search.hh b/source/blender/blenkernel/BKE_string_search.hh new file mode 100644 index 00000000000..93b49abc55d --- /dev/null +++ b/source/blender/blenkernel/BKE_string_search.hh @@ -0,0 +1,13 @@ +/* SPDX-FileCopyrightText: 2023 Blender Foundation + * + * SPDX-License-Identifier: GPL-2.0-or-later */ + +#pragma once + +#include "BLI_string_ref.hh" + +namespace blender::bke::string_search { + +void add_recent_search(StringRef search_id, StringRef choosen_str); + +} diff --git a/source/blender/blenkernel/CMakeLists.txt b/source/blender/blenkernel/CMakeLists.txt index 4f34adc5c70..cd2a7db8013 100644 --- a/source/blender/blenkernel/CMakeLists.txt +++ b/source/blender/blenkernel/CMakeLists.txt @@ -273,6 +273,7 @@ set(SRC intern/softbody.c intern/sound.cc intern/speaker.cc + intern/string_search.cc intern/studiolight.cc intern/subdiv.cc intern/subdiv_ccg.cc @@ -482,6 +483,7 @@ set(SRC BKE_softbody.h BKE_sound.h BKE_speaker.h + BKE_string_search.hh BKE_studiolight.h BKE_subdiv.hh BKE_subdiv_ccg.hh diff --git a/source/blender/blenkernel/intern/string_search.cc b/source/blender/blenkernel/intern/string_search.cc new file mode 100644 index 00000000000..f71f21a16ec --- /dev/null +++ b/source/blender/blenkernel/intern/string_search.cc @@ -0,0 +1,30 @@ +/* SPDX-FileCopyrightText: 2023 Blender Foundation + * + * SPDX-License-Identifier: GPL-2.0-or-later */ + +#include "BKE_string_search.hh" + +#include "BLI_map.hh" + +namespace blender::bke::string_search { + +struct RecentSearches { + int logical_clock = 0; + Map map; +}; + +RecentSearches &get_recent_searches() +{ + static RecentSearches recent_searches; + return recent_searches; +} + +void add_recent_search(const StringRef search_id, const StringRef choosen_str) +{ + std::string key = search_id + choosen_str; + RecentSearches &searches = get_recent_searches(); + searches.map.add_overwrite(std::move(key), searches.logical_clock); + searches.logical_clock++; +} + +} // namespace blender::bke::string_search diff --git a/source/blender/editors/interface/interface.cc b/source/blender/editors/interface/interface.cc index a73d55a6a48..ae6502aeec1 100644 --- a/source/blender/editors/interface/interface.cc +++ b/source/blender/editors/interface/interface.cc @@ -3445,6 +3445,7 @@ static void ui_but_free_type_specific(uiBut *but) switch (but->type) { case UI_BTYPE_SEARCH_MENU: { uiButSearch *search_but = (uiButSearch *)but; + MEM_SAFE_FREE(search_but->item_active_str); if (search_but->arg_free_fn) { search_but->arg_free_fn(search_but->arg); diff --git a/source/blender/editors/interface/interface_handlers.cc b/source/blender/editors/interface/interface_handlers.cc index f8beac16bc4..51af1a075ff 100644 --- a/source/blender/editors/interface/interface_handlers.cc +++ b/source/blender/editors/interface/interface_handlers.cc @@ -45,6 +45,7 @@ #include "BKE_paint.hh" #include "BKE_report.h" #include "BKE_screen.h" +#include "BKE_string_search.hh" #include "BKE_tracking.h" #include "BKE_unit.h" @@ -1253,6 +1254,8 @@ static void ui_apply_but_TEX(bContext *C, uiBut *but, uiHandleButtonData *data) if ((but->func_arg2 == nullptr) && (but->type == UI_BTYPE_SEARCH_MENU)) { uiButSearch *search_but = (uiButSearch *)but; but->func_arg2 = search_but->item_active; + + blender::bke::string_search::add_recent_search("", search_but->item_active_str); } ui_apply_but_func(C, but); diff --git a/source/blender/editors/interface/interface_intern.hh b/source/blender/editors/interface/interface_intern.hh index fe0066abca7..2fc9dc541bf 100644 --- a/source/blender/editors/interface/interface_intern.hh +++ b/source/blender/editors/interface/interface_intern.hh @@ -315,6 +315,7 @@ struct uiButSearch : public uiBut { uiButSearchListenFn listen_fn = nullptr; void *item_active = nullptr; + char *item_active_str; void *arg = nullptr; uiFreeArgFunc arg_free_fn = nullptr; diff --git a/source/blender/editors/interface/interface_region_search.cc b/source/blender/editors/interface/interface_region_search.cc index 408052b5e25..8d911e7ac6e 100644 --- a/source/blender/editors/interface/interface_region_search.cc +++ b/source/blender/editors/interface/interface_region_search.cc @@ -303,6 +303,8 @@ bool ui_searchbox_apply(uiBut *but, ARegion *region) } search_but->item_active = data->items.pointers[data->active]; + MEM_SAFE_FREE(search_but->item_active_str); + search_but->item_active_str = BLI_strdup(data->items.names[data->active]); return true; } -- 2.30.2 From c82399417815576f65b5624cec7c24a94e4cf8ba Mon Sep 17 00:00:00 2001 From: Jacques Lucke Date: Sat, 5 Aug 2023 11:26:44 +0200 Subject: [PATCH 02/14] initial working recent search result --- .../blender/blenkernel/BKE_string_search.hh | 6 ++-- .../blenkernel/intern/string_search.cc | 26 +++++++++----- source/blender/blenlib/BLI_string_search.hh | 14 +++++++- .../blender/blenlib/intern/string_search.cc | 36 ++++++++++++------- source/blender/editors/interface/interface.cc | 2 +- .../interface_template_attribute_search.cc | 5 +-- .../interface_template_search_menu.cc | 2 +- .../editors/interface/interface_templates.cc | 2 +- .../editors/interface/interface_utils.cc | 2 +- .../editors/space_node/add_node_search.cc | 4 +-- .../editors/space_node/link_drag_search.cc | 2 +- .../node_geometry_attribute_search.cc | 2 +- .../blender/editors/space_node/node_select.cc | 2 +- source/blender/modifiers/intern/MOD_nodes.cc | 2 +- 14 files changed, 71 insertions(+), 36 deletions(-) diff --git a/source/blender/blenkernel/BKE_string_search.hh b/source/blender/blenkernel/BKE_string_search.hh index 93b49abc55d..c2795fbb01a 100644 --- a/source/blender/blenkernel/BKE_string_search.hh +++ b/source/blender/blenkernel/BKE_string_search.hh @@ -4,10 +4,12 @@ #pragma once -#include "BLI_string_ref.hh" +#include "BLI_string_search.hh" namespace blender::bke::string_search { void add_recent_search(StringRef search_id, StringRef choosen_str); -} +const blender::string_search::RecentCache *get_recent_cache(StringRef search_id); + +} // namespace blender::bke::string_search diff --git a/source/blender/blenkernel/intern/string_search.cc b/source/blender/blenkernel/intern/string_search.cc index f71f21a16ec..6b62d81276c 100644 --- a/source/blender/blenkernel/intern/string_search.cc +++ b/source/blender/blenkernel/intern/string_search.cc @@ -8,23 +8,31 @@ namespace blender::bke::string_search { -struct RecentSearches { +using blender::string_search::RecentCache; + +struct RecentCacheStorage { int logical_clock = 0; - Map map; + Map map; }; -RecentSearches &get_recent_searches() +static RecentCacheStorage &get_recent_cache_storage() { - static RecentSearches recent_searches; - return recent_searches; + static RecentCacheStorage storage; + return storage; } void add_recent_search(const StringRef search_id, const StringRef choosen_str) { - std::string key = search_id + choosen_str; - RecentSearches &searches = get_recent_searches(); - searches.map.add_overwrite(std::move(key), searches.logical_clock); - searches.logical_clock++; + RecentCacheStorage &storage = get_recent_cache_storage(); + RecentCache &cache = storage.map.lookup_or_add_default_as(search_id); + cache.logical_time_by_str.add_overwrite(choosen_str, storage.logical_clock); + storage.logical_clock++; +} + +const RecentCache *get_recent_cache(const StringRef search_id) +{ + RecentCacheStorage &storage = get_recent_cache_storage(); + return storage.map.lookup_ptr_as(search_id); } } // namespace blender::bke::string_search diff --git a/source/blender/blenlib/BLI_string_search.hh b/source/blender/blenlib/BLI_string_search.hh index eb0c8081050..f1bbfaa5ac0 100644 --- a/source/blender/blenlib/BLI_string_search.hh +++ b/source/blender/blenlib/BLI_string_search.hh @@ -5,6 +5,7 @@ #pragma once #include "BLI_linear_allocator.hh" +#include "BLI_map.hh" #include "BLI_span.hh" #include "BLI_string_ref.hh" #include "BLI_vector.hh" @@ -12,10 +13,15 @@ namespace blender::string_search { struct SearchItem { + void *user_data; Span normalized_words; int length; - void *user_data; int weight; + int recent_time; +}; + +struct RecentCache { + Map logical_time_by_str; }; /** @@ -25,6 +31,7 @@ class StringSearchBase { protected: LinearAllocator<> allocator_; Vector items_; + const RecentCache *recent_cache_ = nullptr; protected: void add_impl(StringRef str, void *user_data, int weight); @@ -43,6 +50,11 @@ class StringSearchBase { */ template class StringSearch : private StringSearchBase { public: + StringSearch(const RecentCache *recent_cache = nullptr) + { + this->recent_cache_ = recent_cache; + } + /** * Add a new possible result to the search. * diff --git a/source/blender/blenlib/intern/string_search.cc b/source/blender/blenlib/intern/string_search.cc index e6c05d76d20..9a7fef15e16 100644 --- a/source/blender/blenlib/intern/string_search.cc +++ b/source/blender/blenlib/intern/string_search.cc @@ -398,8 +398,14 @@ void StringSearchBase::add_impl(const StringRef str, void *user_data, const int { Vector words; string_search::extract_normalized_words(str, allocator_, words); - items_.append( - {allocator_.construct_array_copy(words.as_span()), int(str.size()), user_data, weight}); + const int recent_time = recent_cache_ ? + recent_cache_->logical_time_by_str.lookup_default(str, -1) : + -1; + items_.append({user_data, + allocator_.construct_array_copy(words.as_span()), + int(str.size()), + weight, + recent_time}); } Vector StringSearchBase::query_impl(const StringRef query) const @@ -429,17 +435,23 @@ Vector StringSearchBase::query_impl(const StringRef query) const Vector sorted_result_indices; for (const int score : found_scores) { MutableSpan indices = result_indices_by_score.lookup(score); - if (score == found_scores[0] && !query.is_empty()) { - /* Sort items with best score by length. Shorter items are more likely the ones you are - * looking for. This also ensures that exact matches will be at the top, even if the query is - * a sub-string of another item. */ - std::sort(indices.begin(), indices.end(), [&](int a, int b) { - return items_[a].length < items_[b].length; - }); - /* Prefer items with larger weights. Use `stable_sort` so that if the weights are the same, - * the order won't be changed. */ + if (score == found_scores[0]) { + if (!query.is_empty()) { + /* Sort items with best score by length. Shorter items are more likely the ones you are + * looking for. This also ensures that exact matches will be at the top, even if the query + * is a sub-string of another item. */ + std::sort(indices.begin(), indices.end(), [&](int a, int b) { + return items_[a].length < items_[b].length; + }); + /* Prefer items with larger weights. Use `stable_sort` so that if the weights are the same, + * the order won't be changed. */ + std::stable_sort(indices.begin(), indices.end(), [&](int a, int b) { + return items_[a].weight > items_[b].weight; + }); + } + /* Prefer items that have been selected recently. */ std::stable_sort(indices.begin(), indices.end(), [&](int a, int b) { - return items_[a].weight > items_[b].weight; + return items_[a].recent_time > items_[b].recent_time; }); } sorted_result_indices.extend(indices); diff --git a/source/blender/editors/interface/interface.cc b/source/blender/editors/interface/interface.cc index 29bd0dcd1c4..7c22ed4c0c1 100644 --- a/source/blender/editors/interface/interface.cc +++ b/source/blender/editors/interface/interface.cc @@ -26,7 +26,6 @@ #include "BLI_math.h" #include "BLI_rect.h" #include "BLI_string.h" -#include "BLI_string_search.hh" #include "BLI_string_utf8.h" #include "BLI_vector.hh" @@ -41,6 +40,7 @@ #include "BKE_report.h" #include "BKE_scene.h" #include "BKE_screen.h" +#include "BKE_string_search.hh" #include "BKE_unit.h" #include "ED_asset.hh" diff --git a/source/blender/editors/interface/interface_template_attribute_search.cc b/source/blender/editors/interface/interface_template_attribute_search.cc index 638bb2c97c6..c91a48d89d2 100644 --- a/source/blender/editors/interface/interface_template_attribute_search.cc +++ b/source/blender/editors/interface/interface_template_attribute_search.cc @@ -7,7 +7,6 @@ */ #include "BLI_string_ref.hh" -#include "BLI_string_search.hh" #include "DNA_customdata_types.h" @@ -17,6 +16,7 @@ #include "BLT_translation.h" #include "BKE_attribute.hh" +#include "BKE_string_search.hh" #include "NOD_geometry_nodes_log.hh" @@ -91,7 +91,8 @@ void attribute_search_add_items(StringRefNull str, * so the items are in the same order they will appear in while searching. */ const char *string = is_first ? "" : str.c_str(); - string_search::StringSearch search; + string_search::StringSearch search( + bke::string_search::get_recent_cache("")); for (const GeometryAttributeInfo *item : infos) { if (!bke::allow_procedural_attribute_access(item->name)) { continue; diff --git a/source/blender/editors/interface/interface_template_search_menu.cc b/source/blender/editors/interface/interface_template_search_menu.cc index f19e51b5f5f..e2d4f74b54b 100644 --- a/source/blender/editors/interface/interface_template_search_menu.cc +++ b/source/blender/editors/interface/interface_template_search_menu.cc @@ -30,7 +30,6 @@ #include "BLI_math_matrix.h" #include "BLI_memarena.h" #include "BLI_string.h" -#include "BLI_string_search.hh" #include "BLI_string_utils.h" #include "BLI_utildefines.h" @@ -39,6 +38,7 @@ #include "BKE_context.h" #include "BKE_global.h" #include "BKE_screen.h" +#include "BKE_string_search.hh" #include "ED_screen.hh" diff --git a/source/blender/editors/interface/interface_templates.cc b/source/blender/editors/interface/interface_templates.cc index 90294e575b2..0bc857b2a80 100644 --- a/source/blender/editors/interface/interface_templates.cc +++ b/source/blender/editors/interface/interface_templates.cc @@ -33,7 +33,6 @@ #include "BLI_path_util.h" #include "BLI_rect.h" #include "BLI_string.h" -#include "BLI_string_search.hh" #include "BLI_string_utils.h" #include "BLI_timecode.h" #include "BLI_utildefines.h" @@ -67,6 +66,7 @@ #include "BKE_scene.h" #include "BKE_screen.h" #include "BKE_shader_fx.h" +#include "BKE_string_search.hh" #include "DEG_depsgraph.h" #include "DEG_depsgraph_build.h" diff --git a/source/blender/editors/interface/interface_utils.cc b/source/blender/editors/interface/interface_utils.cc index 638c4e369a6..405b5ce0c7e 100644 --- a/source/blender/editors/interface/interface_utils.cc +++ b/source/blender/editors/interface/interface_utils.cc @@ -19,7 +19,6 @@ #include "BLI_listbase.h" #include "BLI_math.h" #include "BLI_string.h" -#include "BLI_string_search.hh" #include "BLI_utildefines.h" #include "BLT_translation.h" @@ -30,6 +29,7 @@ #include "BKE_lib_id.h" #include "BKE_report.h" #include "BKE_screen.h" +#include "BKE_string_search.hh" #include "MEM_guardedalloc.h" diff --git a/source/blender/editors/space_node/add_node_search.cc b/source/blender/editors/space_node/add_node_search.cc index e91d1285f08..beb0ef22e2e 100644 --- a/source/blender/editors/space_node/add_node_search.cc +++ b/source/blender/editors/space_node/add_node_search.cc @@ -9,7 +9,6 @@ #include "AS_asset_representation.hh" #include "BLI_listbase.h" -#include "BLI_string_search.hh" #include "DNA_space_types.h" @@ -20,6 +19,7 @@ #include "BKE_main.h" #include "BKE_node_tree_update.h" #include "BKE_screen.h" +#include "BKE_string_search.hh" #include "DEG_depsgraph_build.h" @@ -185,7 +185,7 @@ static void add_node_search_update_fn( storage.update_items_tag = false; } - string_search::StringSearch search; + string_search::StringSearch search(bke::string_search::get_recent_cache("")); for (nodes::AddNodeItem &item : storage.search_add_items) { search.add(item.ui_name, &item, item.weight); diff --git a/source/blender/editors/space_node/link_drag_search.cc b/source/blender/editors/space_node/link_drag_search.cc index 1e4f97afb69..5b2e1c34292 100644 --- a/source/blender/editors/space_node/link_drag_search.cc +++ b/source/blender/editors/space_node/link_drag_search.cc @@ -5,7 +5,6 @@ #include "AS_asset_representation.hh" #include "BLI_listbase.h" -#include "BLI_string_search.hh" #include "DNA_space_types.h" @@ -16,6 +15,7 @@ #include "BKE_node_runtime.hh" #include "BKE_node_tree_update.h" #include "BKE_screen.h" +#include "BKE_string_search.hh" #include "NOD_socket.hh" #include "NOD_socket_search_link.hh" diff --git a/source/blender/editors/space_node/node_geometry_attribute_search.cc b/source/blender/editors/space_node/node_geometry_attribute_search.cc index e019e4223a4..3cf2c4aacb5 100644 --- a/source/blender/editors/space_node/node_geometry_attribute_search.cc +++ b/source/blender/editors/space_node/node_geometry_attribute_search.cc @@ -8,7 +8,6 @@ #include "BLI_rect.h" #include "BLI_set.hh" #include "BLI_string_ref.hh" -#include "BLI_string_search.hh" #include "DNA_modifier_types.h" #include "DNA_node_types.h" @@ -20,6 +19,7 @@ #include "BKE_node_tree_update.h" #include "BKE_node_tree_zones.hh" #include "BKE_object.h" +#include "BKE_string_search.hh" #include "RNA_access.h" #include "RNA_enum_types.h" diff --git a/source/blender/editors/space_node/node_select.cc b/source/blender/editors/space_node/node_select.cc index 98abcfb207d..f9c05ff9f8a 100644 --- a/source/blender/editors/space_node/node_select.cc +++ b/source/blender/editors/space_node/node_select.cc @@ -16,7 +16,6 @@ #include "BLI_listbase.h" #include "BLI_rect.h" #include "BLI_string.h" -#include "BLI_string_search.hh" #include "BLI_string_utf8.h" #include "BLI_utildefines.h" @@ -25,6 +24,7 @@ #include "BKE_node.hh" #include "BKE_node_runtime.hh" #include "BKE_node_tree_update.h" +#include "BKE_string_search.hh" #include "BKE_workspace.h" #include "ED_node.hh" /* own include */ diff --git a/source/blender/modifiers/intern/MOD_nodes.cc b/source/blender/modifiers/intern/MOD_nodes.cc index 1c23e87fc06..8b354cebcff 100644 --- a/source/blender/modifiers/intern/MOD_nodes.cc +++ b/source/blender/modifiers/intern/MOD_nodes.cc @@ -19,7 +19,6 @@ #include "BLI_path_util.h" #include "BLI_set.hh" #include "BLI_string.h" -#include "BLI_string_search.hh" #include "BLI_utildefines.h" #include "DNA_collection_types.h" @@ -57,6 +56,7 @@ #include "BKE_screen.h" #include "BKE_simulation_state.hh" #include "BKE_simulation_state_serialize.hh" +#include "BKE_string_search.hh" #include "BKE_workspace.h" #include "BLO_read_write.h" -- 2.30.2 From c44d1af04e4c23d02cc377bfc30ddff44be0308f Mon Sep 17 00:00:00 2001 From: Jacques Lucke Date: Sat, 5 Aug 2023 11:48:15 +0200 Subject: [PATCH 03/14] cleanups --- source/blender/blenkernel/BKE_string_search.hh | 9 +++++++-- source/blender/blenkernel/intern/string_search.cc | 6 ++++-- source/blender/blenlib/BLI_string_search.hh | 4 ++++ source/blender/editors/interface/interface.cc | 2 +- source/blender/editors/interface/interface_handlers.cc | 2 +- .../interface/interface_template_attribute_search.cc | 3 +-- .../editors/interface/interface_template_search_menu.cc | 2 +- source/blender/editors/interface/interface_templates.cc | 2 +- source/blender/editors/interface/interface_utils.cc | 2 +- source/blender/editors/space_node/add_node_search.cc | 2 +- source/blender/editors/space_node/link_drag_search.cc | 2 +- .../editors/space_node/node_geometry_attribute_search.cc | 1 - source/blender/editors/space_node/node_select.cc | 2 +- source/blender/modifiers/intern/MOD_nodes.cc | 1 - 14 files changed, 24 insertions(+), 16 deletions(-) diff --git a/source/blender/blenkernel/BKE_string_search.hh b/source/blender/blenkernel/BKE_string_search.hh index c2795fbb01a..09f2e56881a 100644 --- a/source/blender/blenkernel/BKE_string_search.hh +++ b/source/blender/blenkernel/BKE_string_search.hh @@ -8,8 +8,13 @@ namespace blender::bke::string_search { -void add_recent_search(StringRef search_id, StringRef choosen_str); +void add_recent_search(StringRef choosen_str); -const blender::string_search::RecentCache *get_recent_cache(StringRef search_id); +const blender::string_search::RecentCache *get_recent_cache(); + +template class StringSearch : public blender::string_search::StringSearch { + public: + StringSearch() : blender::string_search::StringSearch(get_recent_cache()) {} +}; } // namespace blender::bke::string_search diff --git a/source/blender/blenkernel/intern/string_search.cc b/source/blender/blenkernel/intern/string_search.cc index 6b62d81276c..8040aee13db 100644 --- a/source/blender/blenkernel/intern/string_search.cc +++ b/source/blender/blenkernel/intern/string_search.cc @@ -21,16 +21,18 @@ static RecentCacheStorage &get_recent_cache_storage() return storage; } -void add_recent_search(const StringRef search_id, const StringRef choosen_str) +void add_recent_search(const StringRef choosen_str) { + const StringRef search_id = ""; RecentCacheStorage &storage = get_recent_cache_storage(); RecentCache &cache = storage.map.lookup_or_add_default_as(search_id); cache.logical_time_by_str.add_overwrite(choosen_str, storage.logical_clock); storage.logical_clock++; } -const RecentCache *get_recent_cache(const StringRef search_id) +const RecentCache *get_recent_cache() { + const StringRef search_id = ""; RecentCacheStorage &storage = get_recent_cache_storage(); return storage.map.lookup_ptr_as(search_id); } diff --git a/source/blender/blenlib/BLI_string_search.hh b/source/blender/blenlib/BLI_string_search.hh index f1bbfaa5ac0..b25dbdf90a2 100644 --- a/source/blender/blenlib/BLI_string_search.hh +++ b/source/blender/blenlib/BLI_string_search.hh @@ -21,6 +21,10 @@ struct SearchItem { }; struct RecentCache { + /** + * Stores a logical time stamp for each previously choosen search item. The higher the time + * stamp, the more recent the item has been selected. + */ Map logical_time_by_str; }; diff --git a/source/blender/editors/interface/interface.cc b/source/blender/editors/interface/interface.cc index 7c22ed4c0c1..319a48cdefc 100644 --- a/source/blender/editors/interface/interface.cc +++ b/source/blender/editors/interface/interface.cc @@ -6432,7 +6432,7 @@ static void operator_enum_search_update_fn( const EnumPropertyItem *all_items; RNA_property_enum_items_gettexted((bContext *)C, ptr, prop, &all_items, nullptr, &do_free); - blender::string_search::StringSearch search; + blender::bke::string_search::StringSearch search; for (const EnumPropertyItem *item = all_items; item->identifier; item++) { search.add(item->name, item); diff --git a/source/blender/editors/interface/interface_handlers.cc b/source/blender/editors/interface/interface_handlers.cc index 51af1a075ff..df15159cd75 100644 --- a/source/blender/editors/interface/interface_handlers.cc +++ b/source/blender/editors/interface/interface_handlers.cc @@ -1255,7 +1255,7 @@ static void ui_apply_but_TEX(bContext *C, uiBut *but, uiHandleButtonData *data) uiButSearch *search_but = (uiButSearch *)but; but->func_arg2 = search_but->item_active; - blender::bke::string_search::add_recent_search("", search_but->item_active_str); + blender::bke::string_search::add_recent_search(search_but->item_active_str); } ui_apply_but_func(C, but); diff --git a/source/blender/editors/interface/interface_template_attribute_search.cc b/source/blender/editors/interface/interface_template_attribute_search.cc index c91a48d89d2..59607a26960 100644 --- a/source/blender/editors/interface/interface_template_attribute_search.cc +++ b/source/blender/editors/interface/interface_template_attribute_search.cc @@ -91,8 +91,7 @@ void attribute_search_add_items(StringRefNull str, * so the items are in the same order they will appear in while searching. */ const char *string = is_first ? "" : str.c_str(); - string_search::StringSearch search( - bke::string_search::get_recent_cache("")); + bke::string_search::StringSearch search; for (const GeometryAttributeInfo *item : infos) { if (!bke::allow_procedural_attribute_access(item->name)) { continue; diff --git a/source/blender/editors/interface/interface_template_search_menu.cc b/source/blender/editors/interface/interface_template_search_menu.cc index e2d4f74b54b..427766237b0 100644 --- a/source/blender/editors/interface/interface_template_search_menu.cc +++ b/source/blender/editors/interface/interface_template_search_menu.cc @@ -1005,7 +1005,7 @@ static void menu_search_update_fn(const bContext * /*C*/, { MenuSearch_Data *data = (MenuSearch_Data *)arg; - blender::string_search::StringSearch search; + blender::bke::string_search::StringSearch search; LISTBASE_FOREACH (MenuSearch_Item *, item, &data->items) { search.add(item->drawwstr_full, item); diff --git a/source/blender/editors/interface/interface_templates.cc b/source/blender/editors/interface/interface_templates.cc index 0bc857b2a80..e579e0f2dab 100644 --- a/source/blender/editors/interface/interface_templates.cc +++ b/source/blender/editors/interface/interface_templates.cc @@ -425,7 +425,7 @@ static void id_search_cb(const bContext *C, ListBase *lb = template_ui->idlb; const int flag = RNA_property_flag(template_ui->prop); - blender::string_search::StringSearch search; + blender::bke::string_search::StringSearch search; /* ID listbase */ LISTBASE_FOREACH (ID *, id, lb) { diff --git a/source/blender/editors/interface/interface_utils.cc b/source/blender/editors/interface/interface_utils.cc index 405b5ce0c7e..8f404089201 100644 --- a/source/blender/editors/interface/interface_utils.cc +++ b/source/blender/editors/interface/interface_utils.cc @@ -520,7 +520,7 @@ void ui_rna_collection_search_update_fn( char *name; bool has_id_icon = false; - blender::string_search::StringSearch search; + blender::bke::string_search::StringSearch search; if (data->search_prop != nullptr) { /* build a temporary list of relevant items first */ diff --git a/source/blender/editors/space_node/add_node_search.cc b/source/blender/editors/space_node/add_node_search.cc index beb0ef22e2e..c6c33dee1e7 100644 --- a/source/blender/editors/space_node/add_node_search.cc +++ b/source/blender/editors/space_node/add_node_search.cc @@ -185,7 +185,7 @@ static void add_node_search_update_fn( storage.update_items_tag = false; } - string_search::StringSearch search(bke::string_search::get_recent_cache("")); + bke::string_search::StringSearch search; for (nodes::AddNodeItem &item : storage.search_add_items) { search.add(item.ui_name, &item, item.weight); diff --git a/source/blender/editors/space_node/link_drag_search.cc b/source/blender/editors/space_node/link_drag_search.cc index 5b2e1c34292..545da445909 100644 --- a/source/blender/editors/space_node/link_drag_search.cc +++ b/source/blender/editors/space_node/link_drag_search.cc @@ -344,7 +344,7 @@ static void link_drag_search_update_fn( storage.update_items_tag = false; } - string_search::StringSearch search; + bke::string_search::StringSearch search; for (SocketLinkOperation &op : storage.search_link_ops) { search.add(op.name, &op, op.weight); diff --git a/source/blender/editors/space_node/node_geometry_attribute_search.cc b/source/blender/editors/space_node/node_geometry_attribute_search.cc index 3cf2c4aacb5..edbaeac101a 100644 --- a/source/blender/editors/space_node/node_geometry_attribute_search.cc +++ b/source/blender/editors/space_node/node_geometry_attribute_search.cc @@ -19,7 +19,6 @@ #include "BKE_node_tree_update.h" #include "BKE_node_tree_zones.hh" #include "BKE_object.h" -#include "BKE_string_search.hh" #include "RNA_access.h" #include "RNA_enum_types.h" diff --git a/source/blender/editors/space_node/node_select.cc b/source/blender/editors/space_node/node_select.cc index f9c05ff9f8a..ea5a0be9a41 100644 --- a/source/blender/editors/space_node/node_select.cc +++ b/source/blender/editors/space_node/node_select.cc @@ -1356,7 +1356,7 @@ static void node_find_update_fn(const bContext *C, { SpaceNode *snode = CTX_wm_space_node(C); - string_search::StringSearch search; + bke::string_search::StringSearch search; for (bNode *node : snode->edittree->all_nodes()) { char name[256]; diff --git a/source/blender/modifiers/intern/MOD_nodes.cc b/source/blender/modifiers/intern/MOD_nodes.cc index 8b354cebcff..efaed9f0d36 100644 --- a/source/blender/modifiers/intern/MOD_nodes.cc +++ b/source/blender/modifiers/intern/MOD_nodes.cc @@ -56,7 +56,6 @@ #include "BKE_screen.h" #include "BKE_simulation_state.hh" #include "BKE_simulation_state_serialize.hh" -#include "BKE_string_search.hh" #include "BKE_workspace.h" #include "BLO_read_write.h" -- 2.30.2 From 391eecf0590e119e437d95e9909ffdc1b4f8f080 Mon Sep 17 00:00:00 2001 From: Jacques Lucke Date: Sat, 5 Aug 2023 12:14:07 +0200 Subject: [PATCH 04/14] support reading and writing recent searches to disk --- source/blender/blenkernel/BKE_appdir.h | 1 + .../blender/blenkernel/BKE_string_search.hh | 3 + .../blenkernel/intern/string_search.cc | 65 +++++++++++++++++-- .../windowmanager/intern/wm_init_exit.cc | 6 ++ 4 files changed, 69 insertions(+), 6 deletions(-) diff --git a/source/blender/blenkernel/BKE_appdir.h b/source/blender/blenkernel/BKE_appdir.h index affb9c0ab82..73e1e20fe1e 100644 --- a/source/blender/blenkernel/BKE_appdir.h +++ b/source/blender/blenkernel/BKE_appdir.h @@ -188,6 +188,7 @@ enum { #define BLENDER_QUIT_FILE "quit.blend" #define BLENDER_BOOKMARK_FILE "bookmarks.txt" #define BLENDER_HISTORY_FILE "recent-files.txt" +#define BLENDER_RECENT_SEARCHES_FILE "recent-searches.txt" #define BLENDER_PLATFORM_SUPPORT_FILE "platform_support.txt" #ifdef __cplusplus diff --git a/source/blender/blenkernel/BKE_string_search.hh b/source/blender/blenkernel/BKE_string_search.hh index 09f2e56881a..6558fd387ab 100644 --- a/source/blender/blenkernel/BKE_string_search.hh +++ b/source/blender/blenkernel/BKE_string_search.hh @@ -12,6 +12,9 @@ void add_recent_search(StringRef choosen_str); const blender::string_search::RecentCache *get_recent_cache(); +void write_recent_searches_file(); +void read_recent_searches_file(); + template class StringSearch : public blender::string_search::StringSearch { public: StringSearch() : blender::string_search::StringSearch(get_recent_cache()) {} diff --git a/source/blender/blenkernel/intern/string_search.cc b/source/blender/blenkernel/intern/string_search.cc index 8040aee13db..c0c243d1a14 100644 --- a/source/blender/blenkernel/intern/string_search.cc +++ b/source/blender/blenkernel/intern/string_search.cc @@ -2,9 +2,14 @@ * * SPDX-License-Identifier: GPL-2.0-or-later */ +#include + +#include "BKE_appdir.h" #include "BKE_string_search.hh" +#include "BLI_fileops.hh" #include "BLI_map.hh" +#include "BLI_path_util.h" namespace blender::bke::string_search { @@ -12,7 +17,7 @@ using blender::string_search::RecentCache; struct RecentCacheStorage { int logical_clock = 0; - Map map; + RecentCache cache; }; static RecentCacheStorage &get_recent_cache_storage() @@ -23,18 +28,66 @@ static RecentCacheStorage &get_recent_cache_storage() void add_recent_search(const StringRef choosen_str) { - const StringRef search_id = ""; RecentCacheStorage &storage = get_recent_cache_storage(); - RecentCache &cache = storage.map.lookup_or_add_default_as(search_id); - cache.logical_time_by_str.add_overwrite(choosen_str, storage.logical_clock); + storage.cache.logical_time_by_str.add_overwrite(choosen_str, storage.logical_clock); storage.logical_clock++; } const RecentCache *get_recent_cache() { - const StringRef search_id = ""; RecentCacheStorage &storage = get_recent_cache_storage(); - return storage.map.lookup_ptr_as(search_id); + return &storage.cache; +} + +static std::optional get_recent_searches_file_path() +{ + const char *user_config_dir = BKE_appdir_folder_id_create(BLENDER_USER_CONFIG, nullptr); + if (!user_config_dir) { + return std::nullopt; + } + char filepath[FILE_MAX]; + BLI_path_join(filepath, sizeof(filepath), user_config_dir, BLENDER_RECENT_SEARCHES_FILE); + return std::string(filepath); +} + +void write_recent_searches_file() +{ + const std::optional path = get_recent_searches_file_path(); + if (!path) { + return; + } + + const RecentCacheStorage &storage = get_recent_cache_storage(); + Vector> values; + for (const auto item : storage.cache.logical_time_by_str.items()) { + values.append({item.value, item.key}); + } + std::sort(values.begin(), values.end()); + + fstream file(*path, std::ios::out); + for (const auto &item : values) { + file.write(item.second.data(), item.second.size()); + file.write("\n", 1); + } +} + +void read_recent_searches_file() +{ + const std::optional path = get_recent_searches_file_path(); + if (!path) { + return; + } + + RecentCacheStorage &storage = get_recent_cache_storage(); + storage.logical_clock = 0; + storage.cache.logical_time_by_str.clear(); + + fstream file(*path); + std::string line; + while (std::getline(file, line)) { + storage.cache.logical_time_by_str.add_overwrite(line, storage.logical_clock); + storage.logical_clock++; + } } } // namespace blender::bke::string_search diff --git a/source/blender/windowmanager/intern/wm_init_exit.cc b/source/blender/windowmanager/intern/wm_init_exit.cc index 9b0641ceeb1..03129c9c238 100644 --- a/source/blender/windowmanager/intern/wm_init_exit.cc +++ b/source/blender/windowmanager/intern/wm_init_exit.cc @@ -54,6 +54,7 @@ #include "BKE_scene.h" #include "BKE_screen.h" #include "BKE_sound.h" +#include "BKE_string_search.hh" #include "BKE_vfont.h" #include "BKE_addon.h" @@ -353,6 +354,7 @@ void WM_init(bContext *C, int argc, const char **argv) ED_render_clear_mtex_copybuf(); wm_history_file_read(); + blender::bke::string_search::read_recent_searches_file(); STRNCPY(G.lib, BKE_main_blendfile_path_from_global()); @@ -521,6 +523,10 @@ void WM_exit_ex(bContext *C, const bool do_python, const bool do_user_exit_actio ED_screen_exit(C, win, WM_window_get_active_screen(win)); } + if (!G.background) { + blender::bke::string_search::write_recent_searches_file(); + } + if (do_user_exit_actions) { if ((U.pref_flag & USER_PREF_FLAG_SAVE) && ((G.f & G_FLAG_USERPREF_NO_SAVE_ON_EXIT) == 0)) { if (U.runtime.is_dirty) { -- 2.30.2 From 0b02527190cd8b482bea17564b10f61de3100b7c Mon Sep 17 00:00:00 2001 From: Jacques Lucke Date: Sat, 5 Aug 2023 12:42:53 +0200 Subject: [PATCH 05/14] add comments --- source/blender/blenkernel/BKE_string_search.hh | 8 ++++++++ source/blender/blenkernel/intern/string_search.cc | 4 ++++ 2 files changed, 12 insertions(+) diff --git a/source/blender/blenkernel/BKE_string_search.hh b/source/blender/blenkernel/BKE_string_search.hh index 6558fd387ab..2e9fe35a63b 100644 --- a/source/blender/blenkernel/BKE_string_search.hh +++ b/source/blender/blenkernel/BKE_string_search.hh @@ -8,6 +8,10 @@ namespace blender::bke::string_search { +/** + * Remember the string that the user chose. This allows us to put it higher up in the search items + * later on. + */ void add_recent_search(StringRef choosen_str); const blender::string_search::RecentCache *get_recent_cache(); @@ -15,6 +19,10 @@ const blender::string_search::RecentCache *get_recent_cache(); void write_recent_searches_file(); void read_recent_searches_file(); +/** + * Wrapper for the lower level #StringSearch in blenlib, that takes recent searches into account + * automatically. + */ template class StringSearch : public blender::string_search::StringSearch { public: StringSearch() : blender::string_search::StringSearch(get_recent_cache()) {} diff --git a/source/blender/blenkernel/intern/string_search.cc b/source/blender/blenkernel/intern/string_search.cc index c0c243d1a14..26a12ac4c0c 100644 --- a/source/blender/blenkernel/intern/string_search.cc +++ b/source/blender/blenkernel/intern/string_search.cc @@ -16,6 +16,10 @@ namespace blender::bke::string_search { using blender::string_search::RecentCache; struct RecentCacheStorage { + /** + * Is incremented every time a search item has been selected. This is used to keep track of the + * order of recent searches. + */ int logical_clock = 0; RecentCache cache; }; -- 2.30.2 From 175d7cc3a13798acc270ccc203807f61a5c18a98 Mon Sep 17 00:00:00 2001 From: Jacques Lucke Date: Fri, 1 Sep 2023 19:19:55 +0200 Subject: [PATCH 06/14] typo --- source/blender/blenlib/BLI_string_search.hh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/blender/blenlib/BLI_string_search.hh b/source/blender/blenlib/BLI_string_search.hh index 2b6c8035ed4..6f5ce383de0 100644 --- a/source/blender/blenlib/BLI_string_search.hh +++ b/source/blender/blenlib/BLI_string_search.hh @@ -23,7 +23,7 @@ struct SearchItem { struct RecentCache { /** * Stores a logical time stamp for each previously choosen search item. The higher the time - * stamp, the more recent the item has been selected. + * stamp, the more recently the item has been selected. */ Map logical_time_by_str; }; -- 2.30.2 From cf94ec5e70c4f5044fb0d118c43fb99902c4e886 Mon Sep 17 00:00:00 2001 From: Jacques Lucke Date: Fri, 1 Sep 2023 19:21:06 +0200 Subject: [PATCH 07/14] remove comma --- source/blender/blenkernel/BKE_string_search.hh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/blender/blenkernel/BKE_string_search.hh b/source/blender/blenkernel/BKE_string_search.hh index 2e9fe35a63b..1d260c6def1 100644 --- a/source/blender/blenkernel/BKE_string_search.hh +++ b/source/blender/blenkernel/BKE_string_search.hh @@ -20,7 +20,7 @@ void write_recent_searches_file(); void read_recent_searches_file(); /** - * Wrapper for the lower level #StringSearch in blenlib, that takes recent searches into account + * Wrapper for the lower level #StringSearch in blenlib that takes recent searches into account * automatically. */ template class StringSearch : public blender::string_search::StringSearch { -- 2.30.2 From 7c08d44da8bfc74ba0e519c242da9c1be395775b Mon Sep 17 00:00:00 2001 From: Jacques Lucke Date: Fri, 1 Sep 2023 19:29:48 +0200 Subject: [PATCH 08/14] move code to UI_string_search.hh --- source/blender/blenkernel/CMakeLists.txt | 2 -- .../include/UI_string_search.hh} | 6 +++--- source/blender/editors/interface/CMakeLists.txt | 1 + source/blender/editors/interface/interface.cc | 4 ++-- source/blender/editors/interface/interface_handlers.cc | 4 ++-- .../interface/interface_string_search.cc} | 9 +++++---- .../interface/interface_template_attribute_search.cc | 4 ++-- .../editors/interface/interface_template_search_menu.cc | 4 ++-- source/blender/editors/interface/interface_templates.cc | 4 ++-- source/blender/editors/interface/interface_utils.cc | 4 ++-- source/blender/editors/space_node/add_node_search.cc | 4 ++-- source/blender/editors/space_node/link_drag_search.cc | 4 ++-- source/blender/editors/space_node/node_select.cc | 4 ++-- source/blender/editors/util/CMakeLists.txt | 1 + source/blender/windowmanager/intern/wm_init_exit.cc | 6 +++--- 15 files changed, 31 insertions(+), 30 deletions(-) rename source/blender/{blenkernel/BKE_string_search.hh => editors/include/UI_string_search.hh} (84%) rename source/blender/{blenkernel/intern/string_search.cc => editors/interface/interface_string_search.cc} (93%) diff --git a/source/blender/blenkernel/CMakeLists.txt b/source/blender/blenkernel/CMakeLists.txt index ed047e7c75b..71a0baa1936 100644 --- a/source/blender/blenkernel/CMakeLists.txt +++ b/source/blender/blenkernel/CMakeLists.txt @@ -274,7 +274,6 @@ set(SRC intern/softbody.c intern/sound.cc intern/speaker.cc - intern/string_search.cc intern/studiolight.cc intern/subdiv.cc intern/subdiv_ccg.cc @@ -485,7 +484,6 @@ set(SRC BKE_softbody.h BKE_sound.h BKE_speaker.h - BKE_string_search.hh BKE_studiolight.h BKE_subdiv.hh BKE_subdiv_ccg.hh diff --git a/source/blender/blenkernel/BKE_string_search.hh b/source/blender/editors/include/UI_string_search.hh similarity index 84% rename from source/blender/blenkernel/BKE_string_search.hh rename to source/blender/editors/include/UI_string_search.hh index 1d260c6def1..b43aa24f7fe 100644 --- a/source/blender/blenkernel/BKE_string_search.hh +++ b/source/blender/editors/include/UI_string_search.hh @@ -1,4 +1,4 @@ -/* SPDX-FileCopyrightText: 2023 Blender Foundation +/* SPDX-FileCopyrightText: 2023 Blender Authors * * SPDX-License-Identifier: GPL-2.0-or-later */ @@ -6,7 +6,7 @@ #include "BLI_string_search.hh" -namespace blender::bke::string_search { +namespace blender::ui::string_search { /** * Remember the string that the user chose. This allows us to put it higher up in the search items @@ -28,4 +28,4 @@ template class StringSearch : public blender::string_search::StringS StringSearch() : blender::string_search::StringSearch(get_recent_cache()) {} }; -} // namespace blender::bke::string_search +} // namespace blender::ui::string_search diff --git a/source/blender/editors/interface/CMakeLists.txt b/source/blender/editors/interface/CMakeLists.txt index d249126ca75..fcd285b6cad 100644 --- a/source/blender/editors/interface/CMakeLists.txt +++ b/source/blender/editors/interface/CMakeLists.txt @@ -64,6 +64,7 @@ set(SRC interface_region_search.cc interface_region_tooltip.cc interface_regions.cc + interface_string_search.cc interface_style.cc interface_template_asset_view.cc interface_template_attribute_search.cc diff --git a/source/blender/editors/interface/interface.cc b/source/blender/editors/interface/interface.cc index 9f64e3e0b31..441e756d89e 100644 --- a/source/blender/editors/interface/interface.cc +++ b/source/blender/editors/interface/interface.cc @@ -39,8 +39,8 @@ #include "BKE_report.h" #include "BKE_scene.h" #include "BKE_screen.h" -#include "BKE_string_search.hh" #include "BKE_unit.h" +#include "UI_string_search.hh" #include "ED_asset.hh" @@ -6375,7 +6375,7 @@ static void operator_enum_search_update_fn( const EnumPropertyItem *all_items; RNA_property_enum_items_gettexted((bContext *)C, ptr, prop, &all_items, nullptr, &do_free); - blender::bke::string_search::StringSearch search; + blender::ui::string_search::StringSearch search; for (const EnumPropertyItem *item = all_items; item->identifier; item++) { search.add(item->name, item); diff --git a/source/blender/editors/interface/interface_handlers.cc b/source/blender/editors/interface/interface_handlers.cc index 461847698d4..a33bbae23ee 100644 --- a/source/blender/editors/interface/interface_handlers.cc +++ b/source/blender/editors/interface/interface_handlers.cc @@ -45,9 +45,9 @@ #include "BKE_paint.hh" #include "BKE_report.h" #include "BKE_screen.h" -#include "BKE_string_search.hh" #include "BKE_tracking.h" #include "BKE_unit.h" +#include "UI_string_search.hh" #include "GHOST_C-api.h" @@ -1254,7 +1254,7 @@ static void ui_apply_but_TEX(bContext *C, uiBut *but, uiHandleButtonData *data) uiButSearch *search_but = (uiButSearch *)but; but->func_arg2 = search_but->item_active; - blender::bke::string_search::add_recent_search(search_but->item_active_str); + blender::ui::string_search::add_recent_search(search_but->item_active_str); } ui_apply_but_func(C, but); diff --git a/source/blender/blenkernel/intern/string_search.cc b/source/blender/editors/interface/interface_string_search.cc similarity index 93% rename from source/blender/blenkernel/intern/string_search.cc rename to source/blender/editors/interface/interface_string_search.cc index 26a12ac4c0c..086a0e226c6 100644 --- a/source/blender/blenkernel/intern/string_search.cc +++ b/source/blender/editors/interface/interface_string_search.cc @@ -1,17 +1,18 @@ -/* SPDX-FileCopyrightText: 2023 Blender Foundation +/* SPDX-FileCopyrightText: 2023 Blender Authors * * SPDX-License-Identifier: GPL-2.0-or-later */ #include #include "BKE_appdir.h" -#include "BKE_string_search.hh" + +#include "UI_string_search.hh" #include "BLI_fileops.hh" #include "BLI_map.hh" #include "BLI_path_util.h" -namespace blender::bke::string_search { +namespace blender::ui::string_search { using blender::string_search::RecentCache; @@ -94,4 +95,4 @@ void read_recent_searches_file() } } -} // namespace blender::bke::string_search +} // namespace blender::ui::string_search diff --git a/source/blender/editors/interface/interface_template_attribute_search.cc b/source/blender/editors/interface/interface_template_attribute_search.cc index 457073e79f5..e788ebe2fa5 100644 --- a/source/blender/editors/interface/interface_template_attribute_search.cc +++ b/source/blender/editors/interface/interface_template_attribute_search.cc @@ -16,7 +16,7 @@ #include "BLT_translation.h" #include "BKE_attribute.hh" -#include "BKE_string_search.hh" +#include "UI_string_search.hh" #include "NOD_geometry_nodes_log.hh" @@ -91,7 +91,7 @@ void attribute_search_add_items(StringRefNull str, * so the items are in the same order they will appear in while searching. */ const char *string = is_first ? "" : str.c_str(); - bke::string_search::StringSearch search; + ui::string_search::StringSearch search; for (const GeometryAttributeInfo *item : infos) { if (!bke::allow_procedural_attribute_access(item->name)) { continue; diff --git a/source/blender/editors/interface/interface_template_search_menu.cc b/source/blender/editors/interface/interface_template_search_menu.cc index f475813e443..d3d0e96416e 100644 --- a/source/blender/editors/interface/interface_template_search_menu.cc +++ b/source/blender/editors/interface/interface_template_search_menu.cc @@ -39,7 +39,7 @@ #include "BKE_context.h" #include "BKE_global.h" #include "BKE_screen.h" -#include "BKE_string_search.hh" +#include "UI_string_search.hh" #include "ED_screen.hh" @@ -990,7 +990,7 @@ static void menu_search_update_fn(const bContext * /*C*/, { MenuSearch_Data *data = (MenuSearch_Data *)arg; - blender::bke::string_search::StringSearch search; + blender::ui::string_search::StringSearch search; LISTBASE_FOREACH (MenuSearch_Item *, item, &data->items) { search.add(item->drawwstr_full, item); diff --git a/source/blender/editors/interface/interface_templates.cc b/source/blender/editors/interface/interface_templates.cc index d7e687824c5..608a8236384 100644 --- a/source/blender/editors/interface/interface_templates.cc +++ b/source/blender/editors/interface/interface_templates.cc @@ -67,7 +67,7 @@ #include "BKE_scene.h" #include "BKE_screen.h" #include "BKE_shader_fx.h" -#include "BKE_string_search.hh" +#include "UI_string_search.hh" #include "DEG_depsgraph.h" #include "DEG_depsgraph_build.h" @@ -426,7 +426,7 @@ static void id_search_cb(const bContext *C, ListBase *lb = template_ui->idlb; const int flag = RNA_property_flag(template_ui->prop); - blender::bke::string_search::StringSearch search; + blender::ui::string_search::StringSearch search; /* ID listbase */ LISTBASE_FOREACH (ID *, id, lb) { diff --git a/source/blender/editors/interface/interface_utils.cc b/source/blender/editors/interface/interface_utils.cc index 6d4e5837a93..654e9b45671 100644 --- a/source/blender/editors/interface/interface_utils.cc +++ b/source/blender/editors/interface/interface_utils.cc @@ -28,7 +28,7 @@ #include "BKE_lib_id.h" #include "BKE_report.h" #include "BKE_screen.h" -#include "BKE_string_search.hh" +#include "UI_string_search.hh" #include "MEM_guardedalloc.h" @@ -519,7 +519,7 @@ void ui_rna_collection_search_update_fn( char *name; bool has_id_icon = false; - blender::bke::string_search::StringSearch search; + blender::ui::string_search::StringSearch search; if (data->search_prop != nullptr) { /* build a temporary list of relevant items first */ diff --git a/source/blender/editors/space_node/add_node_search.cc b/source/blender/editors/space_node/add_node_search.cc index f650c3e80ee..79c013b9a53 100644 --- a/source/blender/editors/space_node/add_node_search.cc +++ b/source/blender/editors/space_node/add_node_search.cc @@ -19,7 +19,7 @@ #include "BKE_main.h" #include "BKE_node_tree_update.h" #include "BKE_screen.h" -#include "BKE_string_search.hh" +#include "UI_string_search.hh" #include "DEG_depsgraph_build.h" @@ -185,7 +185,7 @@ static void add_node_search_update_fn( storage.update_items_tag = false; } - bke::string_search::StringSearch search; + ui::string_search::StringSearch search; for (nodes::AddNodeItem &item : storage.search_add_items) { search.add(item.ui_name, &item, item.weight); diff --git a/source/blender/editors/space_node/link_drag_search.cc b/source/blender/editors/space_node/link_drag_search.cc index 50c98d4acc7..52061f79ceb 100644 --- a/source/blender/editors/space_node/link_drag_search.cc +++ b/source/blender/editors/space_node/link_drag_search.cc @@ -15,7 +15,7 @@ #include "BKE_node_runtime.hh" #include "BKE_node_tree_update.h" #include "BKE_screen.h" -#include "BKE_string_search.hh" +#include "UI_string_search.hh" #include "NOD_socket.hh" #include "NOD_socket_search_link.hh" @@ -359,7 +359,7 @@ static void link_drag_search_update_fn( storage.update_items_tag = false; } - bke::string_search::StringSearch search; + ui::string_search::StringSearch search; for (SocketLinkOperation &op : storage.search_link_ops) { search.add(op.name, &op, op.weight); diff --git a/source/blender/editors/space_node/node_select.cc b/source/blender/editors/space_node/node_select.cc index e9043f2b7d0..744baf74c5e 100644 --- a/source/blender/editors/space_node/node_select.cc +++ b/source/blender/editors/space_node/node_select.cc @@ -24,8 +24,8 @@ #include "BKE_node.hh" #include "BKE_node_runtime.hh" #include "BKE_node_tree_update.h" -#include "BKE_string_search.hh" #include "BKE_workspace.h" +#include "UI_string_search.hh" #include "ED_node.hh" /* own include */ #include "ED_screen.hh" @@ -1356,7 +1356,7 @@ static void node_find_update_fn(const bContext *C, { SpaceNode *snode = CTX_wm_space_node(C); - bke::string_search::StringSearch search; + ui::string_search::StringSearch search; for (bNode *node : snode->edittree->all_nodes()) { char name[256]; diff --git a/source/blender/editors/util/CMakeLists.txt b/source/blender/editors/util/CMakeLists.txt index 6d801f08667..8c2f2fc909d 100644 --- a/source/blender/editors/util/CMakeLists.txt +++ b/source/blender/editors/util/CMakeLists.txt @@ -103,6 +103,7 @@ set(SRC ../include/UI_interface_c.hh ../include/UI_interface_icons.hh ../include/UI_resources.hh + ../include/UI_string_search.hh ../include/UI_tree_view.hh ../include/UI_view2d.hh ) diff --git a/source/blender/windowmanager/intern/wm_init_exit.cc b/source/blender/windowmanager/intern/wm_init_exit.cc index 7ff4d943955..f0a4d2b298b 100644 --- a/source/blender/windowmanager/intern/wm_init_exit.cc +++ b/source/blender/windowmanager/intern/wm_init_exit.cc @@ -54,8 +54,8 @@ #include "BKE_scene.h" #include "BKE_screen.h" #include "BKE_sound.h" -#include "BKE_string_search.hh" #include "BKE_vfont.h" +#include "UI_string_search.hh" #include "BKE_addon.h" #include "BKE_appdir.h" @@ -354,7 +354,7 @@ void WM_init(bContext *C, int argc, const char **argv) ED_render_clear_mtex_copybuf(); wm_history_file_read(); - blender::bke::string_search::read_recent_searches_file(); + blender::ui::string_search::read_recent_searches_file(); STRNCPY(G.lib, BKE_main_blendfile_path_from_global()); @@ -524,7 +524,7 @@ void WM_exit_ex(bContext *C, const bool do_python, const bool do_user_exit_actio } if (!G.background) { - blender::bke::string_search::write_recent_searches_file(); + blender::ui::string_search::write_recent_searches_file(); } if (do_user_exit_actions) { -- 2.30.2 From 2fcd6cb127d74975c0e3508475bd78f7fea64b49 Mon Sep 17 00:00:00 2001 From: Jacques Lucke Date: Fri, 1 Sep 2023 19:32:07 +0200 Subject: [PATCH 09/14] move includes to correct place --- source/blender/editors/interface/interface.cc | 2 +- source/blender/editors/interface/interface_handlers.cc | 2 +- .../editors/interface/interface_template_attribute_search.cc | 2 +- .../editors/interface/interface_template_search_menu.cc | 2 +- source/blender/editors/interface/interface_templates.cc | 2 +- source/blender/editors/interface/interface_utils.cc | 2 +- source/blender/editors/space_node/add_node_search.cc | 1 + source/blender/editors/space_node/link_drag_search.cc | 1 + source/blender/editors/space_node/node_select.cc | 2 +- source/blender/windowmanager/intern/wm_init_exit.cc | 3 ++- 10 files changed, 11 insertions(+), 8 deletions(-) diff --git a/source/blender/editors/interface/interface.cc b/source/blender/editors/interface/interface.cc index 441e756d89e..b2589633d95 100644 --- a/source/blender/editors/interface/interface.cc +++ b/source/blender/editors/interface/interface.cc @@ -40,7 +40,6 @@ #include "BKE_scene.h" #include "BKE_screen.h" #include "BKE_unit.h" -#include "UI_string_search.hh" #include "ED_asset.hh" @@ -52,6 +51,7 @@ #include "UI_interface.hh" #include "UI_interface_icons.hh" +#include "UI_string_search.hh" #include "UI_view2d.hh" #include "IMB_imbuf.h" diff --git a/source/blender/editors/interface/interface_handlers.cc b/source/blender/editors/interface/interface_handlers.cc index a33bbae23ee..f601cb2cd6c 100644 --- a/source/blender/editors/interface/interface_handlers.cc +++ b/source/blender/editors/interface/interface_handlers.cc @@ -47,7 +47,6 @@ #include "BKE_screen.h" #include "BKE_tracking.h" #include "BKE_unit.h" -#include "UI_string_search.hh" #include "GHOST_C-api.h" @@ -57,6 +56,7 @@ #include "ED_undo.hh" #include "UI_interface.hh" +#include "UI_string_search.hh" #include "UI_view2d.hh" #include "BLF_api.h" diff --git a/source/blender/editors/interface/interface_template_attribute_search.cc b/source/blender/editors/interface/interface_template_attribute_search.cc index e788ebe2fa5..d91cee813c5 100644 --- a/source/blender/editors/interface/interface_template_attribute_search.cc +++ b/source/blender/editors/interface/interface_template_attribute_search.cc @@ -16,12 +16,12 @@ #include "BLT_translation.h" #include "BKE_attribute.hh" -#include "UI_string_search.hh" #include "NOD_geometry_nodes_log.hh" #include "UI_interface.hh" #include "UI_resources.hh" +#include "UI_string_search.hh" using blender::nodes::geo_eval_log::GeometryAttributeInfo; diff --git a/source/blender/editors/interface/interface_template_search_menu.cc b/source/blender/editors/interface/interface_template_search_menu.cc index d3d0e96416e..fed3e9e4f66 100644 --- a/source/blender/editors/interface/interface_template_search_menu.cc +++ b/source/blender/editors/interface/interface_template_search_menu.cc @@ -39,7 +39,6 @@ #include "BKE_context.h" #include "BKE_global.h" #include "BKE_screen.h" -#include "UI_string_search.hh" #include "ED_screen.hh" @@ -50,6 +49,7 @@ #include "WM_types.hh" #include "UI_interface.hh" +#include "UI_string_search.hh" #include "interface_intern.hh" /* For key-map item access. */ diff --git a/source/blender/editors/interface/interface_templates.cc b/source/blender/editors/interface/interface_templates.cc index 608a8236384..eb792e58cb9 100644 --- a/source/blender/editors/interface/interface_templates.cc +++ b/source/blender/editors/interface/interface_templates.cc @@ -67,7 +67,6 @@ #include "BKE_scene.h" #include "BKE_screen.h" #include "BKE_shader_fx.h" -#include "UI_string_search.hh" #include "DEG_depsgraph.h" #include "DEG_depsgraph_build.h" @@ -90,6 +89,7 @@ #include "UI_interface.hh" #include "UI_interface_icons.hh" +#include "UI_string_search.hh" #include "UI_view2d.hh" #include "interface_intern.hh" diff --git a/source/blender/editors/interface/interface_utils.cc b/source/blender/editors/interface/interface_utils.cc index 654e9b45671..0e045c8515e 100644 --- a/source/blender/editors/interface/interface_utils.cc +++ b/source/blender/editors/interface/interface_utils.cc @@ -28,7 +28,6 @@ #include "BKE_lib_id.h" #include "BKE_report.h" #include "BKE_screen.h" -#include "UI_string_search.hh" #include "MEM_guardedalloc.h" @@ -37,6 +36,7 @@ #include "UI_interface.hh" #include "UI_interface_icons.hh" #include "UI_resources.hh" +#include "UI_string_search.hh" #include "UI_view2d.hh" #include "WM_api.hh" diff --git a/source/blender/editors/space_node/add_node_search.cc b/source/blender/editors/space_node/add_node_search.cc index 79c013b9a53..d39cd2792ca 100644 --- a/source/blender/editors/space_node/add_node_search.cc +++ b/source/blender/editors/space_node/add_node_search.cc @@ -19,6 +19,7 @@ #include "BKE_main.h" #include "BKE_node_tree_update.h" #include "BKE_screen.h" + #include "UI_string_search.hh" #include "DEG_depsgraph_build.h" diff --git a/source/blender/editors/space_node/link_drag_search.cc b/source/blender/editors/space_node/link_drag_search.cc index 52061f79ceb..e2edc0963c9 100644 --- a/source/blender/editors/space_node/link_drag_search.cc +++ b/source/blender/editors/space_node/link_drag_search.cc @@ -15,6 +15,7 @@ #include "BKE_node_runtime.hh" #include "BKE_node_tree_update.h" #include "BKE_screen.h" + #include "UI_string_search.hh" #include "NOD_socket.hh" diff --git a/source/blender/editors/space_node/node_select.cc b/source/blender/editors/space_node/node_select.cc index 744baf74c5e..e252343823a 100644 --- a/source/blender/editors/space_node/node_select.cc +++ b/source/blender/editors/space_node/node_select.cc @@ -25,7 +25,6 @@ #include "BKE_node_runtime.hh" #include "BKE_node_tree_update.h" #include "BKE_workspace.h" -#include "UI_string_search.hh" #include "ED_node.hh" /* own include */ #include "ED_screen.hh" @@ -41,6 +40,7 @@ #include "UI_interface.hh" #include "UI_resources.hh" +#include "UI_string_search.hh" #include "UI_view2d.hh" #include "DEG_depsgraph.h" diff --git a/source/blender/windowmanager/intern/wm_init_exit.cc b/source/blender/windowmanager/intern/wm_init_exit.cc index f0a4d2b298b..0a4aa6436ae 100644 --- a/source/blender/windowmanager/intern/wm_init_exit.cc +++ b/source/blender/windowmanager/intern/wm_init_exit.cc @@ -55,7 +55,6 @@ #include "BKE_screen.h" #include "BKE_sound.h" #include "BKE_vfont.h" -#include "UI_string_search.hh" #include "BKE_addon.h" #include "BKE_appdir.h" @@ -111,8 +110,10 @@ #include "BLF_api.h" #include "BLT_lang.h" + #include "UI_interface.hh" #include "UI_resources.hh" +#include "UI_string_search.hh" #include "GPU_context.h" #include "GPU_init_exit.h" -- 2.30.2 From a49a8157f2d07bf6b01c61b69dce8cb22dcd60ed Mon Sep 17 00:00:00 2001 From: Jacques Lucke Date: Mon, 4 Sep 2023 15:11:14 +0200 Subject: [PATCH 10/14] remove include --- source/blender/editors/space_node/add_node_search.cc | 1 - 1 file changed, 1 deletion(-) diff --git a/source/blender/editors/space_node/add_node_search.cc b/source/blender/editors/space_node/add_node_search.cc index 9ff11828106..5b80112ae70 100644 --- a/source/blender/editors/space_node/add_node_search.cc +++ b/source/blender/editors/space_node/add_node_search.cc @@ -10,7 +10,6 @@ #include "BLI_listbase.h" #include "BLI_string.h" -#include "BLI_string_search.hh" #include "DNA_space_types.h" -- 2.30.2 From 00dbd213cc57cc5df824c86d5dd196602ef2af09 Mon Sep 17 00:00:00 2001 From: Jacques Lucke Date: Wed, 20 Sep 2023 10:27:12 +0200 Subject: [PATCH 11/14] typo --- source/blender/editors/include/UI_string_search.hh | 2 +- source/blender/editors/interface/interface_string_search.cc | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/source/blender/editors/include/UI_string_search.hh b/source/blender/editors/include/UI_string_search.hh index b43aa24f7fe..6aab4d4ebc1 100644 --- a/source/blender/editors/include/UI_string_search.hh +++ b/source/blender/editors/include/UI_string_search.hh @@ -12,7 +12,7 @@ namespace blender::ui::string_search { * Remember the string that the user chose. This allows us to put it higher up in the search items * later on. */ -void add_recent_search(StringRef choosen_str); +void add_recent_search(StringRef chosen_str); const blender::string_search::RecentCache *get_recent_cache(); diff --git a/source/blender/editors/interface/interface_string_search.cc b/source/blender/editors/interface/interface_string_search.cc index 086a0e226c6..5cf97ec4935 100644 --- a/source/blender/editors/interface/interface_string_search.cc +++ b/source/blender/editors/interface/interface_string_search.cc @@ -31,10 +31,10 @@ static RecentCacheStorage &get_recent_cache_storage() return storage; } -void add_recent_search(const StringRef choosen_str) +void add_recent_search(const StringRef chosen_str) { RecentCacheStorage &storage = get_recent_cache_storage(); - storage.cache.logical_time_by_str.add_overwrite(choosen_str, storage.logical_clock); + storage.cache.logical_time_by_str.add_overwrite(chosen_str, storage.logical_clock); storage.logical_clock++; } -- 2.30.2 From ce7fd1b3c99c8a49a9a9668680ccfc06ff9e7091 Mon Sep 17 00:00:00 2001 From: Jacques Lucke Date: Thu, 21 Sep 2023 09:40:07 +0200 Subject: [PATCH 12/14] add user preference option --- scripts/startup/bl_ui/space_userpref.py | 2 ++ source/blender/blenloader/intern/versioning_userdef.cc | 2 +- source/blender/editors/include/UI_string_search.hh | 7 +++++-- .../blender/editors/interface/interface_string_search.cc | 7 ++++++- source/blender/makesdna/DNA_userdef_types.h | 6 +++--- source/blender/makesrna/intern/rna_userdef.cc | 4 ++++ 6 files changed, 21 insertions(+), 7 deletions(-) diff --git a/scripts/startup/bl_ui/space_userpref.py b/scripts/startup/bl_ui/space_userpref.py index f89c04b6b1f..e40898ae458 100644 --- a/scripts/startup/bl_ui/space_userpref.py +++ b/scripts/startup/bl_ui/space_userpref.py @@ -216,6 +216,8 @@ class USERPREF_PT_interface_display(InterfacePanel, CenterAlignMixIn, Panel): sub.active = view.show_tooltips sub.prop(view, "show_tooltips_python") + layout.prop(prefs, "use_recent_searches") + class USERPREF_PT_interface_text(InterfacePanel, CenterAlignMixIn, Panel): bl_label = "Text Rendering" diff --git a/source/blender/blenloader/intern/versioning_userdef.cc b/source/blender/blenloader/intern/versioning_userdef.cc index 8d0531bc888..aed6ac9e437 100644 --- a/source/blender/blenloader/intern/versioning_userdef.cc +++ b/source/blender/blenloader/intern/versioning_userdef.cc @@ -458,7 +458,7 @@ void blo_do_versions_userdef(UserDef *userdef) if (!USER_VERSION_ATLEAST(278, 6)) { /* Clear preference flags for re-use. */ - userdef->flag &= ~(USER_FLAG_NUMINPUT_ADVANCED | USER_FLAG_UNUSED_2 | USER_FLAG_UNUSED_3 | + userdef->flag &= ~(USER_FLAG_NUMINPUT_ADVANCED | (1 << 2) | USER_FLAG_UNUSED_3 | USER_FLAG_UNUSED_6 | USER_FLAG_UNUSED_7 | USER_FLAG_UNUSED_9 | USER_DEVELOPER_UI); userdef->uiflag &= ~(USER_HEADER_BOTTOM); diff --git a/source/blender/editors/include/UI_string_search.hh b/source/blender/editors/include/UI_string_search.hh index 6aab4d4ebc1..5363fe9c9c0 100644 --- a/source/blender/editors/include/UI_string_search.hh +++ b/source/blender/editors/include/UI_string_search.hh @@ -14,7 +14,10 @@ namespace blender::ui::string_search { */ void add_recent_search(StringRef chosen_str); -const blender::string_search::RecentCache *get_recent_cache(); +/** + * Depending on the user preferences, either outputs the recent cache or null. + */ +const blender::string_search::RecentCache *get_recent_cache_or_null(); void write_recent_searches_file(); void read_recent_searches_file(); @@ -25,7 +28,7 @@ void read_recent_searches_file(); */ template class StringSearch : public blender::string_search::StringSearch { public: - StringSearch() : blender::string_search::StringSearch(get_recent_cache()) {} + StringSearch() : blender::string_search::StringSearch(get_recent_cache_or_null()) {} }; } // namespace blender::ui::string_search diff --git a/source/blender/editors/interface/interface_string_search.cc b/source/blender/editors/interface/interface_string_search.cc index 5cf97ec4935..ba8081e645e 100644 --- a/source/blender/editors/interface/interface_string_search.cc +++ b/source/blender/editors/interface/interface_string_search.cc @@ -6,6 +6,8 @@ #include "BKE_appdir.h" +#include "DNA_userdef_types.h" + #include "UI_string_search.hh" #include "BLI_fileops.hh" @@ -38,8 +40,11 @@ void add_recent_search(const StringRef chosen_str) storage.logical_clock++; } -const RecentCache *get_recent_cache() +const RecentCache *get_recent_cache_or_null() { + if (U.flag & USER_FLAG_RECENT_SEARCHES_DISABLE) { + return nullptr; + } RecentCacheStorage &storage = get_recent_cache_storage(); return &storage.cache; } diff --git a/source/blender/makesdna/DNA_userdef_types.h b/source/blender/makesdna/DNA_userdef_types.h index bce18ad25b5..4f12360917b 100644 --- a/source/blender/makesdna/DNA_userdef_types.h +++ b/source/blender/makesdna/DNA_userdef_types.h @@ -1084,9 +1084,9 @@ typedef enum eUserPref_SpaceData_Flag { typedef enum eUserPref_Flag { USER_AUTOSAVE = (1 << 0), USER_FLAG_NUMINPUT_ADVANCED = (1 << 1), - USER_FLAG_UNUSED_2 = (1 << 2), /* cleared */ - USER_FLAG_UNUSED_3 = (1 << 3), /* cleared */ - USER_FLAG_UNUSED_4 = (1 << 4), /* cleared */ + USER_FLAG_RECENT_SEARCHES_DISABLE = (1 << 2), /* cleared */ + USER_FLAG_UNUSED_3 = (1 << 3), /* cleared */ + USER_FLAG_UNUSED_4 = (1 << 4), /* cleared */ USER_TRACKBALL = (1 << 5), USER_FLAG_UNUSED_6 = (1 << 6), /* cleared */ USER_FLAG_UNUSED_7 = (1 << 7), /* cleared */ diff --git a/source/blender/makesrna/intern/rna_userdef.cc b/source/blender/makesrna/intern/rna_userdef.cc index 1f88897c26f..a731750f74a 100644 --- a/source/blender/makesrna/intern/rna_userdef.cc +++ b/source/blender/makesrna/intern/rna_userdef.cc @@ -7143,6 +7143,10 @@ void RNA_def_userdef(BlenderRNA *brna) RNA_def_property_ui_text(prop, "Auto-Execution Paths", ""); rna_def_userdef_autoexec_path_collection(brna, prop); + prop = RNA_def_property(srna, "use_recent_searches", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_negative_sdna(prop, nullptr, "flag", USER_FLAG_RECENT_SEARCHES_DISABLE); + RNA_def_property_ui_text(prop, "Recent Searches", "Sort the recently searched items at the top"); + /* nested structs */ prop = RNA_def_property(srna, "view", PROP_POINTER, PROP_NONE); RNA_def_property_flag(prop, PROP_NEVER_NULL); -- 2.30.2 From 335f7cc347296c8b1ac01eb25b5c1fb6c976dbd1 Mon Sep 17 00:00:00 2001 From: Jacques Lucke Date: Fri, 22 Sep 2023 22:09:31 +0200 Subject: [PATCH 13/14] apply Pablo's patch --- scripts/startup/bl_ui/space_userpref.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/scripts/startup/bl_ui/space_userpref.py b/scripts/startup/bl_ui/space_userpref.py index 8d6edf75012..096e767e4d6 100644 --- a/scripts/startup/bl_ui/space_userpref.py +++ b/scripts/startup/bl_ui/space_userpref.py @@ -216,7 +216,10 @@ class USERPREF_PT_interface_display(InterfacePanel, CenterAlignMixIn, Panel): sub.active = view.show_tooltips sub.prop(view, "show_tooltips_python") - layout.prop(prefs, "use_recent_searches") + col.separator() + + col = layout.column(heading="Search", align=True) + col.prop(prefs, "use_recent_searches", text="Sort by Most Recent") class USERPREF_PT_interface_text(InterfacePanel, CenterAlignMixIn, Panel): -- 2.30.2 From d5e9574b2d1ec8a92d2567b39f941bf70e2150d0 Mon Sep 17 00:00:00 2001 From: Jacques Lucke Date: Mon, 25 Sep 2023 10:47:48 +0200 Subject: [PATCH 14/14] add comment --- source/blender/blenlib/BLI_string_search.hh | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/source/blender/blenlib/BLI_string_search.hh b/source/blender/blenlib/BLI_string_search.hh index 6f5ce383de0..aee4a2d2a72 100644 --- a/source/blender/blenlib/BLI_string_search.hh +++ b/source/blender/blenlib/BLI_string_search.hh @@ -17,6 +17,10 @@ struct SearchItem { Span normalized_words; int length; int weight; + /** + * This is a logical time stamp, i.e. the greater it is, the more recent the item was used. The + * number is not based on an actual clock. + */ int recent_time; }; -- 2.30.2