diff options
author | Campbell Barton <ideasman42@gmail.com> | 2013-05-02 08:59:52 +0400 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2013-05-02 08:59:52 +0400 |
commit | d5b36bf0274da3139d283f5ebb29d6ed345685de (patch) | |
tree | 46ee9c0115796385088cef872ed16d4ad427acad /source/blender/editors/interface/interface_regions.c | |
parent | e2e1b0d20dc6673cf75170e01b233789de86037b (diff) |
fix [#35178] Autoselect-in-list for Vertex Group selection doesn't work.
disallow assigning values that don't exist into a text field with a search-box.
Diffstat (limited to 'source/blender/editors/interface/interface_regions.c')
-rw-r--r-- | source/blender/editors/interface/interface_regions.c | 33 |
1 files changed, 27 insertions, 6 deletions
diff --git a/source/blender/editors/interface/interface_regions.c b/source/blender/editors/interface/interface_regions.c index 03d831035b2..f9523c28048 100644 --- a/source/blender/editors/interface/interface_regions.c +++ b/source/blender/editors/interface/interface_regions.c @@ -801,6 +801,17 @@ int uiSearchBoxWidth(void) return 9 * UI_UNIT_X; } +int uiSearchItemFindIndex(uiSearchItems *items, const char *name) +{ + int i; + for (i = 0; i < items->totitem; i++) { + if (STREQ(name, items->names[i])) { + return i; + } + } + return -1; +} + /* ar is the search box itself */ static void ui_searchbox_select(bContext *C, ARegion *ar, uiBut *but, int step) { @@ -866,6 +877,12 @@ static void ui_searchbox_butrect(rcti *rect, uiSearchboxData *data, int itemnr) } +int ui_searchbox_find_index(ARegion *ar, const char *name) +{ + uiSearchboxData *data = ar->regiondata; + return uiSearchItemFindIndex(&data->items, name); +} + /* x and y in screencoords */ bool ui_searchbox_inside(ARegion *ar, int x, int y) { @@ -875,7 +892,7 @@ bool ui_searchbox_inside(ARegion *ar, int x, int y) } /* string validated to be of correct length (but->hardmax) */ -void ui_searchbox_apply(uiBut *but, ARegion *ar) +bool ui_searchbox_apply(uiBut *but, ARegion *ar) { uiSearchboxData *data = ar->regiondata; @@ -890,6 +907,11 @@ void ui_searchbox_apply(uiBut *but, ARegion *ar) if (cpoin) cpoin[0] = '|'; but->func_arg2 = data->items.pointers[data->active - 1]; + + return true; + } + else { + return false; } } @@ -1287,14 +1309,13 @@ void ui_but_search_test(uiBut *but) but->search_func(but->block->evil_C, but->search_arg, but->drawstr, items); /* only redalert when we are sure of it, this can miss cases when >10 matches */ - if (items->totitem == 0) + if (items->totitem == 0) { uiButSetFlag(but, UI_BUT_REDALERT); + } else if (items->more == 0) { - for (x1 = 0; x1 < items->totitem; x1++) - if (strcmp(but->drawstr, items->names[x1]) == 0) - break; - if (x1 == items->totitem) + if (uiSearchItemFindIndex(items, but->drawstr) == -1) { uiButSetFlag(but, UI_BUT_REDALERT); + } } for (x1 = 0; x1 < items->maxitem; x1++) { |